para-client-js 1.40.4 → 1.40.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"para-client-js.global.iife.js","names":["isNaN","sign","Empty","merge","format","value","format","path","http","Stream","util","util","Stream","stream","err","path","err","util","path","http","https","fs","Stream","crypto","err","cb","fs","crypto","os","err","resolve","reject","files","format","tty","sign","util","path","value","value","url","err","resolve","reject","Stream","headers","Stream","err","util","Stream","path","url","err","err","url","err","path","res","aws4","path","urlEncode","path","aws4","url","format","path","unescape"],"sources":["../../shims/assert.js","../../node_modules/es-errors/type.js","../../node_modules/object-inspect/util.inspect.js","../../node_modules/object-inspect/index.js","../../node_modules/side-channel-list/index.js","../../node_modules/es-object-atoms/index.js","../../node_modules/es-errors/index.js","../../node_modules/es-errors/eval.js","../../node_modules/es-errors/range.js","../../node_modules/es-errors/ref.js","../../node_modules/es-errors/syntax.js","../../node_modules/es-errors/uri.js","../../node_modules/math-intrinsics/abs.js","../../node_modules/math-intrinsics/floor.js","../../node_modules/math-intrinsics/max.js","../../node_modules/math-intrinsics/min.js","../../node_modules/math-intrinsics/pow.js","../../node_modules/math-intrinsics/round.js","../../node_modules/math-intrinsics/isNaN.js","../../node_modules/math-intrinsics/sign.js","../../node_modules/gopd/gOPD.js","../../node_modules/gopd/index.js","../../node_modules/es-define-property/index.js","../../node_modules/has-symbols/shams.js","../../node_modules/has-symbols/index.js","../../node_modules/get-proto/Reflect.getPrototypeOf.js","../../node_modules/get-proto/Object.getPrototypeOf.js","../../node_modules/function-bind/implementation.js","../../node_modules/function-bind/index.js","../../node_modules/call-bind-apply-helpers/functionCall.js","../../node_modules/call-bind-apply-helpers/functionApply.js","../../node_modules/call-bind-apply-helpers/reflectApply.js","../../node_modules/call-bind-apply-helpers/actualApply.js","../../node_modules/call-bind-apply-helpers/index.js","../../node_modules/dunder-proto/get.js","../../node_modules/get-proto/index.js","../../node_modules/hasown/index.js","../../node_modules/get-intrinsic/index.js","../../node_modules/call-bound/index.js","../../node_modules/side-channel-map/index.js","../../node_modules/side-channel-weakmap/index.js","../../node_modules/side-channel/index.js","../../node_modules/qs/lib/formats.js","../../node_modules/qs/lib/utils.js","../../node_modules/qs/lib/stringify.js","../../node_modules/qs/lib/parse.js","../../node_modules/qs/lib/index.js","../../node_modules/mime/Mime.js","../../node_modules/mime/types/standard.js","../../node_modules/mime/types/other.js","../../node_modules/mime/index.js","../../node_modules/methods/index.js","../../node_modules/delayed-stream/lib/delayed_stream.js","../../node_modules/combined-stream/lib/combined_stream.js","../../node_modules/mime-db/db.json","../../node_modules/mime-db/index.js","../../node_modules/mime-types/index.js","../../node_modules/asynckit/lib/defer.js","../../node_modules/asynckit/lib/async.js","../../node_modules/asynckit/lib/abort.js","../../node_modules/asynckit/lib/iterate.js","../../node_modules/asynckit/lib/state.js","../../node_modules/asynckit/lib/terminator.js","../../node_modules/asynckit/parallel.js","../../node_modules/asynckit/serialOrdered.js","../../node_modules/asynckit/serial.js","../../node_modules/asynckit/index.js","../../node_modules/has-tostringtag/shams.js","../../node_modules/es-set-tostringtag/index.js","../../node_modules/form-data/lib/populate.js","../../node_modules/form-data/lib/form_data.js","../../node_modules/@noble/hashes/_u64.js","../../node_modules/@noble/hashes/cryptoNode.js","../../node_modules/@noble/hashes/utils.js","../../node_modules/@noble/hashes/sha3.js","../../node_modules/@paralleldrive/cuid2/src/index.js","../../node_modules/@paralleldrive/cuid2/index.js","../../node_modules/wrappy/wrappy.js","../../node_modules/asap/raw.js","../../node_modules/asap/asap.js","../../node_modules/dezalgo/dezalgo.js","../../node_modules/once/once.js","../../node_modules/formidable/dist/index.cjs","../../node_modules/ms/index.js","../../node_modules/debug/src/common.js","../../node_modules/debug/src/browser.js","../../node_modules/has-flag/index.js","../../node_modules/supports-color/index.js","../../node_modules/debug/src/node.js","../../node_modules/debug/src/index.js","../../node_modules/cookiejar/cookiejar.js","../../node_modules/fast-safe-stringify/index.js","../../node_modules/superagent/lib/utils.js","../../node_modules/superagent/lib/request-base.js","../../node_modules/superagent/lib/node/http2wrapper.js","../../node_modules/superagent/lib/node/decompress.js","../../node_modules/superagent/lib/node/unzip.js","../../node_modules/superagent/lib/response-base.js","../../node_modules/superagent/lib/node/response.js","../../node_modules/superagent/lib/agent-base.js","../../node_modules/superagent/lib/node/agent.js","../../node_modules/superagent/lib/node/parsers/urlencoded.js","../../node_modules/superagent/lib/node/parsers/json.js","../../node_modules/superagent/lib/node/parsers/text.js","../../node_modules/superagent/lib/node/parsers/image.js","../../node_modules/superagent/lib/node/parsers/index.js","../../node_modules/superagent/lib/node/index.js","../../node_modules/aws4/lru.js","../../node_modules/aws4/aws4.js","../../lib/ParaObject.js","../../lib/Pager.js","../../lib/Constraint.js","../../lib/index.js"],"sourcesContent":["export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n\nassert.ok = assert;\nassert.fail = function fail(message) {\n throw new Error(message || 'Assertion failed');\n};\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n throw new Error(message || `Expected ${actual} to equal ${expected}`);\n }\n};\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","module.exports = require('util').inspect;\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n __proto__: null,\n 'double': '\"',\n single: \"'\"\n};\nvar quoteREs = {\n __proto__: null,\n 'double': /([\"\\\\])/g,\n single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n /* eslint-env browser */\n if (typeof window !== 'undefined' && obj === window) {\n return '{ [object Window] }';\n }\n if (\n (typeof globalThis !== 'undefined' && obj === globalThis)\n || (typeof global !== 'undefined' && obj === global)\n ) {\n return '{ [object globalThis] }';\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var style = opts.quoteStyle || defaultStyle;\n var quoteChar = quotes[style];\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction canTrustToString(obj) {\n return !toStringTag || !(typeof obj === 'object' && (toStringTag in obj || typeof obj[toStringTag] !== 'undefined'));\n}\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && canTrustToString(obj); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && canTrustToString(obj); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && canTrustToString(obj); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && canTrustToString(obj); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && canTrustToString(obj); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && canTrustToString(obj); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && canTrustToString(obj); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n quoteRE.lastIndex = 0;\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n","'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar root = $o && $o.next;\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && root && root === deletedNode) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n","'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n","'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n","'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n","'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n","'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n","'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {Map<K, V> | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude<import('.'), false>} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n\t\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t\t/** @type {WeakMap<K & object, V> | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable<typeof $m>} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n","'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar formats = require('./formats');\nvar getSideChannel = require('side-channel');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\n// Track objects created from arrayLimit overflow using side-channel\n// Stores the current max numeric index for O(1) lookup\nvar overflowChannel = getSideChannel();\n\nvar markOverflow = function markOverflow(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex);\n return obj;\n};\n\nvar isOverflow = function isOverflow(obj) {\n return overflowChannel.has(obj);\n};\n\nvar getMaxIndex = function getMaxIndex(obj) {\n return overflowChannel.get(obj);\n};\n\nvar setMaxIndex = function setMaxIndex(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex);\n};\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array[array.length] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted[compacted.length] = obj[j];\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? { __proto__: null } : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object' && typeof source !== 'function') {\n if (isArray(target)) {\n var nextIndex = target.length;\n if (options && typeof options.arrayLimit === 'number' && nextIndex > options.arrayLimit) {\n return markOverflow(arrayToObject(target.concat(source), options), nextIndex);\n }\n target[nextIndex] = source;\n } else if (target && typeof target === 'object') {\n if (isOverflow(target)) {\n // Add at next numeric index for overflow objects\n var newIndex = getMaxIndex(target) + 1;\n target[newIndex] = source;\n setMaxIndex(target, newIndex);\n } else if (\n (options && (options.plainObjects || options.allowPrototypes))\n || !has.call(Object.prototype, source)\n ) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n if (isOverflow(source)) {\n // Create new object with target at 0, source values shifted by 1\n var sourceKeys = Object.keys(source);\n var result = options && options.plainObjects\n ? { __proto__: null, 0: target }\n : { 0: target };\n for (var m = 0; m < sourceKeys.length; m++) {\n var oldKey = parseInt(sourceKeys[m], 10);\n result[oldKey + 1] = source[sourceKeys[m]];\n }\n return markOverflow(result, getMaxIndex(source) + 1);\n }\n var combined = [target].concat(source);\n if (options && typeof options.arrayLimit === 'number' && combined.length > options.arrayLimit) {\n return markOverflow(arrayToObject(combined, options), combined.length - 1);\n }\n return combined;\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target[target.length] = item;\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n\n if (isOverflow(source) && !isOverflow(acc)) {\n markOverflow(acc, getMaxIndex(source));\n }\n if (isOverflow(acc)) {\n var keyNum = parseInt(key, 10);\n if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) {\n setMaxIndex(acc, keyNum);\n }\n }\n\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, defaultDecoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var j = 0; j < string.length; j += limit) {\n var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n var arr = [];\n\n for (var i = 0; i < segment.length; ++i) {\n var c = segment.charCodeAt(i);\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n arr[arr.length] = hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n out += arr.join('');\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue[queue.length] = { obj: obj, prop: key };\n refs[refs.length] = val;\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b, arrayLimit, plainObjects) {\n // If 'a' is already an overflow object, add to it\n if (isOverflow(a)) {\n var newIndex = getMaxIndex(a) + 1;\n a[newIndex] = b;\n setMaxIndex(a, newIndex);\n return a;\n }\n\n var result = [].concat(a, b);\n if (result.length > arrayLimit) {\n return markOverflow(arrayToObject(result, { plainObjects: plainObjects }), result.length - 1);\n }\n return result;\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped[mapped.length] = fn(val[i]);\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isOverflow: isOverflow,\n isRegExp: isRegExp,\n markOverflow: markOverflow,\n maybeMap: maybeMap,\n merge: merge\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n commaRoundTrip: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: utils.encode,\n encodeValuesOnly: false,\n filter: void undefined,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = utils.maybeMap(obj, encoder);\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjustedPrefix + '[]';\n }\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && key && typeof key.value !== 'undefined'\n ? key.value\n : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\\./g, '%2E') : String(key);\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n var arrayFormat;\n if (opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = defaults.arrayFormat;\n }\n\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n var value = obj[key];\n\n if (options.skipNulls && value === null) {\n continue;\n }\n pushToArray(keys, stringify(\n value,\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.allowEmptyArrays,\n options.strictNullHandling,\n options.skipNulls,\n options.encodeDotInKeys,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowEmptyArrays: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decodeDotInKeys: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n duplicates: 'combine',\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictDepth: false,\n strictNullHandling: false,\n throwOnLimitExceeded: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options, currentArrayLength) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = { __proto__: null };\n\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n\n var limit = options.parameterLimit === Infinity ? void undefined : options.parameterLimit;\n var parts = cleanStr.split(\n options.delimiter,\n options.throwOnLimitExceeded ? limit + 1 : limit\n );\n\n if (options.throwOnLimitExceeded && parts.length > limit) {\n throw new RangeError('Parameter limit exceeded. Only ' + limit + ' parameter' + (limit === 1 ? '' : 's') + ' allowed.');\n }\n\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key;\n var val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n\n if (key !== null) {\n val = utils.maybeMap(\n parseArrayValue(\n part.slice(pos + 1),\n options,\n isArray(obj[key]) ? obj[key].length : 0\n ),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(String(val));\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (options.comma && isArray(val) && val.length > options.arrayLimit) {\n if (options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n val = utils.combine([], val, options.arrayLimit, options.plainObjects);\n }\n\n if (key !== null) {\n var existing = has.call(obj, key);\n if (existing && options.duplicates === 'combine') {\n obj[key] = utils.combine(\n obj[key],\n val,\n options.arrayLimit,\n options.plainObjects\n );\n } else if (!existing || options.duplicates === 'last') {\n obj[key] = val;\n }\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var currentArrayLength = 0;\n if (chain.length > 0 && chain[chain.length - 1] === '[]') {\n var parentKey = chain.slice(0, -1).join('');\n currentArrayLength = Array.isArray(val) && val[parentKey] ? val[parentKey].length : 0;\n }\n\n var leaf = valuesParsed ? val : parseArrayValue(val, options, currentArrayLength);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n if (utils.isOverflow(leaf)) {\n // leaf is already an overflow object, preserve it\n obj = leaf;\n } else {\n obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n ? []\n : utils.combine(\n [],\n leaf,\n options.arrayLimit,\n options.plainObjects\n );\n }\n } else {\n obj = options.plainObjects ? { __proto__: null } : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n var index = parseInt(decodedRoot, 10);\n var isValidArrayIndex = !isNaN(index)\n && root !== decodedRoot\n && String(index) === decodedRoot\n && index >= 0\n && options.parseArrays;\n if (!options.parseArrays && decodedRoot === '') {\n obj = { 0: leaf };\n } else if (isValidArrayIndex && index < options.arrayLimit) {\n obj = [];\n obj[index] = leaf;\n } else if (isValidArrayIndex && options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n } else if (isValidArrayIndex) {\n obj[index] = leaf;\n utils.markOverflow(obj, index);\n } else if (decodedRoot !== '__proto__') {\n obj[decodedRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) {\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n if (options.depth <= 0) {\n if (!options.plainObjects && has.call(Object.prototype, key)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n return [key];\n }\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n var segment = brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n var keys = [];\n\n if (parent) {\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys[keys.length] = parent;\n }\n\n var i = 0;\n while ((segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n\n var segmentContent = segment[1].slice(1, -1);\n if (!options.plainObjects && has.call(Object.prototype, segmentContent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys[keys.length] = segment[1];\n }\n\n if (segment) {\n if (options.strictDepth === true) {\n throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n }\n\n keys[keys.length] = '[' + key.slice(segment.index) + ']';\n }\n\n return keys;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n var keys = splitKeyIntoSegments(givenKey, options);\n\n if (!keys) {\n return;\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n if (typeof opts.throwOnLimitExceeded !== 'undefined' && typeof opts.throwOnLimitExceeded !== 'boolean') {\n throw new TypeError('`throwOnLimitExceeded` option must be a boolean');\n }\n\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n throw new TypeError('The duplicates option must be either combine, first, or last');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n duplicates: duplicates,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === 'boolean' ? opts.throwOnLimitExceeded : false\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? { __proto__: null } : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? { __proto__: null } : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\n/**\n * @param typeMap [Object] Map of MIME type -> Array[extensions]\n * @param ...\n */\nfunction Mime() {\n this._types = Object.create(null);\n this._extensions = Object.create(null);\n\n for (let i = 0; i < arguments.length; i++) {\n this.define(arguments[i]);\n }\n\n this.define = this.define.bind(this);\n this.getType = this.getType.bind(this);\n this.getExtension = this.getExtension.bind(this);\n}\n\n/**\n * Define mimetype -> extension mappings. Each key is a mime-type that maps\n * to an array of extensions associated with the type. The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * If a type declares an extension that has already been defined, an error will\n * be thrown. To suppress this error and force the extension to be associated\n * with the new type, pass `force`=true. Alternatively, you may prefix the\n * extension with \"*\" to map the type to extension, without mapping the\n * extension to the type.\n *\n * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});\n *\n *\n * @param map (Object) type definitions\n * @param force (Boolean) if true, force overriding of existing definitions\n */\nMime.prototype.define = function(typeMap, force) {\n for (let type in typeMap) {\n let extensions = typeMap[type].map(function(t) {\n return t.toLowerCase();\n });\n type = type.toLowerCase();\n\n for (let i = 0; i < extensions.length; i++) {\n const ext = extensions[i];\n\n // '*' prefix = not the preferred type for this extension. So fixup the\n // extension, and skip it.\n if (ext[0] === '*') {\n continue;\n }\n\n if (!force && (ext in this._types)) {\n throw new Error(\n 'Attempt to change mapping for \"' + ext +\n '\" extension from \"' + this._types[ext] + '\" to \"' + type +\n '\". Pass `force=true` to allow this, otherwise remove \"' + ext +\n '\" from the list of extensions for \"' + type + '\".'\n );\n }\n\n this._types[ext] = type;\n }\n\n // Use first extension as default\n if (force || !this._extensions[type]) {\n const ext = extensions[0];\n this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);\n }\n }\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.getType = function(path) {\n path = String(path);\n let last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n let ext = last.replace(/^.*\\./, '').toLowerCase();\n\n let hasPath = last.length < path.length;\n let hasDot = ext.length < last.length - 1;\n\n return (hasDot || !hasPath) && this._types[ext] || null;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.getExtension = function(type) {\n type = /^\\s*([^;\\s]*)/.test(type) && RegExp.$1;\n return type && this._extensions[type.toLowerCase()] || null;\n};\n\nmodule.exports = Mime;\n","module.exports = {\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"es\",\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/express\":[\"exp\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/trig\":[\"trig\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/adpcm\":[\"adp\"],\"audio/amr\":[\"amr\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\",\"opus\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/hsj2\":[\"hsj2\"],\"image/ief\":[\"ief\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/step+xml\":[\"stpx\"],\"model/step+zip\":[\"stpz\"],\"model/step-xml+zip\":[\"stpxz\"],\"model/stl\":[\"stl\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/iso.segment\":[\"m4s\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};","module.exports = {\"application/prs.cww\":[\"cww\"],\"application/vnd.1000minds.decision-model+xml\":[\"1km\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.keynote\":[\"key\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.numbers\":[\"numbers\"],\"application/vnd.apple.pages\":[\"pages\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.balsamiq.bmml+xml\":[\"bmml\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.citationstyles.style+xml\":[\"csl\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dbf\":[\"dbf\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mapbox-vector-tile\":[\"mvt\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"*stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.ac+xml\":[\"*ac\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openblox.game+xml\":[\"obgx\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openstreetmap.data+xml\":[\"osm\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.rar\":[\"rar\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.software602.filler.form+xml\":[\"fo\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.syncml.dmddf+xml\":[\"ddf\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[\"*dmg\"],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[\"*bdoc\"],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"*deb\",\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[\"*iso\"],\"application/x-iwork-keynote-sffkey\":[\"*key\"],\"application/x-iwork-numbers-sffnumbers\":[\"*numbers\"],\"application/x-iwork-pages-sffpages\":[\"*pages\"],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-keepass2\":[\"kdbx\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[\"*exe\"],\"application/x-msdownload\":[\"*exe\",\"*dll\",\"com\",\"bat\",\"*msi\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"*wmf\",\"*wmz\",\"*emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[\"*prc\",\"*pdb\"],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"*rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"*obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"*xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[\"*m4a\"],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[\"*ra\"],\"audio/x-wav\":[\"*wav\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"image/prs.btif\":[\"btif\"],\"image/prs.pti\":[\"pti\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.airzip.accelerator.azv\":[\"azv\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[\"*sub\"],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.microsoft.icon\":[\"ico\"],\"image/vnd.ms-dds\":[\"dds\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.pco.b16\":[\"b16\"],\"image/vnd.tencent.tap\":[\"tap\"],\"image/vnd.valve.source.texture\":[\"vtf\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/vnd.zbrush.pcx\":[\"pcx\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"*ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[\"*bmp\"],\"image/x-pcx\":[\"*pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/vnd.wfa.wsc\":[\"wsc\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.opengex\":[\"ogex\"],\"model/vnd.parasolid.transmit.binary\":[\"x_b\"],\"model/vnd.parasolid.transmit.text\":[\"x_t\"],\"model/vnd.sap.vds\":[\"vds\"],\"model/vnd.usdz+zip\":[\"usdz\"],\"model/vnd.valve.source.compiled-map\":[\"bsp\"],\"model/vnd.vtu\":[\"vtu\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[\"*org\"],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]};","'use strict';\n\nlet Mime = require('./Mime');\nmodule.exports = new Mime(require('./types/standard'), require('./types/other'));\n","/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n return method.toLowerCase();\n });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n return [\n 'get',\n 'post',\n 'put',\n 'head',\n 'delete',\n 'options',\n 'trace',\n 'copy',\n 'lock',\n 'mkcol',\n 'move',\n 'purge',\n 'propfind',\n 'proppatch',\n 'unlock',\n 'report',\n 'mkactivity',\n 'checkout',\n 'merge',\n 'm-search',\n 'notify',\n 'subscribe',\n 'unsubscribe',\n 'patch',\n 'search',\n 'connect'\n ];\n}\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n","var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n","var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n","module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar $TypeError = require('es-errors/type');\n\nvar toStringTag = hasToStringTag ? Symbol.toStringTag : null;\n\n/** @type {import('.')} */\nmodule.exports = function setToStringTag(object, value) {\n\tvar overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;\n\tvar nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;\n\tif (\n\t\t(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')\n\t\t|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')\n\t) {\n\t\tthrow new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');\n\t}\n\tif (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(object, toStringTag, {\n\t\t\t\tconfigurable: !nonConfigurable,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: value,\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tobject[toStringTag] = value; // eslint-disable-line no-param-reassign\n\t\t}\n\t}\n};\n","'use strict';\n\n// populates missing values\nmodule.exports = function (dst, src) {\n Object.keys(src).forEach(function (prop) {\n dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign\n });\n\n return dst;\n};\n","'use strict';\n\nvar CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar crypto = require('crypto');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar setToStringTag = require('es-set-tostringtag');\nvar hasOwn = require('hasown');\nvar populate = require('./populate.js');\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {}; // eslint-disable-line no-param-reassign\n for (var option in options) { // eslint-disable-line no-restricted-syntax\n this[option] = options[option];\n }\n}\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function (field, value, options) {\n options = options || {}; // eslint-disable-line no-param-reassign\n\n // allow filename as single option\n if (typeof options === 'string') {\n options = { filename: options }; // eslint-disable-line no-param-reassign\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value === 'number' || value == null) {\n value = String(value); // eslint-disable-line no-param-reassign\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (Array.isArray(value)) {\n /*\n * Please convert your array into string\n * the way web server expects it\n */\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function (header, value, options) {\n var valueLength = 0;\n\n /*\n * used w/ getLengthSync(), when length is known.\n * e.g. for streaming directly from a remote server,\n * w/ a known file a size, and not wanting to wait for\n * incoming file to finish to get its size.\n */\n if (options.knownLength != null) {\n valueLength += Number(options.knownLength);\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function (value, callback) {\n if (hasOwn(value, 'fd')) {\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function (err, stat) {\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n var fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (hasOwn(value, 'httpVersion')) {\n callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return\n\n // or request stream http://github.com/mikeal/request\n } else if (hasOwn(value, 'httpModule')) {\n // wait till response come back\n value.on('response', function (response) {\n value.pause();\n callback(null, Number(response.headers['content-length']));\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream'); // eslint-disable-line callback-return\n }\n};\n\nFormData.prototype._multiPartHeader = function (field, value, options) {\n /*\n * custom header specified (as string)?\n * it becomes responsible for boundary\n * (e.g. to handle extra CRLFs on .NET servers)\n */\n if (typeof options.header === 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header === 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) { // eslint-disable-line no-restricted-syntax\n if (hasOwn(headers, prop)) {\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return\n var filename;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || (value && (value.name || value.path))) {\n /*\n * custom filename take precedence\n * formidable and the browser add a name property\n * fs- and request- streams have path property\n */\n filename = path.basename(options.filename || (value && (value.name || value.path)));\n } else if (value && value.readable && hasOwn(value, 'httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n return 'filename=\"' + filename + '\"';\n }\n};\n\nFormData.prototype._getContentType = function (value, options) {\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && value && typeof value === 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function () {\n return function (next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = this._streams.length === 0;\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function () {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function (userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) { // eslint-disable-line no-restricted-syntax\n if (hasOwn(userHeaders, header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function (boundary) {\n if (typeof boundary !== 'string') {\n throw new TypeError('FormData boundary must be a string');\n }\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function () {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function () {\n var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n // Add content to the buffer.\n if (Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);\n } else {\n dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) {\n dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]);\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);\n};\n\nFormData.prototype._generateBoundary = function () {\n // This generates a 50 character boundary similar to those used by Firefox.\n\n // They are optimized for boyer-moore parsing.\n this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex');\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually and add it as knownLength option\nFormData.prototype.getLengthSync = function () {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n /*\n * Some async length retrievers are present\n * therefore synchronous length calculation is false.\n * Please use getLength(callback) to get proper length\n */\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function () {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function (cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function (length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function (params, cb) {\n var request;\n var options;\n var defaults = { method: 'post' };\n\n // parse provided url if it's string or treat it as options object\n if (typeof params === 'string') {\n params = parseUrl(params); // eslint-disable-line no-param-reassign\n /* eslint sort-keys: 0 */\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n } else { // use custom params\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol === 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol === 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function (err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function (err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\nsetToStringTag(FormData.prototype, 'FormData');\n\n// Public API\nmodule.exports = FormData;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\n/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nconst nc = require(\"node:crypto\");\nexports.crypto = nc && typeof nc === 'object' && 'webcrypto' in nc\n ? nc.webcrypto\n : nc && typeof nc === 'object' && 'randomBytes' in nc\n ? nc\n : undefined;\n//# sourceMappingURL=cryptoNode.js.map","\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shake256 = exports.shake128 = exports.keccak_512 = exports.keccak_384 = exports.keccak_256 = exports.keccak_224 = exports.sha3_512 = exports.sha3_384 = exports.sha3_256 = exports.sha3_224 = exports.Keccak = void 0;\nexports.keccakP = keccakP;\n/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nconst _u64_ts_1 = require(\"./_u64.js\");\n// prettier-ignore\nconst utils_ts_1 = require(\"./utils.js\");\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = (0, _u64_ts_1.split)(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? (0, _u64_ts_1.rotlBH)(h, l, s) : (0, _u64_ts_1.rotlSH)(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? (0, _u64_ts_1.rotlBL)(h, l, s) : (0, _u64_ts_1.rotlSL)(h, l, s));\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n (0, utils_ts_1.clean)(B);\n}\n/** Keccak sponge function. */\nclass Keccak extends utils_ts_1.Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n (0, utils_ts_1.anumber)(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = (0, utils_ts_1.u32)(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n (0, utils_ts_1.swap32IfBE)(this.state32);\n keccakP(this.state32, this.rounds);\n (0, utils_ts_1.swap32IfBE)(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n (0, utils_ts_1.aexists)(this, false);\n (0, utils_ts_1.abytes)(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n (0, utils_ts_1.anumber)(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n (0, utils_ts_1.aoutput)(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n (0, utils_ts_1.clean)(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nexports.Keccak = Keccak;\nconst gen = (suffix, blockLen, outputLen) => (0, utils_ts_1.createHasher)(() => new Keccak(blockLen, suffix, outputLen));\n/** SHA3-224 hash function. */\nexports.sha3_224 = (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexports.sha3_256 = (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexports.sha3_384 = (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexports.sha3_512 = (() => gen(0x06, 72, 512 / 8))();\n/** keccak-224 hash function. */\nexports.keccak_224 = (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexports.keccak_256 = (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexports.keccak_384 = (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexports.keccak_512 = (() => gen(0x01, 72, 512 / 8))();\nconst genShake = (suffix, blockLen, outputLen) => (0, utils_ts_1.createXOFer)((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\n/** SHAKE128 XOF with 128-bit security. */\nexports.shake128 = (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexports.shake256 = (() => genShake(0x1f, 136, 256 / 8))();\n//# sourceMappingURL=sha3.js.map","/* global global, window, module */\nconst { sha3_512: sha3 } = require(\"@noble/hashes/sha3\");\n\nconst defaultLength = 24;\nconst bigLength = 32;\n\nconst createEntropy = (length = 4, random = Math.random) => {\n let entropy = \"\";\n\n while (entropy.length < length) {\n entropy = entropy + Math.floor(random() * 36).toString(36);\n }\n return entropy;\n};\n\n/*\n * Adapted from https://github.com/juanelas/bigint-conversion\n * MIT License Copyright (c) 2018 Juan Hernández Serrano\n */\nfunction bufToBigInt(buf) {\n let bits = 8n;\n\n let value = 0n;\n for (const i of buf.values()) {\n const bi = BigInt(i);\n value = (value << bits) + bi;\n }\n return value;\n}\n\nconst hash = (input = \"\") => {\n // Drop the first character because it will bias the histogram\n // to the left.\n return bufToBigInt(sha3(input)).toString(36).slice(1);\n};\n\nconst alphabet = Array.from({ length: 26 }, (x, i) =>\n String.fromCharCode(i + 97)\n);\n\nconst randomLetter = (random) =>\n alphabet[Math.floor(random() * alphabet.length)];\n\n/*\nThis is a fingerprint of the host environment. It is used to help\nprevent collisions when generating ids in a distributed system.\nIf no global object is available, you can pass in your own, or fall back\non a random string.\n*/\nconst createFingerprint = ({\n globalObj = typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : {},\n random = Math.random,\n} = {}) => {\n const globals = Object.keys(globalObj).toString();\n const sourceString = globals.length\n ? globals + createEntropy(bigLength, random)\n : createEntropy(bigLength, random);\n\n return hash(sourceString).substring(0, bigLength);\n};\n\nconst createCounter = (count) => () => {\n return count++;\n};\n\n// ~22k hosts before 50% chance of initial counter collision\n// with a remaining counter range of 9.0e+15 in JavaScript.\nconst initialCountMax = 476782367;\n\nconst init = ({\n // Fallback if the user does not pass in a CSPRNG. This should be OK\n // because we don't rely solely on the random number generator for entropy.\n // We also use the host fingerprint, current time, and a session counter.\n random = Math.random,\n counter = createCounter(Math.floor(random() * initialCountMax)),\n length = defaultLength,\n fingerprint = createFingerprint({ random }),\n} = {}) => {\n return function cuid2() {\n const firstLetter = randomLetter(random);\n\n // If we're lucky, the `.toString(36)` calls may reduce hashing rounds\n // by shortening the input to the hash function a little.\n const time = Date.now().toString(36);\n const count = counter().toString(36);\n\n // The salt should be long enough to be globally unique across the full\n // length of the hash. For simplicity, we use the same length as the\n // intended id output.\n const salt = createEntropy(length, random);\n const hashInput = `${time + salt + count + fingerprint}`;\n\n return `${firstLetter + hash(hashInput).substring(1, length)}`;\n };\n};\n\nconst createId = init();\n\nconst isCuid = (id, { minLength = 2, maxLength = bigLength } = {}) => {\n const length = id.length;\n const regex = /^[0-9a-z]+$/;\n\n try {\n if (\n typeof id === \"string\" &&\n length >= minLength &&\n length <= maxLength &&\n regex.test(id)\n )\n return true;\n } finally {\n }\n\n return false;\n};\n\nmodule.exports.getConstants = () => ({ defaultLength, bigLength });\nmodule.exports.init = init;\nmodule.exports.createId = createId;\nmodule.exports.bufToBigInt = bufToBigInt;\nmodule.exports.createCounter = createCounter;\nmodule.exports.createFingerprint = createFingerprint;\nmodule.exports.isCuid = isCuid;\n","const { createId, init, getConstants, isCuid } = require(\"./src/index\");\n\nmodule.exports.createId = createId;\nmodule.exports.init = init;\nmodule.exports.getConstants = getConstants;\nmodule.exports.isCuid = isCuid;\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","\"use strict\";\n\nvar domain; // The domain module is executed on demand\nvar hasSetImmediate = typeof setImmediate === \"function\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including network IO events in Node.js.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Avoids a function call\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory excaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\nrawAsap.requestFlush = requestFlush;\nfunction requestFlush() {\n // Ensure flushing is not bound to any domain.\n // It is not sufficient to exit the domain, because domains exist on a stack.\n // To execute code outside of any domain, the following dance is necessary.\n var parentDomain = process.domain;\n if (parentDomain) {\n if (!domain) {\n // Lazy execute the domain module.\n // Only employed if the user elects to use domains.\n domain = require(\"domain\");\n }\n domain.active = process.domain = null;\n }\n\n // `setImmediate` is slower that `process.nextTick`, but `process.nextTick`\n // cannot handle recursion.\n // `requestFlush` will only be called recursively from `asap.js`, to resume\n // flushing after an error is thrown into a domain.\n // Conveniently, `setImmediate` was introduced in the same version\n // `process.nextTick` started throwing recursion errors.\n if (flushing && hasSetImmediate) {\n setImmediate(flush);\n } else {\n process.nextTick(flush);\n }\n\n if (parentDomain) {\n domain.active = process.domain = parentDomain;\n }\n}\n","\"use strict\";\n\nvar rawAsap = require(\"./raw\");\nvar freeTasks = [];\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with\n * priority over IO events. An exception thrown in a task can be handled by\n * `process.on(\"uncaughtException\") or `domain.on(\"error\")`, but will otherwise\n * crash the process. If the error is handled, all subsequent tasks will\n * resume.\n *\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawTask.domain = process.domain;\n rawAsap(rawTask);\n}\n\nfunction RawTask() {\n this.task = null;\n this.domain = null;\n}\n\nRawTask.prototype.call = function () {\n if (this.domain) {\n this.domain.enter();\n }\n var threw = true;\n try {\n this.task.call();\n threw = false;\n // If the task throws an exception (presumably) Node.js restores the\n // domain stack for the next event.\n if (this.domain) {\n this.domain.exit();\n }\n } finally {\n // We use try/finally and a threw flag to avoid messing up stack traces\n // when we catch and release errors.\n if (threw) {\n // In Node.js, uncaught exceptions are considered fatal errors.\n // Re-throw them to interrupt flushing!\n // Ensure that flushing continues if an uncaught exception is\n // suppressed listening process.on(\"uncaughtException\") or\n // domain.on(\"error\").\n rawAsap.requestFlush();\n }\n // If the task threw an error, we do not want to exit the domain here.\n // Exiting the domain would prevent the domain from catching the error.\n this.task = null;\n this.domain = null;\n freeTasks.push(this);\n }\n};\n\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(dezalgo)\n\nvar asap = require('asap')\n\nfunction dezalgo (cb) {\n var sync = true\n asap(function () {\n sync = false\n })\n\n return function zalgoSafe() {\n var args = arguments\n var me = this\n if (sync)\n asap(function() {\n cb.apply(me, args)\n })\n else\n cb.apply(me, args)\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar fs = require('node:fs');\nvar crypto = require('node:crypto');\nvar node_events = require('node:events');\nvar cuid2 = require('@paralleldrive/cuid2');\nvar dezalgo = require('dezalgo');\nvar fsPromises = require('node:fs/promises');\nvar os = require('node:os');\nvar path = require('node:path');\nvar node_string_decoder = require('node:string_decoder');\nvar once = require('once');\nvar node_stream = require('node:stream');\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass PersistentFile extends node_events.EventEmitter {\n constructor({ filepath, newFilename, originalFilename, mimetype, hashAlgorithm }) {\n super();\n\n this.lastModifiedDate = null;\n Object.assign(this, { filepath, newFilename, originalFilename, mimetype, hashAlgorithm });\n\n this.size = 0;\n this._writeStream = null;\n\n if (typeof this.hashAlgorithm === 'string') {\n this.hash = crypto.createHash(this.hashAlgorithm);\n } else {\n this.hash = null;\n }\n }\n\n open() {\n this._writeStream = fs.createWriteStream(this.filepath);\n this._writeStream.on('error', (err) => {\n this.emit('error', err);\n });\n }\n\n toJSON() {\n const json = {\n size: this.size,\n filepath: this.filepath,\n newFilename: this.newFilename,\n mimetype: this.mimetype,\n mtime: this.lastModifiedDate,\n length: this.length,\n originalFilename: this.originalFilename,\n };\n if (this.hash && this.hash !== '') {\n json.hash = this.hash;\n }\n return json;\n }\n\n toString() {\n return `PersistentFile: ${this.newFilename}, Original: ${this.originalFilename}, Path: ${this.filepath}`;\n }\n\n write(buffer, cb) {\n if (this.hash) {\n this.hash.update(buffer);\n }\n\n if (this._writeStream.closed) {\n cb();\n return;\n }\n\n this._writeStream.write(buffer, () => {\n this.lastModifiedDate = new Date();\n this.size += buffer.length;\n this.emit('progress', this.size);\n cb();\n });\n }\n\n end(cb) {\n if (this.hash) {\n this.hash = this.hash.digest('hex');\n }\n this._writeStream.end(() => {\n this.emit('end');\n cb();\n });\n }\n\n destroy() {\n this._writeStream.destroy();\n const filepath = this.filepath; \n setTimeout(function () {\n fs.unlink(filepath, () => {});\n }, 1);\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass VolatileFile extends node_events.EventEmitter {\n constructor({ filepath, newFilename, originalFilename, mimetype, hashAlgorithm, createFileWriteStream }) {\n super();\n\n this.lastModifiedDate = null;\n Object.assign(this, { filepath, newFilename, originalFilename, mimetype, hashAlgorithm, createFileWriteStream });\n\n this.size = 0;\n this._writeStream = null;\n\n if (typeof this.hashAlgorithm === 'string') {\n this.hash = crypto.createHash(this.hashAlgorithm);\n } else {\n this.hash = null;\n }\n }\n\n open() {\n this._writeStream = this.createFileWriteStream(this);\n this._writeStream.on('error', (err) => {\n this.emit('error', err);\n });\n }\n\n destroy() {\n this._writeStream.destroy();\n }\n\n toJSON() {\n const json = {\n size: this.size,\n newFilename: this.newFilename,\n length: this.length,\n originalFilename: this.originalFilename,\n mimetype: this.mimetype,\n };\n if (this.hash && this.hash !== '') {\n json.hash = this.hash;\n }\n return json;\n }\n\n toString() {\n return `VolatileFile: ${this.originalFilename}`;\n }\n\n write(buffer, cb) {\n if (this.hash) {\n this.hash.update(buffer);\n }\n\n if (this._writeStream.closed || this._writeStream.destroyed) {\n cb();\n return;\n }\n\n this._writeStream.write(buffer, () => {\n this.size += buffer.length;\n this.emit('progress', this.size);\n cb();\n });\n }\n\n end(cb) {\n if (this.hash) {\n this.hash = this.hash.digest('hex');\n }\n this._writeStream.end(() => {\n this.emit('end');\n cb();\n });\n }\n}\n\nconst missingPlugin = 1000;\nconst pluginFunction = 1001;\nconst aborted = 1002;\nconst noParser = 1003;\nconst uninitializedParser = 1004;\nconst filenameNotString = 1005;\nconst maxFieldsSizeExceeded = 1006;\nconst maxFieldsExceeded = 1007;\nconst smallerThanMinFileSize = 1008;\nconst biggerThanTotalMaxFileSize = 1009;\nconst noEmptyFiles = 1010;\nconst missingContentType = 1011;\nconst malformedMultipart = 1012;\nconst missingMultipartBoundary = 1013;\nconst unknownTransferEncoding = 1014;\nconst maxFilesExceeded = 1015;\nconst biggerThanMaxFileSize = 1016;\nconst pluginFailed = 1017;\nconst cannotCreateDir = 1018;\n\nconst FormidableError = class extends Error {\n constructor(message, internalCode, httpCode = 500) {\n super(message);\n this.code = internalCode;\n this.httpCode = httpCode;\n }\n};\n\nvar FormidableError$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n aborted: aborted,\n biggerThanMaxFileSize: biggerThanMaxFileSize,\n biggerThanTotalMaxFileSize: biggerThanTotalMaxFileSize,\n cannotCreateDir: cannotCreateDir,\n default: FormidableError,\n filenameNotString: filenameNotString,\n malformedMultipart: malformedMultipart,\n maxFieldsExceeded: maxFieldsExceeded,\n maxFieldsSizeExceeded: maxFieldsSizeExceeded,\n maxFilesExceeded: maxFilesExceeded,\n missingContentType: missingContentType,\n missingMultipartBoundary: missingMultipartBoundary,\n missingPlugin: missingPlugin,\n noEmptyFiles: noEmptyFiles,\n noParser: noParser,\n pluginFailed: pluginFailed,\n pluginFunction: pluginFunction,\n smallerThanMinFileSize: smallerThanMinFileSize,\n uninitializedParser: uninitializedParser,\n unknownTransferEncoding: unknownTransferEncoding\n});\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass DummyParser extends node_stream.Transform {\n constructor(incomingForm, options = {}) {\n super();\n this.globalOptions = { ...options };\n this.incomingForm = incomingForm;\n }\n\n _flush(callback) {\n this.incomingForm.ended = true;\n this.incomingForm._maybeEnd();\n callback();\n }\n}\n\n/* eslint-disable no-fallthrough */\n/* eslint-disable no-bitwise */\n/* eslint-disable no-plusplus */\n/* eslint-disable no-underscore-dangle */\n\n\nlet s = 0;\nconst STATE = {\n PARSER_UNINITIALIZED: s++,\n START: s++,\n START_BOUNDARY: s++,\n HEADER_FIELD_START: s++,\n HEADER_FIELD: s++,\n HEADER_VALUE_START: s++,\n HEADER_VALUE: s++,\n HEADER_VALUE_ALMOST_DONE: s++,\n HEADERS_ALMOST_DONE: s++,\n PART_DATA_START: s++,\n PART_DATA: s++,\n PART_END: s++,\n END: s++,\n};\n\nlet f = 1;\nconst FBOUNDARY = { PART_BOUNDARY: f, LAST_BOUNDARY: (f *= 2) };\n\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\n\nfunction lower(c) {\n return c | 0x20;\n}\n\nconst STATES = {};\n\nObject.keys(STATE).forEach((stateName) => {\n STATES[stateName] = STATE[stateName];\n});\n\nclass MultipartParser extends node_stream.Transform {\n constructor(options = {}) {\n super({ readableObjectMode: true });\n this.boundary = null;\n this.boundaryChars = null;\n this.lookbehind = null;\n this.bufferLength = 0;\n this.state = STATE.PARSER_UNINITIALIZED;\n\n this.globalOptions = { ...options };\n this.index = null;\n this.flags = 0;\n }\n\n _endUnexpected() {\n return new FormidableError(\n `MultipartParser.end(): stream ended unexpectedly: ${this.explain()}`,\n malformedMultipart,\n 400,\n );\n }\n\n _flush(done) {\n if (\n (this.state === STATE.HEADER_FIELD_START && this.index === 0) ||\n (this.state === STATE.PART_DATA && this.index === this.boundary.length)\n ) {\n this._handleCallback('partEnd');\n this._handleCallback('end');\n done();\n } else if (this.state !== STATE.END) {\n done(this._endUnexpected());\n } else {\n done();\n }\n }\n\n initWithBoundary(str) {\n this.boundary = Buffer.from(`\\r\\n--${str}`);\n this.lookbehind = Buffer.alloc(this.boundary.length + 8);\n this.state = STATE.START;\n this.boundaryChars = {};\n\n for (let i = 0; i < this.boundary.length; i++) {\n this.boundaryChars[this.boundary[i]] = true;\n }\n }\n\n // eslint-disable-next-line max-params\n _handleCallback(name, buf, start, end) {\n if (start !== undefined && start === end) {\n return;\n }\n this.push({ name, buffer: buf, start, end });\n }\n\n // eslint-disable-next-line max-statements\n _transform(buffer, _, done) {\n let i = 0;\n let prevIndex = this.index;\n let { index, state, flags } = this;\n const { lookbehind, boundary, boundaryChars } = this;\n const boundaryLength = boundary.length;\n const boundaryEnd = boundaryLength - 1;\n this.bufferLength = buffer.length;\n let c = null;\n let cl = null;\n\n const setMark = (name, idx) => {\n this[`${name}Mark`] = typeof idx === 'number' ? idx : i;\n };\n\n const clearMarkSymbol = (name) => {\n delete this[`${name}Mark`];\n };\n\n const dataCallback = (name, shouldClear) => {\n const markSymbol = `${name}Mark`;\n if (!(markSymbol in this)) {\n return;\n }\n\n if (!shouldClear) {\n this._handleCallback(name, buffer, this[markSymbol], buffer.length);\n setMark(name, 0);\n } else {\n this._handleCallback(name, buffer, this[markSymbol], i);\n clearMarkSymbol(name);\n }\n };\n\n for (i = 0; i < this.bufferLength; i++) {\n c = buffer[i];\n switch (state) {\n case STATE.PARSER_UNINITIALIZED:\n done(this._endUnexpected());\n return;\n case STATE.START:\n index = 0;\n state = STATE.START_BOUNDARY;\n case STATE.START_BOUNDARY:\n if (index === boundary.length - 2) {\n if (c === HYPHEN) {\n flags |= FBOUNDARY.LAST_BOUNDARY;\n } else if (c !== CR) {\n done(this._endUnexpected());\n return;\n }\n index++;\n break;\n } else if (index - 1 === boundary.length - 2) {\n if (flags & FBOUNDARY.LAST_BOUNDARY && c === HYPHEN) {\n this._handleCallback('end');\n state = STATE.END;\n flags = 0;\n } else if (!(flags & FBOUNDARY.LAST_BOUNDARY) && c === LF) {\n index = 0;\n this._handleCallback('partBegin');\n state = STATE.HEADER_FIELD_START;\n } else {\n done(this._endUnexpected());\n return;\n }\n break;\n }\n\n if (c !== boundary[index + 2]) {\n index = -2;\n }\n if (c === boundary[index + 2]) {\n index++;\n }\n break;\n case STATE.HEADER_FIELD_START:\n state = STATE.HEADER_FIELD;\n setMark('headerField');\n index = 0;\n case STATE.HEADER_FIELD:\n if (c === CR) {\n clearMarkSymbol('headerField');\n state = STATE.HEADERS_ALMOST_DONE;\n break;\n }\n\n index++;\n if (c === HYPHEN) {\n break;\n }\n\n if (c === COLON) {\n if (index === 1) {\n // empty header field\n done(this._endUnexpected());\n return;\n }\n dataCallback('headerField', true);\n state = STATE.HEADER_VALUE_START;\n break;\n }\n\n cl = lower(c);\n if (cl < A || cl > Z) {\n done(this._endUnexpected());\n return;\n }\n break;\n case STATE.HEADER_VALUE_START:\n if (c === SPACE) {\n break;\n }\n\n setMark('headerValue');\n state = STATE.HEADER_VALUE;\n case STATE.HEADER_VALUE:\n if (c === CR) {\n dataCallback('headerValue', true);\n this._handleCallback('headerEnd');\n state = STATE.HEADER_VALUE_ALMOST_DONE;\n }\n break;\n case STATE.HEADER_VALUE_ALMOST_DONE:\n if (c !== LF) {\n done(this._endUnexpected());\nreturn;\n }\n state = STATE.HEADER_FIELD_START;\n break;\n case STATE.HEADERS_ALMOST_DONE:\n if (c !== LF) {\n done(this._endUnexpected());\n return;\n }\n\n this._handleCallback('headersEnd');\n state = STATE.PART_DATA_START;\n break;\n case STATE.PART_DATA_START:\n state = STATE.PART_DATA;\n setMark('partData');\n case STATE.PART_DATA:\n prevIndex = index;\n\n if (index === 0) {\n // boyer-moore derived algorithm to safely skip non-boundary data\n i += boundaryEnd;\n while (i < this.bufferLength && !(buffer[i] in boundaryChars)) {\n i += boundaryLength;\n }\n i -= boundaryEnd;\n c = buffer[i];\n }\n\n if (index < boundary.length) {\n if (boundary[index] === c) {\n if (index === 0) {\n dataCallback('partData', true);\n }\n index++;\n } else {\n index = 0;\n }\n } else if (index === boundary.length) {\n index++;\n if (c === CR) {\n // CR = part boundary\n flags |= FBOUNDARY.PART_BOUNDARY;\n } else if (c === HYPHEN) {\n // HYPHEN = end boundary\n flags |= FBOUNDARY.LAST_BOUNDARY;\n } else {\n index = 0;\n }\n } else if (index - 1 === boundary.length) {\n if (flags & FBOUNDARY.PART_BOUNDARY) {\n index = 0;\n if (c === LF) {\n // unset the PART_BOUNDARY flag\n flags &= ~FBOUNDARY.PART_BOUNDARY;\n this._handleCallback('partEnd');\n this._handleCallback('partBegin');\n state = STATE.HEADER_FIELD_START;\n break;\n }\n } else if (flags & FBOUNDARY.LAST_BOUNDARY) {\n if (c === HYPHEN) {\n this._handleCallback('partEnd');\n this._handleCallback('end');\n state = STATE.END;\n flags = 0;\n } else {\n index = 0;\n }\n } else {\n index = 0;\n }\n }\n\n if (index > 0) {\n // when matching a possible boundary, keep a lookbehind reference\n // in case it turns out to be a false lead\n lookbehind[index - 1] = c;\n } else if (prevIndex > 0) {\n // if our boundary turned out to be rubbish, the captured lookbehind\n // belongs to partData\n this._handleCallback('partData', lookbehind, 0, prevIndex);\n prevIndex = 0;\n setMark('partData');\n\n // reconsider the current character even so it interrupted the sequence\n // it could be the beginning of a new sequence\n i--;\n }\n\n break;\n case STATE.END:\n break;\n default:\n done(this._endUnexpected());\n return;\n }\n }\n\n dataCallback('headerField');\n dataCallback('headerValue');\n dataCallback('partData');\n\n this.index = index;\n this.state = state;\n this.flags = flags;\n\n done();\n return this.bufferLength;\n }\n\n explain() {\n return `state = ${MultipartParser.stateToString(this.state)}`;\n }\n}\n\n// eslint-disable-next-line consistent-return\nMultipartParser.stateToString = (stateNumber) => {\n // eslint-disable-next-line no-restricted-syntax, guard-for-in\n for (const stateName in STATE) {\n const number = STATE[stateName];\n if (number === stateNumber) return stateName;\n }\n};\n\nvar MultipartParser$1 = Object.assign(MultipartParser, { STATES });\n\nclass OctetStreamParser extends node_stream.PassThrough {\n constructor(options = {}) {\n super();\n this.globalOptions = { ...options };\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst octetStreamType = 'octet-stream';\n// the `options` is also available through the `options` / `formidable.options`\nasync function plugin$3(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n if (/octet-stream/i.test(self.headers['content-type'])) {\n await init$2.call(self, self, options);\n }\n return self;\n}\n\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nasync function init$2(_self, _opts) {\n this.type = octetStreamType;\n const originalFilename = this.headers['x-file-name'];\n const mimetype = this.headers['content-type'];\n\n const thisPart = {\n originalFilename,\n mimetype,\n };\n const newFilename = this._getNewName(thisPart);\n const filepath = this._joinDirectoryName(newFilename);\n const file = await this._newFile({\n newFilename,\n filepath,\n originalFilename,\n mimetype,\n });\n\n this.emit('fileBegin', originalFilename, file);\n file.open();\n this.openedFiles.push(file);\n this._flushing += 1;\n\n this._parser = new OctetStreamParser(this.options);\n\n // Keep track of writes that haven't finished so we don't emit the file before it's done being written\n let outstandingWrites = 0;\n\n this._parser.on('data', (buffer) => {\n this.pause();\n outstandingWrites += 1;\n\n file.write(buffer, () => {\n outstandingWrites -= 1;\n this.resume();\n\n if (this.ended) {\n this._parser.emit('doneWritingFile');\n }\n });\n });\n\n this._parser.on('end', () => {\n this._flushing -= 1;\n this.ended = true;\n\n const done = () => {\n file.end(() => {\n this.emit('file', 'file', file);\n this._maybeEnd();\n });\n };\n\n if (outstandingWrites === 0) {\n done();\n } else {\n this._parser.once('doneWritingFile', done);\n }\n });\n\n return this;\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\n// This is a buffering parser, have a look at StreamingQuerystring.js for a streaming parser\nclass QuerystringParser extends node_stream.Transform {\n constructor(options = {}) {\n super({ readableObjectMode: true });\n this.globalOptions = { ...options };\n this.buffer = '';\n this.bufferLength = 0;\n }\n\n _transform(buffer, encoding, callback) {\n this.buffer += buffer.toString('ascii');\n this.bufferLength = this.buffer.length;\n callback();\n }\n\n _flush(callback) {\n const fields = new URLSearchParams(this.buffer);\n for (const [key, value] of fields) {\n this.push({\n key,\n value,\n });\n }\n this.buffer = '';\n callback();\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst querystringType = 'urlencoded';\n// the `options` is also available through the `this.options` / `formidable.options`\nfunction plugin$2(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n if (/urlencoded/i.test(self.headers['content-type'])) {\n init$1.call(self, self, options);\n }\n return self;\n}\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nfunction init$1(_self, _opts) {\n this.type = querystringType;\n\n const parser = new QuerystringParser(this.options);\n\n parser.on('data', ({ key, value }) => {\n this.emit('field', key, value);\n });\n\n parser.once('end', () => {\n this.ended = true;\n this._maybeEnd();\n });\n\n this._parser = parser;\n\n return this;\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst multipartType = 'multipart';\n// the `options` is also available through the `options` / `formidable.options`\nfunction plugin$1(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n // NOTE: we (currently) support both multipart/form-data and multipart/related\n const multipart = /multipart/i.test(self.headers['content-type']);\n\n if (multipart) {\n const m = self.headers['content-type'].match(\n /boundary=(?:\"([^\"]+)\"|([^;]+))/i,\n );\n if (m) {\n const initMultipart = createInitMultipart(m[1] || m[2]);\n initMultipart.call(self, self, options); // lgtm [js/superfluous-trailing-arguments]\n } else {\n const err = new FormidableError(\n 'bad content-type header, no multipart boundary',\n missingMultipartBoundary,\n 400,\n );\n self._error(err);\n }\n }\n return self;\n}\n\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nfunction createInitMultipart(boundary) {\n return function initMultipart() {\n this.type = multipartType;\n\n const parser = new MultipartParser$1(this.options);\n let headerField;\n let headerValue;\n let part;\n\n parser.initWithBoundary(boundary);\n\n // eslint-disable-next-line max-statements, consistent-return\n parser.on('data', async ({ name, buffer, start, end }) => {\n if (name === 'partBegin') {\n part = new node_stream.Stream();\n part.readable = true;\n part.headers = {};\n part.name = null;\n part.originalFilename = null;\n part.mimetype = null;\n\n part.transferEncoding = this.options.encoding;\n part.transferBuffer = '';\n\n headerField = '';\n headerValue = '';\n } else if (name === 'headerField') {\n headerField += buffer.toString(this.options.encoding, start, end);\n } else if (name === 'headerValue') {\n headerValue += buffer.toString(this.options.encoding, start, end);\n } else if (name === 'headerEnd') {\n headerField = headerField.toLowerCase();\n part.headers[headerField] = headerValue;\n\n // matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n const m = headerValue.match(\n // eslint-disable-next-line no-useless-escape\n /\\bname=(\"([^\"]*)\"|([^\\(\\)<>@,;:\\\\\"\\/\\[\\]\\?=\\{\\}\\s\\t/]+))/i,\n );\n if (headerField === 'content-disposition') {\n if (m) {\n part.name = m[2] || m[3] || '';\n }\n\n part.originalFilename = this._getFileName(headerValue);\n } else if (headerField === 'content-type') {\n part.mimetype = headerValue;\n } else if (headerField === 'content-transfer-encoding') {\n part.transferEncoding = headerValue.toLowerCase();\n }\n\n headerField = '';\n headerValue = '';\n } else if (name === 'headersEnd') {\n switch (part.transferEncoding) {\n case 'binary':\n case '7bit':\n case '8bit':\n case 'utf-8': {\n const dataPropagation = (ctx) => {\n if (ctx.name === 'partData') {\n part.emit('data', ctx.buffer.slice(ctx.start, ctx.end));\n }\n };\n const dataStopPropagation = (ctx) => {\n if (ctx.name === 'partEnd') {\n part.emit('end');\n parser.off('data', dataPropagation);\n parser.off('data', dataStopPropagation);\n }\n };\n parser.on('data', dataPropagation);\n parser.on('data', dataStopPropagation);\n break;\n }\n case 'base64': {\n const dataPropagation = (ctx) => {\n if (ctx.name === 'partData') {\n part.transferBuffer += ctx.buffer\n .slice(ctx.start, ctx.end)\n .toString('ascii');\n\n /*\n four bytes (chars) in base64 converts to three bytes in binary\n encoding. So we should always work with a number of bytes that\n can be divided by 4, it will result in a number of bytes that\n can be divided vy 3.\n */\n const offset = parseInt(part.transferBuffer.length / 4, 10) * 4;\n part.emit(\n 'data',\n Buffer.from(\n part.transferBuffer.substring(0, offset),\n 'base64',\n ),\n );\n part.transferBuffer = part.transferBuffer.substring(offset);\n }\n };\n const dataStopPropagation = (ctx) => {\n if (ctx.name === 'partEnd') {\n part.emit('data', Buffer.from(part.transferBuffer, 'base64'));\n part.emit('end');\n parser.off('data', dataPropagation);\n parser.off('data', dataStopPropagation);\n }\n };\n parser.on('data', dataPropagation);\n parser.on('data', dataStopPropagation);\n break;\n }\n default:\n return this._error(\n new FormidableError(\n 'unknown transfer-encoding',\n unknownTransferEncoding,\n 501,\n ),\n );\n }\n this._parser.pause();\n await this.onPart(part);\n this._parser.resume();\n } else if (name === 'end') {\n this.ended = true;\n this._maybeEnd();\n }\n });\n\n this._parser = parser;\n };\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass JSONParser extends node_stream.Transform {\n constructor(options = {}) {\n super({ readableObjectMode: true });\n this.chunks = [];\n this.globalOptions = { ...options };\n }\n\n _transform(chunk, encoding, callback) {\n this.chunks.push(String(chunk)); // todo consider using a string decoder\n callback();\n }\n\n _flush(callback) {\n try {\n const fields = JSON.parse(this.chunks.join(''));\n this.push(fields);\n } catch (e) {\n callback(e);\n return;\n }\n this.chunks = null;\n callback();\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst jsonType = 'json';\n// the `options` is also available through the `this.options` / `formidable.options`\nfunction plugin(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n if (/json/i.test(self.headers['content-type'])) {\n init.call(self, self, options);\n }\n\n return self;\n}\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nfunction init(_self, _opts) {\n this.type = jsonType;\n\n const parser = new JSONParser(this.options);\n\n parser.on('data', (fields) => {\n this.fields = fields;\n });\n\n parser.once('end', () => {\n this.ended = true;\n this._maybeEnd();\n });\n\n this._parser = parser;\n}\n\n/* eslint-disable class-methods-use-this */\n/* eslint-disable no-underscore-dangle */\n\n\nconst CUID2_FINGERPRINT = `${process.env.NODE_ENV}-${os.platform()}-${os.hostname()}`;\nconst createId = cuid2.init({ length: 25, fingerprint: CUID2_FINGERPRINT.toLowerCase() });\n\nconst DEFAULT_OPTIONS = {\n maxFields: 1000,\n maxFieldsSize: 20 * 1024 * 1024,\n maxFiles: Infinity,\n maxFileSize: 200 * 1024 * 1024,\n maxTotalFileSize: undefined,\n minFileSize: 1,\n allowEmptyFiles: false,\n createDirsFromUploads: false,\n keepExtensions: false,\n encoding: 'utf-8',\n hashAlgorithm: false,\n uploadDir: os.tmpdir(),\n enabledPlugins: [plugin$3, plugin$2, plugin$1, plugin],\n fileWriteStreamHandler: null,\n defaultInvalidName: 'invalid-name',\n filter(_part) {\n return true;\n },\n filename: undefined,\n};\n\nfunction hasOwnProp(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\n\nconst decorateForceSequential = function (promiseCreator) {\n /* forces a function that returns a promise to be sequential\n useful for fs for example */\n let lastPromise = Promise.resolve();\n return async function (...x) {\n const promiseWeAreWaitingFor = lastPromise;\n let currentPromise;\n let callback;\n // we need to change lastPromise before await anything,\n // otherwise 2 calls might wait the same thing\n lastPromise = new Promise(function (resolve) {\n callback = resolve;\n });\n await promiseWeAreWaitingFor;\n currentPromise = promiseCreator(...x);\n currentPromise.then(callback).catch(callback);\n return currentPromise;\n };\n};\n\nconst createNecessaryDirectoriesAsync = decorateForceSequential(function (filePath) {\n const directoryname = path.dirname(filePath);\n return fsPromises.mkdir(directoryname, { recursive: true });\n});\n\nconst invalidExtensionChar = (c) => {\n const code = c.charCodeAt(0);\n return !(\n code === 46 || // .\n (code >= 48 && code <= 57) ||\n (code >= 65 && code <= 90) ||\n (code >= 97 && code <= 122)\n );\n};\n\nclass IncomingForm extends node_events.EventEmitter {\n constructor(options = {}) {\n super();\n\n this.options = { ...DEFAULT_OPTIONS, ...options };\n if (!this.options.maxTotalFileSize) {\n this.options.maxTotalFileSize = this.options.maxFileSize;\n }\n\n const dir = path.resolve(\n this.options.uploadDir || this.options.uploaddir || os.tmpdir(),\n );\n\n this.uploaddir = dir;\n this.uploadDir = dir;\n\n // initialize with null\n [\n 'error',\n 'headers',\n 'type',\n 'bytesExpected',\n 'bytesReceived',\n '_parser',\n 'req',\n ].forEach((key) => {\n this[key] = null;\n });\n\n this._setUpRename();\n\n this._flushing = 0;\n this._fieldsSize = 0;\n this._totalFileSize = 0;\n this._plugins = [];\n this.openedFiles = [];\n\n this.options.enabledPlugins = []\n .concat(this.options.enabledPlugins)\n .filter(Boolean);\n\n if (this.options.enabledPlugins.length === 0) {\n throw new FormidableError(\n 'expect at least 1 enabled builtin plugin, see options.enabledPlugins',\n missingPlugin,\n );\n }\n\n this.options.enabledPlugins.forEach((plugin) => {\n this.use(plugin);\n });\n\n this._setUpMaxFields();\n this._setUpMaxFiles();\n this.ended = undefined;\n this.type = undefined;\n }\n\n use(plugin) {\n if (typeof plugin !== 'function') {\n throw new FormidableError(\n '.use: expect `plugin` to be a function',\n pluginFunction,\n );\n }\n this._plugins.push(plugin.bind(this));\n return this;\n }\n\n pause () {\n try {\n this.req.pause();\n } catch (err) {\n // the stream was destroyed\n if (!this.ended) {\n // before it was completed, crash & burn\n this._error(err);\n }\n return false;\n }\n return true;\n }\n\n resume () {\n try {\n this.req.resume();\n } catch (err) {\n // the stream was destroyed\n if (!this.ended) {\n // before it was completed, crash & burn\n this._error(err);\n }\n return false;\n }\n\n return true;\n }\n\n // returns a promise if no callback is provided\n async parse(req, cb) {\n this.req = req;\n let promise;\n\n // Setup callback first, so we don't miss anything from data events emitted immediately.\n if (!cb) {\n let resolveRef;\n let rejectRef;\n promise = new Promise((resolve, reject) => {\n resolveRef = resolve;\n rejectRef = reject;\n });\n cb = (err, fields, files) => {\n if (err) {\n rejectRef(err);\n } else {\n resolveRef([fields, files]);\n }\n };\n }\n const callback = once(dezalgo(cb));\n this.fields = {};\n const files = {};\n\n this.on('field', (name, value) => {\n if (this.type === 'multipart' || this.type === 'urlencoded') {\n if (!hasOwnProp(this.fields, name)) {\n this.fields[name] = [value];\n } else {\n this.fields[name].push(value);\n }\n } else {\n this.fields[name] = value;\n }\n });\n this.on('file', (name, file) => {\n if (!hasOwnProp(files, name)) {\n files[name] = [file];\n } else {\n files[name].push(file);\n }\n });\n this.on('error', (err) => {\n callback(err, this.fields, files);\n });\n this.on('end', () => {\n callback(null, this.fields, files);\n });\n\n // Parse headers and setup the parser, ready to start listening for data.\n await this.writeHeaders(req.headers);\n\n // Start listening for data.\n req\n .on('error', (err) => {\n this._error(err);\n })\n .on('aborted', () => {\n this.emit('aborted');\n this._error(new FormidableError('Request aborted', aborted));\n })\n .on('data', (buffer) => {\n try {\n this.write(buffer);\n } catch (err) {\n this._error(err);\n }\n })\n .on('end', () => {\n if (this.error) {\n return;\n }\n if (this._parser) {\n this._parser.end();\n }\n });\n if (promise) {\n return promise;\n }\n return this;\n }\n\n async writeHeaders(headers) {\n this.headers = headers;\n this._parseContentLength();\n await this._parseContentType();\n\n if (!this._parser) {\n this._error(\n new FormidableError(\n 'no parser found',\n noParser,\n 415, // Unsupported Media Type\n ),\n );\n return;\n }\n\n this._parser.once('error', (error) => {\n this._error(error);\n });\n }\n\n write(buffer) {\n if (this.error) {\n return null;\n }\n if (!this._parser) {\n this._error(\n new FormidableError('uninitialized parser', uninitializedParser),\n );\n return null;\n }\n\n this.bytesReceived += buffer.length;\n this.emit('progress', this.bytesReceived, this.bytesExpected);\n\n this._parser.write(buffer);\n\n return this.bytesReceived;\n }\n\n onPart(part) {\n // this method can be overwritten by the user\n return this._handlePart(part);\n }\n\n async _handlePart(part) {\n if (part.originalFilename && typeof part.originalFilename !== 'string') {\n this._error(\n new FormidableError(\n `the part.originalFilename should be string when it exists`,\n filenameNotString,\n ),\n );\n return;\n }\n\n // This MUST check exactly for undefined. You can not change it to !part.originalFilename.\n\n // todo: uncomment when switch tests to Jest\n // console.log(part);\n\n // ? NOTE(@tunnckocore): no it can be any falsey value, it most probably depends on what's returned\n // from somewhere else. Where recently I changed the return statements\n // and such thing because code style\n // ? NOTE(@tunnckocore): or even better, if there is no mimetype, then it's for sure a field\n // ? NOTE(@tunnckocore): originalFilename is an empty string when a field?\n if (!part.mimetype) {\n let value = '';\n const decoder = new node_string_decoder.StringDecoder(\n part.transferEncoding || this.options.encoding,\n );\n\n part.on('data', (buffer) => {\n this._fieldsSize += buffer.length;\n if (this._fieldsSize > this.options.maxFieldsSize) {\n this._error(\n new FormidableError(\n `options.maxFieldsSize (${this.options.maxFieldsSize} bytes) exceeded, received ${this._fieldsSize} bytes of field data`,\n maxFieldsSizeExceeded,\n 413, // Payload Too Large\n ),\n );\n return;\n }\n value += decoder.write(buffer);\n });\n\n part.on('end', () => {\n this.emit('field', part.name, value);\n });\n return;\n }\n\n if (!this.options.filter(part)) {\n return;\n }\n\n this._flushing += 1;\n\n let fileSize = 0;\n const newFilename = this._getNewName(part);\n const filepath = this._joinDirectoryName(newFilename);\n const file = await this._newFile({\n newFilename,\n filepath,\n originalFilename: part.originalFilename,\n mimetype: part.mimetype,\n });\n file.on('error', (err) => {\n this._error(err);\n });\n this.emit('fileBegin', part.name, file);\n\n file.open();\n this.openedFiles.push(file);\n\n part.on('data', (buffer) => {\n this._totalFileSize += buffer.length;\n fileSize += buffer.length;\n\n if (this._totalFileSize > this.options.maxTotalFileSize) {\n this._error(\n new FormidableError(\n `options.maxTotalFileSize (${this.options.maxTotalFileSize} bytes) exceeded, received ${this._totalFileSize} bytes of file data`,\n biggerThanTotalMaxFileSize,\n 413,\n ),\n );\n return;\n }\n if (buffer.length === 0) {\n return;\n }\n this.pause();\n file.write(buffer, () => {\n this.resume();\n });\n });\n\n part.on('end', () => {\n if (!this.options.allowEmptyFiles && fileSize === 0) {\n this._error(\n new FormidableError(\n `options.allowEmptyFiles is false, file size should be greater than 0`,\n noEmptyFiles,\n 400,\n ),\n );\n return;\n }\n if (fileSize < this.options.minFileSize) {\n this._error(\n new FormidableError(\n `options.minFileSize (${this.options.minFileSize} bytes) inferior, received ${fileSize} bytes of file data`,\n smallerThanMinFileSize,\n 400,\n ),\n );\n return;\n }\n if (fileSize > this.options.maxFileSize) {\n this._error(\n new FormidableError(\n `options.maxFileSize (${this.options.maxFileSize} bytes), received ${fileSize} bytes of file data`,\n biggerThanMaxFileSize,\n 413,\n ),\n );\n return;\n }\n\n file.end(() => {\n this._flushing -= 1;\n this.emit('file', part.name, file);\n this._maybeEnd();\n });\n });\n }\n\n // eslint-disable-next-line max-statements\n async _parseContentType() {\n if (this.bytesExpected === 0) {\n this._parser = new DummyParser(this, this.options);\n return;\n }\n\n if (!this.headers['content-type']) {\n this._error(\n new FormidableError(\n 'bad content-type header, no content-type',\n missingContentType,\n 400,\n ),\n );\n return;\n }\n\n\n new DummyParser(this, this.options);\n\n const results = [];\n await Promise.all(this._plugins.map(async (plugin, idx) => {\n let pluginReturn = null;\n try {\n pluginReturn = await plugin(this, this.options) || this;\n } catch (err) {\n // directly throw from the `form.parse` method;\n // there is no other better way, except a handle through options\n const error = new FormidableError(\n `plugin on index ${idx} failed with: ${err.message}`,\n pluginFailed,\n 500,\n );\n error.idx = idx;\n throw error;\n }\n Object.assign(this, pluginReturn);\n\n // todo: use Set/Map and pass plugin name instead of the `idx` index\n this.emit('plugin', idx, pluginReturn);\n }));\n this.emit('pluginsResults', results);\n }\n\n _error(err, eventName = 'error') {\n if (this.error || this.ended) {\n return;\n }\n\n this.req = null;\n this.error = err;\n this.emit(eventName, err);\n\n this.openedFiles.forEach((file) => {\n file.destroy();\n });\n }\n\n _parseContentLength() {\n this.bytesReceived = 0;\n if (this.headers['content-length']) {\n this.bytesExpected = parseInt(this.headers['content-length'], 10);\n } else if (this.headers['transfer-encoding'] === undefined) {\n this.bytesExpected = 0;\n }\n\n if (this.bytesExpected !== null) {\n this.emit('progress', this.bytesReceived, this.bytesExpected);\n }\n }\n\n _newParser() {\n return new MultipartParser$1(this.options);\n }\n\n async _newFile({ filepath, originalFilename, mimetype, newFilename }) {\n if (this.options.fileWriteStreamHandler) {\n return new VolatileFile({\n newFilename,\n filepath,\n originalFilename,\n mimetype,\n createFileWriteStream: this.options.fileWriteStreamHandler,\n hashAlgorithm: this.options.hashAlgorithm,\n });\n }\n if (this.options.createDirsFromUploads) {\n try {\n await createNecessaryDirectoriesAsync(filepath);\n } catch (errorCreatingDir) {\n this._error(new FormidableError(\n `cannot create directory`,\n cannotCreateDir,\n 409,\n ));\n }\n }\n return new PersistentFile({\n newFilename,\n filepath,\n originalFilename,\n mimetype,\n hashAlgorithm: this.options.hashAlgorithm,\n });\n }\n\n _getFileName(headerValue) {\n // matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n const m = headerValue.match(\n /\\bfilename=(\"(.*?)\"|([^()<>{}[\\]@,;:\"?=\\s/\\t]+))($|;\\s)/i,\n );\n if (!m) return null;\n\n const match = m[2] || m[3] || '';\n let originalFilename = match.substr(match.lastIndexOf('\\\\') + 1);\n originalFilename = originalFilename.replace(/%22/g, '\"');\n originalFilename = originalFilename.replace(/&#([\\d]{4});/g, (_, code) =>\n String.fromCharCode(code),\n );\n\n return originalFilename;\n }\n\n // able to get composed extension with multiple dots\n // \"a.b.c\" -> \".b.c\"\n // as opposed to path.extname -> \".c\"\n _getExtension(str) {\n if (!str) {\n return '';\n }\n\n const basename = path.basename(str);\n const firstDot = basename.indexOf('.');\n const lastDot = basename.lastIndexOf('.');\n let rawExtname = path.extname(basename);\n\n if (firstDot !== lastDot) {\n rawExtname = basename.slice(firstDot);\n }\n\n let filtered;\n const firstInvalidIndex = Array.from(rawExtname).findIndex(invalidExtensionChar);\n if (firstInvalidIndex === -1) {\n filtered = rawExtname;\n } else {\n filtered = rawExtname.substring(0, firstInvalidIndex);\n }\n if (filtered === '.') {\n return '';\n }\n return filtered;\n }\n\n _joinDirectoryName(name) {\n const newPath = path.join(this.uploadDir, name);\n\n // prevent directory traversal attacks\n if (!newPath.startsWith(this.uploadDir)) {\n return path.join(this.uploadDir, this.options.defaultInvalidName);\n }\n\n return newPath;\n }\n\n _setUpRename() {\n const hasRename = typeof this.options.filename === 'function';\n if (hasRename) {\n this._getNewName = (part) => {\n let ext = '';\n let name = this.options.defaultInvalidName;\n if (part.originalFilename) {\n // can be null\n ({ ext, name } = path.parse(part.originalFilename));\n if (this.options.keepExtensions !== true) {\n ext = '';\n }\n }\n return this.options.filename.call(this, name, ext, part, this);\n };\n } else {\n this._getNewName = (part) => {\n const name = createId();\n\n if (part && this.options.keepExtensions) {\n const originalFilename =\n typeof part === 'string' ? part : part.originalFilename;\n return `${name}${this._getExtension(originalFilename)}`;\n }\n\n return name;\n };\n }\n }\n\n _setUpMaxFields() {\n if (this.options.maxFields !== Infinity) {\n let fieldsCount = 0;\n this.on('field', () => {\n fieldsCount += 1;\n if (fieldsCount > this.options.maxFields) {\n this._error(\n new FormidableError(\n `options.maxFields (${this.options.maxFields}) exceeded`,\n maxFieldsExceeded,\n 413,\n ),\n );\n }\n });\n }\n }\n\n _setUpMaxFiles() {\n if (this.options.maxFiles !== Infinity) {\n let fileCount = 0;\n this.on('fileBegin', () => {\n fileCount += 1;\n if (fileCount > this.options.maxFiles) {\n this._error(\n new FormidableError(\n `options.maxFiles (${this.options.maxFiles}) exceeded`,\n maxFilesExceeded,\n 413,\n ),\n );\n }\n });\n }\n }\n\n _maybeEnd() {\n if (!this.ended || this._flushing || this.error) {\n return;\n }\n this.req = null;\n this.emit('end');\n }\n}\n\n// make it available without requiring the `new` keyword\n// if you want it access `const formidable.IncomingForm` as v1\nconst formidable = (...args) => new IncomingForm(...args);\nconst {enabledPlugins} = DEFAULT_OPTIONS;\n\nexports.DummyParser = DummyParser;\nexports.File = PersistentFile;\nexports.Formidable = IncomingForm;\nexports.IncomingForm = IncomingForm;\nexports.JSONParser = JSONParser;\nexports.MultipartParser = MultipartParser$1;\nexports.OctetStreamParser = OctetStreamParser;\nexports.OctetstreamParser = OctetStreamParser;\nexports.PersistentFile = PersistentFile;\nexports.QueryStringParser = QuerystringParser;\nexports.QuerystringParser = QuerystringParser;\nexports.VolatileFile = VolatileFile;\nexports.default = formidable;\nexports.defaultOptions = DEFAULT_OPTIONS;\nexports.enabledPlugins = enabledPlugins;\nexports.errors = FormidableError$1;\nexports.formidable = formidable;\nexports.json = plugin;\nexports.multipart = plugin$1;\nexports.octetstream = plugin$3;\nexports.querystring = plugin$2;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/* jshint node: true */\n(function () {\n \"use strict\";\n\n function CookieAccessInfo(domain, path, secure, script) {\n if (this instanceof CookieAccessInfo) {\n this.domain = domain || undefined;\n this.path = path || \"/\";\n this.secure = !!secure;\n this.script = !!script;\n return this;\n }\n return new CookieAccessInfo(domain, path, secure, script);\n }\n CookieAccessInfo.All = Object.freeze(Object.create(null));\n exports.CookieAccessInfo = CookieAccessInfo;\n\n function Cookie(cookiestr, request_domain, request_path) {\n if (cookiestr instanceof Cookie) {\n return cookiestr;\n }\n if (this instanceof Cookie) {\n this.name = null;\n this.value = null;\n this.expiration_date = Infinity;\n this.path = String(request_path || \"/\");\n this.explicit_path = false;\n this.domain = request_domain || null;\n this.explicit_domain = false;\n this.secure = false; //how to define default?\n this.noscript = false; //httponly\n if (cookiestr) {\n this.parse(cookiestr, request_domain, request_path);\n }\n return this;\n }\n return new Cookie(cookiestr, request_domain, request_path);\n }\n exports.Cookie = Cookie;\n\n Cookie.prototype.toString = function toString() {\n var str = [this.name + \"=\" + this.value];\n if (this.expiration_date !== Infinity) {\n str.push(\"expires=\" + (new Date(this.expiration_date)).toGMTString());\n }\n if (this.domain) {\n str.push(\"domain=\" + this.domain);\n }\n if (this.path) {\n str.push(\"path=\" + this.path);\n }\n if (this.secure) {\n str.push(\"secure\");\n }\n if (this.noscript) {\n str.push(\"httponly\");\n }\n return str.join(\"; \");\n };\n\n Cookie.prototype.toValueString = function toValueString() {\n return this.name + \"=\" + this.value;\n };\n\n var cookie_str_splitter = /[:](?=\\s*[a-zA-Z0-9_\\-]+\\s*[=])/g;\n Cookie.prototype.parse = function parse(str, request_domain, request_path) {\n if (this instanceof Cookie) {\n if ( str.length > 32768 ) {\n console.warn(\"Cookie too long for parsing (>32768 characters)\");\n return;\n }\n \n var parts = str.split(\";\").filter(function (value) {\n return !!value;\n });\n var i;\n\n var pair = parts[0].match(/([^=]+)=([\\s\\S]*)/);\n if (!pair) {\n console.warn(\"Invalid cookie header encountered. Header: '\"+str+\"'\");\n return;\n }\n\n var key = pair[1];\n var value = pair[2];\n if ( typeof key !== 'string' || key.length === 0 || typeof value !== 'string' ) {\n console.warn(\"Unable to extract values from cookie header. Cookie: '\"+str+\"'\");\n return;\n }\n\n this.name = key;\n this.value = value;\n\n for (i = 1; i < parts.length; i += 1) {\n pair = parts[i].match(/([^=]+)(?:=([\\s\\S]*))?/);\n key = pair[1].trim().toLowerCase();\n value = pair[2];\n switch (key) {\n case \"httponly\":\n this.noscript = true;\n break;\n case \"expires\":\n this.expiration_date = value ?\n Number(Date.parse(value)) :\n Infinity;\n break;\n case \"path\":\n this.path = value ?\n value.trim() :\n \"\";\n this.explicit_path = true;\n break;\n case \"domain\":\n this.domain = value ?\n value.trim() :\n \"\";\n this.explicit_domain = !!this.domain;\n break;\n case \"secure\":\n this.secure = true;\n break;\n }\n }\n\n if (!this.explicit_path) {\n this.path = request_path || \"/\";\n }\n if (!this.explicit_domain) {\n this.domain = request_domain;\n }\n\n return this;\n }\n return new Cookie().parse(str, request_domain, request_path);\n };\n\n Cookie.prototype.matches = function matches(access_info) {\n if (access_info === CookieAccessInfo.All) {\n return true;\n }\n if (this.noscript && access_info.script ||\n this.secure && !access_info.secure ||\n !this.collidesWith(access_info)) {\n return false;\n }\n return true;\n };\n\n Cookie.prototype.collidesWith = function collidesWith(access_info) {\n if ((this.path && !access_info.path) || (this.domain && !access_info.domain)) {\n return false;\n }\n if (this.path && access_info.path.indexOf(this.path) !== 0) {\n return false;\n }\n if (this.explicit_path && access_info.path.indexOf( this.path ) !== 0) {\n return false;\n }\n var access_domain = access_info.domain && access_info.domain.replace(/^[\\.]/,'');\n var cookie_domain = this.domain && this.domain.replace(/^[\\.]/,'');\n if (cookie_domain === access_domain) {\n return true;\n }\n if (cookie_domain) {\n if (!this.explicit_domain) {\n return false; // we already checked if the domains were exactly the same\n }\n var wildcard = access_domain.indexOf(cookie_domain);\n if (wildcard === -1 || wildcard !== access_domain.length - cookie_domain.length) {\n return false;\n }\n return true;\n }\n return true;\n };\n\n function CookieJar() {\n var cookies, cookies_list, collidable_cookie;\n if (this instanceof CookieJar) {\n cookies = Object.create(null); //name: [Cookie]\n\n this.setCookie = function setCookie(cookie, request_domain, request_path) {\n var remove, i;\n cookie = new Cookie(cookie, request_domain, request_path);\n //Delete the cookie if the set is past the current time\n remove = cookie.expiration_date <= Date.now();\n if (cookies[cookie.name] !== undefined) {\n cookies_list = cookies[cookie.name];\n for (i = 0; i < cookies_list.length; i += 1) {\n collidable_cookie = cookies_list[i];\n if (collidable_cookie.collidesWith(cookie)) {\n if (remove) {\n cookies_list.splice(i, 1);\n if (cookies_list.length === 0) {\n delete cookies[cookie.name];\n }\n return false;\n }\n cookies_list[i] = cookie;\n return cookie;\n }\n }\n if (remove) {\n return false;\n }\n cookies_list.push(cookie);\n return cookie;\n }\n if (remove) {\n return false;\n }\n cookies[cookie.name] = [cookie];\n return cookies[cookie.name];\n };\n //returns a cookie\n this.getCookie = function getCookie(cookie_name, access_info) {\n var cookie, i;\n cookies_list = cookies[cookie_name];\n if (!cookies_list) {\n return;\n }\n for (i = 0; i < cookies_list.length; i += 1) {\n cookie = cookies_list[i];\n if (cookie.expiration_date <= Date.now()) {\n if (cookies_list.length === 0) {\n delete cookies[cookie.name];\n }\n continue;\n }\n\n if (cookie.matches(access_info)) {\n return cookie;\n }\n }\n };\n //returns a list of cookies\n this.getCookies = function getCookies(access_info) {\n var matches = [], cookie_name, cookie;\n for (cookie_name in cookies) {\n cookie = this.getCookie(cookie_name, access_info);\n if (cookie) {\n matches.push(cookie);\n }\n }\n matches.toString = function toString() {\n return matches.join(\":\");\n };\n matches.toValueString = function toValueString() {\n return matches.map(function (c) {\n return c.toValueString();\n }).join('; ');\n };\n return matches;\n };\n\n return this;\n }\n return new CookieJar();\n }\n exports.CookieJar = CookieJar;\n\n //returns list of cookies that were set correctly. Cookies that are expired and removed are not returned.\n CookieJar.prototype.setCookies = function setCookies(cookies, request_domain, request_path) {\n cookies = Array.isArray(cookies) ?\n cookies :\n cookies.split(cookie_str_splitter);\n var successful = [],\n i,\n cookie;\n cookies = cookies.map(function(item){\n return new Cookie(item, request_domain, request_path);\n });\n for (i = 0; i < cookies.length; i += 1) {\n cookie = cookies[i];\n if (this.setCookie(cookie, request_domain, request_path)) {\n successful.push(cookie);\n }\n }\n return successful;\n };\n}());\n","module.exports = stringify\nstringify.default = stringify\nstringify.stable = deterministicStringify\nstringify.stableStringify = deterministicStringify\n\nvar LIMIT_REPLACE_NODE = '[...]'\nvar CIRCULAR_REPLACE_NODE = '[Circular]'\n\nvar arr = []\nvar replacerStack = []\n\nfunction defaultOptions () {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n }\n}\n\n// Regular stringify\nfunction stringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n decirc(obj, '', 0, [], undefined, 0, options)\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer)\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction setReplace (replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k)\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace })\n arr.push([parent, k, val, propertyDescriptor])\n } else {\n replacerStack.push([val, k, replace])\n }\n } else {\n parent[k] = replace\n arr.push([parent, k, val])\n }\n}\n\nfunction decirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n var keys = Object.keys(val)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n decirc(val[key], key, i, stack, val, depth, options)\n }\n }\n stack.pop()\n }\n}\n\n// Stable-stringify\nfunction compareFunction (a, b) {\n if (a < b) {\n return -1\n }\n if (a > b) {\n return 1\n }\n return 0\n}\n\nfunction deterministicStringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer)\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return\n }\n } catch (_) {\n return\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {}\n var keys = Object.keys(val).sort(compareFunction)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n deterministicDecirc(val[key], key, i, stack, val, depth, options)\n tmp[key] = val[key]\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val])\n parent[k] = tmp\n } else {\n return tmp\n }\n }\n stack.pop()\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues (replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v\n }\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i]\n if (part[1] === key && part[0] === val) {\n val = part[2]\n replacerStack.splice(i, 1)\n break\n }\n }\n }\n return replacer.call(this, key, val)\n }\n}\n","\"use strict\";\n\n/**\n * Return the mime type for the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nexports.type = string_ => string_.split(/ *; */).shift();\n\n/**\n * Return header field parameters.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nexports.params = value => {\n const object = {};\n for (const string_ of value.split(/ *; */)) {\n const parts = string_.split(/ *= */);\n const key = parts.shift();\n const value = parts.shift();\n if (key && value) object[key] = value;\n }\n return object;\n};\n\n/**\n * Parse Link header fields.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nexports.parseLinks = value => {\n const object = {};\n for (const string_ of value.split(/ *, */)) {\n const parts = string_.split(/ *; */);\n const url = parts[0].slice(1, -1);\n const rel = parts[1].split(/ *= */)[1].slice(1, -1);\n object[rel] = url;\n }\n return object;\n};\n\n/**\n * Strip content related fields from `header`.\n *\n * @param {Object} header\n * @return {Object} header\n * @api private\n */\n\nexports.cleanHeader = (header, changesOrigin) => {\n delete header['content-type'];\n delete header['content-length'];\n delete header['transfer-encoding'];\n delete header.host;\n // secuirty\n if (changesOrigin) {\n delete header.authorization;\n delete header.cookie;\n }\n return header;\n};\nexports.normalizeHostname = hostname => {\n const [, normalized] = hostname.match(/^\\[([^\\]]+)\\]$/) || [];\n return normalized || hostname;\n};\n\n/**\n * Check if `obj` is an object.\n *\n * @param {Object} object\n * @return {Boolean}\n * @api private\n */\nexports.isObject = object => {\n return object !== null && typeof object === 'object';\n};\n\n/**\n * Object.hasOwn fallback/polyfill.\n *\n * @type {(object: object, property: string) => boolean} object\n * @api private\n */\nexports.hasOwn = Object.hasOwn || function (object, property) {\n if (object == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n return Object.prototype.hasOwnProperty.call(new Object(object), property);\n};\nexports.mixin = (target, source) => {\n for (const key in source) {\n if (exports.hasOwn(source, key)) {\n target[key] = source[key];\n }\n }\n};\n\n/**\n * Check if the response is compressed using Gzip or Deflate.\n * @param {Object} res\n * @return {Boolean}\n */\n\nexports.isGzipOrDeflateEncoding = res => {\n return new RegExp(/^\\s*(?:deflate|gzip)\\s*$/).test(res.headers['content-encoding']);\n};\n\n/**\n * Check if the response is compressed using Brotli.\n * @param {Object} res\n * @return {Boolean}\n */\n\nexports.isBrotliEncoding = res => {\n return new RegExp(/^\\s*(?:br)\\s*$/).test(res.headers['content-encoding']);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwidHlwZSIsInN0cmluZ18iLCJzcGxpdCIsInNoaWZ0IiwicGFyYW1zIiwidmFsdWUiLCJvYmplY3QiLCJwYXJ0cyIsImtleSIsInBhcnNlTGlua3MiLCJ1cmwiLCJzbGljZSIsInJlbCIsImNsZWFuSGVhZGVyIiwiaGVhZGVyIiwiY2hhbmdlc09yaWdpbiIsImhvc3QiLCJhdXRob3JpemF0aW9uIiwiY29va2llIiwibm9ybWFsaXplSG9zdG5hbWUiLCJob3N0bmFtZSIsIm5vcm1hbGl6ZWQiLCJtYXRjaCIsImlzT2JqZWN0IiwiaGFzT3duIiwiT2JqZWN0IiwicHJvcGVydHkiLCJUeXBlRXJyb3IiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtaXhpbiIsInRhcmdldCIsInNvdXJjZSIsImlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nIiwicmVzIiwiUmVnRXhwIiwidGVzdCIsImhlYWRlcnMiLCJpc0Jyb3RsaUVuY29kaW5nIl0sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBSZXR1cm4gdGhlIG1pbWUgdHlwZSBmb3IgdGhlIGdpdmVuIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMudHlwZSA9IChzdHJpbmdfKSA9PiBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pLnNoaWZ0KCk7XG5cbi8qKlxuICogUmV0dXJuIGhlYWRlciBmaWVsZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyYW1zID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0cmluZ18gb2YgdmFsdWUuc3BsaXQoLyAqOyAqLykpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ18uc3BsaXQoLyAqPSAqLyk7XG4gICAgY29uc3Qga2V5ID0gcGFydHMuc2hpZnQoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoa2V5ICYmIHZhbHVlKSBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbi8qKlxuICogUGFyc2UgTGluayBoZWFkZXIgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyc2VMaW5rcyA9ICh2YWx1ZSkgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7fTtcbiAgZm9yIChjb25zdCBzdHJpbmdfIG9mIHZhbHVlLnNwbGl0KC8gKiwgKi8pKSB7XG4gICAgY29uc3QgcGFydHMgPSBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pO1xuICAgIGNvbnN0IHVybCA9IHBhcnRzWzBdLnNsaWNlKDEsIC0xKTtcbiAgICBjb25zdCByZWwgPSBwYXJ0c1sxXS5zcGxpdCgvICo9ICovKVsxXS5zbGljZSgxLCAtMSk7XG4gICAgb2JqZWN0W3JlbF0gPSB1cmw7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBTdHJpcCBjb250ZW50IHJlbGF0ZWQgZmllbGRzIGZyb20gYGhlYWRlcmAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fSBoZWFkZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY2xlYW5IZWFkZXIgPSAoaGVhZGVyLCBjaGFuZ2VzT3JpZ2luKSA9PiB7XG4gIGRlbGV0ZSBoZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICBkZWxldGUgaGVhZGVyWydjb250ZW50LWxlbmd0aCddO1xuICBkZWxldGUgaGVhZGVyWyd0cmFuc2Zlci1lbmNvZGluZyddO1xuICBkZWxldGUgaGVhZGVyLmhvc3Q7XG4gIC8vIHNlY3VpcnR5XG4gIGlmIChjaGFuZ2VzT3JpZ2luKSB7XG4gICAgZGVsZXRlIGhlYWRlci5hdXRob3JpemF0aW9uO1xuICAgIGRlbGV0ZSBoZWFkZXIuY29va2llO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcjtcbn07XG5cbmV4cG9ydHMubm9ybWFsaXplSG9zdG5hbWUgPSAoaG9zdG5hbWUpID0+IHtcbiAgY29uc3QgWyxub3JtYWxpemVkXSA9IGhvc3RuYW1lLm1hdGNoKC9eXFxbKFteXFxdXSspXFxdJC8pIHx8IFtdO1xuICByZXR1cm4gbm9ybWFsaXplZCB8fCBob3N0bmFtZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZXhwb3J0cy5pc09iamVjdCA9IChvYmplY3QpID0+IHtcbiAgcmV0dXJuIG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jztcbn07XG5cbi8qKlxuICogT2JqZWN0Lmhhc093biBmYWxsYmFjay9wb2x5ZmlsbC5cbiAqXG4gKiBAdHlwZSB7KG9iamVjdDogb2JqZWN0LCBwcm9wZXJ0eTogc3RyaW5nKSA9PiBib29sZWFufSBvYmplY3RcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnRzLmhhc093biA9XG4gIE9iamVjdC5oYXNPd24gfHxcbiAgZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3IE9iamVjdChvYmplY3QpLCBwcm9wZXJ0eSk7XG4gIH07XG5cbmV4cG9ydHMubWl4aW4gPSAodGFyZ2V0LCBzb3VyY2UpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGV4cG9ydHMuaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGlzIGNvbXByZXNzZWQgdXNpbmcgR3ppcCBvciBEZWZsYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IHJlc1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuXG5leHBvcnRzLmlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nID0gKHJlcykgPT4ge1xuICByZXR1cm4gbmV3IFJlZ0V4cCgvXlxccyooPzpkZWZsYXRlfGd6aXApXFxzKiQvKS50ZXN0KHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaXMgY29tcHJlc3NlZCB1c2luZyBCcm90bGkuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmV4cG9ydHMuaXNCcm90bGlFbmNvZGluZyA9IChyZXMpID0+IHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoL15cXHMqKD86YnIpXFxzKiQvKS50ZXN0KHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUEsT0FBTyxDQUFDQyxJQUFJLEdBQUlDLE9BQU8sSUFBS0EsT0FBTyxDQUFDQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUosT0FBTyxDQUFDSyxNQUFNLEdBQUlDLEtBQUssSUFBSztF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","\"use strict\";\n\n/**\n * Module of mixed-in functions shared between node and client code\n */\nconst {\n isObject,\n hasOwn\n} = require('./utils');\n\n/**\n * Expose `RequestBase`.\n */\n\nmodule.exports = RequestBase;\n\n/**\n * Initialize a new `RequestBase`.\n *\n * @api public\n */\n\nfunction RequestBase() {}\n\n/**\n * Clear previous timeout.\n *\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.clearTimeout = function () {\n clearTimeout(this._timer);\n clearTimeout(this._responseTimeoutTimer);\n clearTimeout(this._uploadTimeoutTimer);\n delete this._timer;\n delete this._responseTimeoutTimer;\n delete this._uploadTimeoutTimer;\n return this;\n};\n\n/**\n * Override default response body parser\n *\n * This function will be called to convert incoming data into request.body\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.parse = function (fn) {\n this._parser = fn;\n return this;\n};\n\n/**\n * Set format of binary response body.\n * In browser valid formats are 'blob' and 'arraybuffer',\n * which return Blob and ArrayBuffer, respectively.\n *\n * In Node all values result in Buffer.\n *\n * Examples:\n *\n * req.get('/')\n * .responseType('blob')\n * .end(callback);\n *\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.responseType = function (value) {\n this._responseType = value;\n return this;\n};\n\n/**\n * Override default request body serializer\n *\n * This function will be called to convert data set via .send or .attach into payload to send\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.serialize = function (fn) {\n this._serializer = fn;\n return this;\n};\n\n/**\n * Set timeouts.\n *\n * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time.\n * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections.\n * - upload is the time since last bit of data was sent or received. This timeout works only if deadline timeout is off\n *\n * Value of 0 or false means no timeout.\n *\n * @param {Number|Object} ms or {response, deadline}\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.timeout = function (options) {\n if (!options || typeof options !== 'object') {\n this._timeout = options;\n this._responseTimeout = 0;\n this._uploadTimeout = 0;\n return this;\n }\n for (const option in options) {\n if (hasOwn(options, option)) {\n switch (option) {\n case 'deadline':\n this._timeout = options.deadline;\n break;\n case 'response':\n this._responseTimeout = options.response;\n break;\n case 'upload':\n this._uploadTimeout = options.upload;\n break;\n default:\n console.warn('Unknown timeout option', option);\n }\n }\n }\n return this;\n};\n\n/**\n * Set number of retry attempts on error.\n *\n * Failed requests will be retried 'count' times if timeout or err.code >= 500.\n *\n * @param {Number} count\n * @param {Function} [fn]\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.retry = function (count, fn) {\n // Default to 1 if no count passed or true\n if (arguments.length === 0 || count === true) count = 1;\n if (count <= 0) count = 0;\n this._maxRetries = count;\n this._retries = 0;\n this._retryCallback = fn;\n return this;\n};\n\n//\n// NOTE: we do not include ESOCKETTIMEDOUT because that is from `request` package\n// <https://github.com/sindresorhus/got/pull/537>\n//\n// NOTE: we do not include EADDRINFO because it was removed from libuv in 2014\n// <https://github.com/libuv/libuv/commit/02e1ebd40b807be5af46343ea873331b2ee4e9c1>\n// <https://github.com/request/request/search?q=ESOCKETTIMEDOUT&unscoped_q=ESOCKETTIMEDOUT>\n//\n//\n// TODO: expose these as configurable defaults\n//\nconst ERROR_CODES = new Set(['ETIMEDOUT', 'ECONNRESET', 'EADDRINUSE', 'ECONNREFUSED', 'EPIPE', 'ENOTFOUND', 'ENETUNREACH', 'EAI_AGAIN']);\nconst STATUS_CODES = new Set([408, 413, 429, 500, 502, 503, 504, 521, 522, 524]);\n\n// TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST)\n// const METHODS = new Set(['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']);\n\n/**\n * Determine if a request should be retried.\n * (Inspired by https://github.com/sindresorhus/got#retry)\n *\n * @param {Error} err an error\n * @param {Response} [res] response\n * @returns {Boolean} if segment should be retried\n */\nRequestBase.prototype._shouldRetry = function (error, res) {\n if (!this._maxRetries || this._retries++ >= this._maxRetries) {\n return false;\n }\n if (this._retryCallback) {\n try {\n const override = this._retryCallback(error, res);\n if (override === true) return true;\n if (override === false) return false;\n // undefined falls back to defaults\n } catch (err) {\n console.error(err);\n }\n }\n\n // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST)\n /*\n if (\n this.req &&\n this.req.method &&\n !METHODS.has(this.req.method.toUpperCase())\n )\n return false;\n */\n if (res && res.status && STATUS_CODES.has(res.status)) return true;\n if (error) {\n if (error.code && ERROR_CODES.has(error.code)) return true;\n // Superagent timeout\n if (error.timeout && error.code === 'ECONNABORTED') return true;\n if (error.crossDomain) return true;\n }\n return false;\n};\n\n/**\n * Retry request\n *\n * @return {Request} for chaining\n * @api private\n */\n\nRequestBase.prototype._retry = function () {\n this.clearTimeout();\n\n // node\n if (this.req) {\n this.req = null;\n this.req = this.request();\n }\n this._aborted = false;\n this.timedout = false;\n this.timedoutError = null;\n return this._end();\n};\n\n/**\n * Promise support\n *\n * @param {Function} resolve\n * @param {Function} [reject]\n * @return {Request}\n */\n\nRequestBase.prototype.then = function (resolve, reject) {\n if (!this._fullfilledPromise) {\n const self = this;\n if (this._endCalled) {\n console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises');\n }\n this._fullfilledPromise = new Promise((resolve, reject) => {\n self.on('abort', () => {\n if (this._maxRetries && this._maxRetries > this._retries) {\n return;\n }\n if (this.timedout && this.timedoutError) {\n reject(this.timedoutError);\n return;\n }\n const error = new Error('Aborted');\n error.code = 'ABORTED';\n error.status = this.status;\n error.method = this.method;\n error.url = this.url;\n reject(error);\n });\n self.end((error, res) => {\n if (error) reject(error);else resolve(res);\n });\n });\n }\n return this._fullfilledPromise.then(resolve, reject);\n};\nRequestBase.prototype.catch = function (callback) {\n return this.then(undefined, callback);\n};\n\n/**\n * Allow for extension\n */\n\nRequestBase.prototype.use = function (fn) {\n fn(this);\n return this;\n};\nRequestBase.prototype.ok = function (callback) {\n if (typeof callback !== 'function') throw new Error('Callback required');\n this._okCallback = callback;\n return this;\n};\nRequestBase.prototype._isResponseOK = function (res) {\n if (!res) {\n return false;\n }\n if (this._okCallback) {\n return this._okCallback(res);\n }\n return res.status >= 200 && res.status < 300;\n};\n\n/**\n * Get request header `field`.\n * Case-insensitive.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nRequestBase.prototype.get = function (field) {\n return this._header[field.toLowerCase()];\n};\n\n/**\n * Get case-insensitive header `field` value.\n * This is a deprecated internal API. Use `.get(field)` instead.\n *\n * (getHeader is no longer used internally by the superagent code base)\n *\n * @param {String} field\n * @return {String}\n * @api private\n * @deprecated\n */\n\nRequestBase.prototype.getHeader = RequestBase.prototype.get;\n\n/**\n * Set header `field` to `val`, or multiple fields with one object.\n * Case-insensitive.\n *\n * Examples:\n *\n * req.get('/')\n * .set('Accept', 'application/json')\n * .set('X-API-Key', 'foobar')\n * .end(callback);\n *\n * req.get('/')\n * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' })\n * .end(callback);\n *\n * @param {String|Object} field\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.set = function (field, value) {\n if (isObject(field)) {\n for (const key in field) {\n if (hasOwn(field, key)) this.set(key, field[key]);\n }\n return this;\n }\n this._header[field.toLowerCase()] = value;\n this.header[field] = value;\n return this;\n};\n\n/**\n * Remove header `field`.\n * Case-insensitive.\n *\n * Example:\n *\n * req.get('/')\n * .unset('User-Agent')\n * .end(callback);\n *\n * @param {String} field field name\n */\nRequestBase.prototype.unset = function (field) {\n delete this._header[field.toLowerCase()];\n delete this.header[field];\n return this;\n};\n\n/**\n * Write the field `name` and `val`, or multiple fields with one object\n * for \"multipart/form-data\" request bodies.\n *\n * ``` js\n * request.post('/upload')\n * .field('foo', 'bar')\n * .end(callback);\n *\n * request.post('/upload')\n * .field({ foo: 'bar', baz: 'qux' })\n * .end(callback);\n * ```\n *\n * @param {String|Object} name name of field\n * @param {String|Blob|File|Buffer|fs.ReadStream} val value of field\n * @param {String} options extra options, e.g. 'blob'\n * @return {Request} for chaining\n * @api public\n */\nRequestBase.prototype.field = function (name, value, options) {\n // name should be either a string or an object.\n if (name === null || undefined === name) {\n throw new Error('.field(name, val) name can not be empty');\n }\n if (this._data) {\n throw new Error(\".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()\");\n }\n if (isObject(name)) {\n for (const key in name) {\n if (hasOwn(name, key)) this.field(key, name[key]);\n }\n return this;\n }\n if (Array.isArray(value)) {\n for (const i in value) {\n if (hasOwn(value, i)) this.field(name, value[i]);\n }\n return this;\n }\n\n // val should be defined now\n if (value === null || undefined === value) {\n throw new Error('.field(name, val) val can not be empty');\n }\n if (typeof value === 'boolean') {\n value = String(value);\n }\n\n // fix https://github.com/ladjs/superagent/issues/1680\n if (options) this._getFormData().append(name, value, options);else this._getFormData().append(name, value);\n return this;\n};\n\n/**\n * Abort the request, and clear potential timeout.\n *\n * @return {Request} request\n * @api public\n */\nRequestBase.prototype.abort = function () {\n if (this._aborted) {\n return this;\n }\n this._aborted = true;\n if (this.xhr) this.xhr.abort(); // browser\n if (this.req) {\n this.req.abort(); // node\n }\n this.clearTimeout();\n this.emit('abort');\n return this;\n};\nRequestBase.prototype._auth = function (user, pass, options, base64Encoder) {\n switch (options.type) {\n case 'basic':\n this.set('Authorization', `Basic ${base64Encoder(`${user}:${pass}`)}`);\n break;\n case 'auto':\n this.username = user;\n this.password = pass;\n break;\n case 'bearer':\n // usage would be .auth(accessToken, { type: 'bearer' })\n this.set('Authorization', `Bearer ${user}`);\n break;\n default:\n break;\n }\n return this;\n};\n\n/**\n * Enable transmission of cookies with x-domain requests.\n *\n * Note that for this to work the origin must not be\n * using \"Access-Control-Allow-Origin\" with a wildcard,\n * and also must set \"Access-Control-Allow-Credentials\"\n * to \"true\".\n * @param {Boolean} [on=true] - Set 'withCredentials' state\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.withCredentials = function (on) {\n // This is browser-only functionality. Node side is no-op.\n if (on === undefined) on = true;\n this._withCredentials = on;\n return this;\n};\n\n/**\n * Set the max redirects to `n`. Does nothing in browser XHR implementation.\n *\n * @param {Number} n\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.redirects = function (n) {\n this._maxRedirects = n;\n return this;\n};\n\n/**\n * Maximum size of buffered response body, in bytes. Counts uncompressed size.\n * Default 200MB.\n *\n * @param {Number} n number of bytes\n * @return {Request} for chaining\n */\nRequestBase.prototype.maxResponseSize = function (n) {\n if (typeof n !== 'number') {\n throw new TypeError('Invalid argument');\n }\n this._maxResponseSize = n;\n return this;\n};\n\n/**\n * Convert to a plain javascript object (not JSON string) of scalar properties.\n * Note as this method is designed to return a useful non-this value,\n * it cannot be chained.\n *\n * @return {Object} describing method, url, and data of this request\n * @api public\n */\n\nRequestBase.prototype.toJSON = function () {\n return {\n method: this.method,\n url: this.url,\n data: this._data,\n headers: this._header\n };\n};\n\n/**\n * Send `data` as the request body, defaulting the `.type()` to \"json\" when\n * an object is given.\n *\n * Examples:\n *\n * // manual json\n * request.post('/user')\n * .type('json')\n * .send('{\"name\":\"tj\"}')\n * .end(callback)\n *\n * // auto json\n * request.post('/user')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // manual x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send('name=tj')\n * .end(callback)\n *\n * // auto x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // defaults to x-www-form-urlencoded\n * request.post('/user')\n * .send('name=tobi')\n * .send('species=ferret')\n * .end(callback)\n *\n * @param {String|Object} data\n * @return {Request} for chaining\n * @api public\n */\n\n// eslint-disable-next-line complexity\nRequestBase.prototype.send = function (data) {\n const isObject_ = isObject(data);\n let type = this._header['content-type'];\n if (this._formData) {\n throw new Error(\".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()\");\n }\n if (isObject_ && !this._data) {\n if (Array.isArray(data)) {\n this._data = [];\n } else if (!this._isHost(data)) {\n this._data = {};\n }\n } else if (data && this._data && this._isHost(this._data)) {\n throw new Error(\"Can't merge these send calls\");\n }\n\n // merge\n if (isObject_ && isObject(this._data)) {\n for (const key in data) {\n if (typeof data[key] == 'bigint' && !data[key].toJSON) throw new Error('Cannot serialize BigInt value to json');\n if (hasOwn(data, key)) this._data[key] = data[key];\n }\n } else if (typeof data === 'bigint') throw new Error(\"Cannot send value of type BigInt\");else if (typeof data === 'string') {\n // default to x-www-form-urlencoded\n if (!type) this.type('form');\n type = this._header['content-type'];\n if (type) type = type.toLowerCase().trim();\n if (type === 'application/x-www-form-urlencoded') {\n this._data = this._data ? `${this._data}&${data}` : data;\n } else {\n this._data = (this._data || '') + data;\n }\n } else {\n this._data = data;\n }\n if (!isObject_ || this._isHost(data)) {\n return this;\n }\n\n // default to json\n if (!type) this.type('json');\n return this;\n};\n\n/**\n * Sort `querystring` by the sort function\n *\n *\n * Examples:\n *\n * // default order\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery()\n * .end(callback)\n *\n * // customized sort function\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery(function(a, b){\n * return a.length - b.length;\n * })\n * .end(callback)\n *\n *\n * @param {Function} sort\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.sortQuery = function (sort) {\n // _sort default to true but otherwise can be a function or boolean\n this._sort = typeof sort === 'undefined' ? true : sort;\n return this;\n};\n\n/**\n * Compose querystring to append to req.url\n *\n * @api private\n */\nRequestBase.prototype._finalizeQueryString = function () {\n const query = this._query.join('&');\n if (query) {\n this.url += (this.url.includes('?') ? '&' : '?') + query;\n }\n this._query.length = 0; // Makes the call idempotent\n\n if (this._sort) {\n const index = this.url.indexOf('?');\n if (index >= 0) {\n const queryArray = this.url.slice(index + 1).split('&');\n if (typeof this._sort === 'function') {\n queryArray.sort(this._sort);\n } else {\n queryArray.sort();\n }\n this.url = this.url.slice(0, index) + '?' + queryArray.join('&');\n }\n }\n};\n\n// For backwards compat only\nRequestBase.prototype._appendQueryString = () => {\n console.warn('Unsupported');\n};\n\n/**\n * Invoke callback with timeout error.\n *\n * @api private\n */\n\nRequestBase.prototype._timeoutError = function (reason, timeout, errno) {\n if (this._aborted) {\n return;\n }\n const error = new Error(`${reason + timeout}ms exceeded`);\n error.timeout = timeout;\n error.code = 'ECONNABORTED';\n error.errno = errno;\n this.timedout = true;\n this.timedoutError = error;\n this.abort();\n this.callback(error);\n};\nRequestBase.prototype._setTimeouts = function () {\n const self = this;\n\n // deadline\n if (this._timeout && !this._timer) {\n this._timer = setTimeout(() => {\n self._timeoutError('Timeout of ', self._timeout, 'ETIME');\n }, this._timeout);\n }\n\n // response timeout\n if (this._responseTimeout && !this._responseTimeoutTimer) {\n this._responseTimeoutTimer = setTimeout(() => {\n self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT');\n }, this._responseTimeout);\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc09iamVjdCIsImhhc093biIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVxdWVzdEJhc2UiLCJwcm90b3R5cGUiLCJjbGVhclRpbWVvdXQiLCJfdGltZXIiLCJfcmVzcG9uc2VUaW1lb3V0VGltZXIiLCJfdXBsb2FkVGltZW91dFRpbWVyIiwicGFyc2UiLCJmbiIsIl9wYXJzZXIiLCJyZXNwb25zZVR5cGUiLCJ2YWx1ZSIsIl9yZXNwb25zZVR5cGUiLCJzZXJpYWxpemUiLCJfc2VyaWFsaXplciIsInRpbWVvdXQiLCJvcHRpb25zIiwiX3RpbWVvdXQiLCJfcmVzcG9uc2VUaW1lb3V0IiwiX3VwbG9hZFRpbWVvdXQiLCJvcHRpb24iLCJkZWFkbGluZSIsInJlc3BvbnNlIiwidXBsb2FkIiwiY29uc29sZSIsIndhcm4iLCJyZXRyeSIsImNvdW50IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiX21heFJldHJpZXMiLCJfcmV0cmllcyIsIl9yZXRyeUNhbGxiYWNrIiwiRVJST1JfQ09ERVMiLCJTZXQiLCJTVEFUVVNfQ09ERVMiLCJfc2hvdWxkUmV0cnkiLCJlcnJvciIsInJlcyIsIm92ZXJyaWRlIiwiZXJyIiwic3RhdHVzIiwiaGFzIiwiY29kZSIsImNyb3NzRG9tYWluIiwiX3JldHJ5IiwicmVxIiwicmVxdWVzdCIsIl9hYm9ydGVkIiwidGltZWRvdXQiLCJ0aW1lZG91dEVycm9yIiwiX2VuZCIsInRoZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwiX2Z1bGxmaWxsZWRQcm9taXNlIiwic2VsZiIsIl9lbmRDYWxsZWQiLCJQcm9taXNlIiwib24iLCJFcnJvciIsIm1ldGhvZCIsInVybCIsImVuZCIsImNhdGNoIiwiY2FsbGJhY2siLCJ1bmRlZmluZWQiLCJ1c2UiLCJvayIsIl9va0NhbGxiYWNrIiwiX2lzUmVzcG9uc2VPSyIsImdldCIsImZpZWxkIiwiX2hlYWRlciIsInRvTG93ZXJDYXNlIiwiZ2V0SGVhZGVyIiwic2V0Iiwia2V5IiwiaGVhZGVyIiwidW5zZXQiLCJuYW1lIiwiX2RhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwiU3RyaW5nIiwiX2dldEZvcm1EYXRhIiwiYXBwZW5kIiwiYWJvcnQiLCJ4aHIiLCJlbWl0IiwiX2F1dGgiLCJ1c2VyIiwicGFzcyIsImJhc2U2NEVuY29kZXIiLCJ0eXBlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIndpdGhDcmVkZW50aWFscyIsIl93aXRoQ3JlZGVudGlhbHMiLCJyZWRpcmVjdHMiLCJuIiwiX21heFJlZGlyZWN0cyIsIm1heFJlc3BvbnNlU2l6ZSIsIlR5cGVFcnJvciIsIl9tYXhSZXNwb25zZVNpemUiLCJ0b0pTT04iLCJkYXRhIiwiaGVhZGVycyIsInNlbmQiLCJpc09iamVjdF8iLCJfZm9ybURhdGEiLCJfaXNIb3N0IiwidHJpbSIsInNvcnRRdWVyeSIsInNvcnQiLCJfc29ydCIsIl9maW5hbGl6ZVF1ZXJ5U3RyaW5nIiwicXVlcnkiLCJfcXVlcnkiLCJqb2luIiwiaW5jbHVkZXMiLCJpbmRleCIsImluZGV4T2YiLCJxdWVyeUFycmF5Iiwic2xpY2UiLCJzcGxpdCIsIl9hcHBlbmRRdWVyeVN0cmluZyIsIl90aW1lb3V0RXJyb3IiLCJyZWFzb24iLCJlcnJubyIsIl9zZXRUaW1lb3V0cyIsInNldFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi9zcmMvcmVxdWVzdC1iYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIG9mIG1peGVkLWluIGZ1bmN0aW9ucyBzaGFyZWQgYmV0d2VlbiBub2RlIGFuZCBjbGllbnQgY29kZVxuICovXG5jb25zdCB7IGlzT2JqZWN0LCBoYXNPd24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RCYXNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlcXVlc3RCYXNlYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3RCYXNlKCkge31cblxuLyoqXG4gKiBDbGVhciBwcmV2aW91cyB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICBjbGVhclRpbWVvdXQodGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpO1xuICBjbGVhclRpbWVvdXQodGhpcy5fdXBsb2FkVGltZW91dFRpbWVyKTtcbiAgZGVsZXRlIHRoaXMuX3RpbWVyO1xuICBkZWxldGUgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXI7XG4gIGRlbGV0ZSB0aGlzLl91cGxvYWRUaW1lb3V0VGltZXI7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBPdmVycmlkZSBkZWZhdWx0IHJlc3BvbnNlIGJvZHkgcGFyc2VyXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGluY29taW5nIGRhdGEgaW50byByZXF1ZXN0LmJvZHlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdGhpcy5fcGFyc2VyID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgZm9ybWF0IG9mIGJpbmFyeSByZXNwb25zZSBib2R5LlxuICogSW4gYnJvd3NlciB2YWxpZCBmb3JtYXRzIGFyZSAnYmxvYicgYW5kICdhcnJheWJ1ZmZlcicsXG4gKiB3aGljaCByZXR1cm4gQmxvYiBhbmQgQXJyYXlCdWZmZXIsIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBJbiBOb2RlIGFsbCB2YWx1ZXMgcmVzdWx0IGluIEJ1ZmZlci5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5yZXNwb25zZVR5cGUoJ2Jsb2InKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucmVzcG9uc2VUeXBlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHRoaXMuX3Jlc3BvbnNlVHlwZSA9IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogT3ZlcnJpZGUgZGVmYXVsdCByZXF1ZXN0IGJvZHkgc2VyaWFsaXplclxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBkYXRhIHNldCB2aWEgLnNlbmQgb3IgLmF0dGFjaCBpbnRvIHBheWxvYWQgdG8gc2VuZFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdGhpcy5fc2VyaWFsaXplciA9IGZuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRpbWVvdXRzLlxuICpcbiAqIC0gcmVzcG9uc2UgdGltZW91dCBpcyB0aW1lIGJldHdlZW4gc2VuZGluZyByZXF1ZXN0IGFuZCByZWNlaXZpbmcgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlLiBJbmNsdWRlcyBETlMgYW5kIGNvbm5lY3Rpb24gdGltZS5cbiAqIC0gZGVhZGxpbmUgaXMgdGhlIHRpbWUgZnJvbSBzdGFydCBvZiB0aGUgcmVxdWVzdCB0byByZWNlaXZpbmcgcmVzcG9uc2UgYm9keSBpbiBmdWxsLiBJZiB0aGUgZGVhZGxpbmUgaXMgdG9vIHNob3J0IGxhcmdlIGZpbGVzIG1heSBub3QgbG9hZCBhdCBhbGwgb24gc2xvdyBjb25uZWN0aW9ucy5cbiAqIC0gdXBsb2FkIGlzIHRoZSB0aW1lICBzaW5jZSBsYXN0IGJpdCBvZiBkYXRhIHdhcyBzZW50IG9yIHJlY2VpdmVkLiBUaGlzIHRpbWVvdXQgd29ya3Mgb25seSBpZiBkZWFkbGluZSB0aW1lb3V0IGlzIG9mZlxuICpcbiAqIFZhbHVlIG9mIDAgb3IgZmFsc2UgbWVhbnMgbm8gdGltZW91dC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcnxPYmplY3R9IG1zIG9yIHtyZXNwb25zZSwgZGVhZGxpbmV9XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnM7XG4gICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0ID0gMDtcbiAgICB0aGlzLl91cGxvYWRUaW1lb3V0ID0gMDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBpZiAoaGFzT3duKG9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2RlYWRsaW5lJzpcbiAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gb3B0aW9ucy5kZWFkbGluZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVzcG9uc2UnOlxuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlVGltZW91dCA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgICAgdGhpcy5fdXBsb2FkVGltZW91dCA9IG9wdGlvbnMudXBsb2FkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biB0aW1lb3V0IG9wdGlvbicsIG9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgb24gZXJyb3IuXG4gKlxuICogRmFpbGVkIHJlcXVlc3RzIHdpbGwgYmUgcmV0cmllZCAnY291bnQnIHRpbWVzIGlmIHRpbWVvdXQgb3IgZXJyLmNvZGUgPj0gNTAwLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZXRyeSA9IGZ1bmN0aW9uIChjb3VudCwgZm4pIHtcbiAgLy8gRGVmYXVsdCB0byAxIGlmIG5vIGNvdW50IHBhc3NlZCBvciB0cnVlXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IGNvdW50ID09PSB0cnVlKSBjb3VudCA9IDE7XG4gIGlmIChjb3VudCA8PSAwKSBjb3VudCA9IDA7XG4gIHRoaXMuX21heFJldHJpZXMgPSBjb3VudDtcbiAgdGhpcy5fcmV0cmllcyA9IDA7XG4gIHRoaXMuX3JldHJ5Q2FsbGJhY2sgPSBmbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gTk9URTogd2UgZG8gbm90IGluY2x1ZGUgRVNPQ0tFVFRJTUVET1VUIGJlY2F1c2UgdGhhdCBpcyBmcm9tIGByZXF1ZXN0YCBwYWNrYWdlXG4vLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nb3QvcHVsbC81Mzc+XG4vL1xuLy8gTk9URTogd2UgZG8gbm90IGluY2x1ZGUgRUFERFJJTkZPIGJlY2F1c2UgaXQgd2FzIHJlbW92ZWQgZnJvbSBsaWJ1diBpbiAyMDE0XG4vLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L2NvbW1pdC8wMmUxZWJkNDBiODA3YmU1YWY0NjM0M2VhODczMzMxYjJlZTRlOWMxPlxuLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1ZXN0L3JlcXVlc3Qvc2VhcmNoP3E9RVNPQ0tFVFRJTUVET1VUJnVuc2NvcGVkX3E9RVNPQ0tFVFRJTUVET1VUPlxuLy9cbi8vXG4vLyBUT0RPOiBleHBvc2UgdGhlc2UgYXMgY29uZmlndXJhYmxlIGRlZmF1bHRzXG4vL1xuY29uc3QgRVJST1JfQ09ERVMgPSBuZXcgU2V0KFtcbiAgJ0VUSU1FRE9VVCcsXG4gICdFQ09OTlJFU0VUJyxcbiAgJ0VBRERSSU5VU0UnLFxuICAnRUNPTk5SRUZVU0VEJyxcbiAgJ0VQSVBFJyxcbiAgJ0VOT1RGT1VORCcsXG4gICdFTkVUVU5SRUFDSCcsXG4gICdFQUlfQUdBSU4nXG5dKTtcblxuY29uc3QgU1RBVFVTX0NPREVTID0gbmV3IFNldChbXG4gIDQwOCwgNDEzLCA0MjksIDUwMCwgNTAyLCA1MDMsIDUwNCwgNTIxLCA1MjIsIDUyNFxuXSk7XG5cbi8vIFRPRE86IHdlIHdvdWxkIG5lZWQgdG8gbWFrZSB0aGlzIGVhc2lseSBjb25maWd1cmFibGUgYmVmb3JlIGFkZGluZyBpdCBpbiAoZS5nLiBzb21lIG1pZ2h0IHdhbnQgdG8gYWRkIFBPU1QpXG4vLyBjb25zdCBNRVRIT0RTID0gbmV3IFNldChbJ0dFVCcsICdQVVQnLCAnSEVBRCcsICdERUxFVEUnLCAnT1BUSU9OUycsICdUUkFDRSddKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSByZXF1ZXN0IHNob3VsZCBiZSByZXRyaWVkLlxuICogKEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ290I3JldHJ5KVxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyciBhbiBlcnJvclxuICogQHBhcmFtIHtSZXNwb25zZX0gW3Jlc10gcmVzcG9uc2VcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpZiBzZWdtZW50IHNob3VsZCBiZSByZXRyaWVkXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2hvdWxkUmV0cnkgPSBmdW5jdGlvbiAoZXJyb3IsIHJlcykge1xuICBpZiAoIXRoaXMuX21heFJldHJpZXMgfHwgdGhpcy5fcmV0cmllcysrID49IHRoaXMuX21heFJldHJpZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fcmV0cnlDYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuX3JldHJ5Q2FsbGJhY2soZXJyb3IsIHJlcyk7XG4gICAgICBpZiAob3ZlcnJpZGUgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKG92ZXJyaWRlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gdW5kZWZpbmVkIGZhbGxzIGJhY2sgdG8gZGVmYXVsdHNcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiB3ZSB3b3VsZCBuZWVkIHRvIG1ha2UgdGhpcyBlYXNpbHkgY29uZmlndXJhYmxlIGJlZm9yZSBhZGRpbmcgaXQgaW4gKGUuZy4gc29tZSBtaWdodCB3YW50IHRvIGFkZCBQT1NUKVxuICAvKlxuICBpZiAoXG4gICAgdGhpcy5yZXEgJiZcbiAgICB0aGlzLnJlcS5tZXRob2QgJiZcbiAgICAhTUVUSE9EUy5oYXModGhpcy5yZXEubWV0aG9kLnRvVXBwZXJDYXNlKCkpXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gICovXG4gIGlmIChyZXMgJiYgcmVzLnN0YXR1cyAmJiBTVEFUVVNfQ09ERVMuaGFzKHJlcy5zdGF0dXMpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgJiYgRVJST1JfQ09ERVMuaGFzKGVycm9yLmNvZGUpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTdXBlcmFnZW50IHRpbWVvdXRcbiAgICBpZiAoZXJyb3IudGltZW91dCAmJiBlcnJvci5jb2RlID09PSAnRUNPTk5BQk9SVEVEJykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGVycm9yLmNyb3NzRG9tYWluKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0cnkgcmVxdWVzdFxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9yZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcblxuICAvLyBub2RlXG4gIGlmICh0aGlzLnJlcSkge1xuICAgIHRoaXMucmVxID0gbnVsbDtcbiAgICB0aGlzLnJlcSA9IHRoaXMucmVxdWVzdCgpO1xuICB9XG5cbiAgdGhpcy5fYWJvcnRlZCA9IGZhbHNlO1xuICB0aGlzLnRpbWVkb3V0ID0gZmFsc2U7XG4gIHRoaXMudGltZWRvdXRFcnJvciA9IG51bGw7XG5cbiAgcmV0dXJuIHRoaXMuX2VuZCgpO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIHN1cHBvcnRcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVqZWN0XVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgaWYgKCF0aGlzLl9mdWxsZmlsbGVkUHJvbWlzZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dhcm5pbmc6IHN1cGVyYWdlbnQgcmVxdWVzdCB3YXMgc2VudCB0d2ljZSwgYmVjYXVzZSBib3RoIC5lbmQoKSBhbmQgLnRoZW4oKSB3ZXJlIGNhbGxlZC4gTmV2ZXIgY2FsbCAuZW5kKCkgaWYgeW91IHVzZSBwcm9taXNlcydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZnVsbGZpbGxlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZWxmLm9uKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21heFJldHJpZXMgJiYgdGhpcy5fbWF4UmV0cmllcyA+IHRoaXMuX3JldHJpZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aW1lZG91dCAmJiB0aGlzLnRpbWVkb3V0RXJyb3IpIHtcbiAgICAgICAgICByZWplY3QodGhpcy50aW1lZG91dEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignQWJvcnRlZCcpO1xuICAgICAgICBlcnJvci5jb2RlID0gJ0FCT1JURUQnO1xuICAgICAgICBlcnJvci5zdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgICAgICAgZXJyb3IubWV0aG9kID0gdGhpcy5tZXRob2Q7XG4gICAgICAgIGVycm9yLnVybCA9IHRoaXMudXJsO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBzZWxmLmVuZCgoZXJyb3IsIHJlcykgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHJlamVjdChlcnJvcik7XG4gICAgICAgIGVsc2UgcmVzb2x2ZShyZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZFByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBjYWxsYmFjayk7XG59O1xuXG4vKipcbiAqIEFsbG93IGZvciBleHRlbnNpb25cbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIGZuKHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5vayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxiYWNrIHJlcXVpcmVkJyk7XG4gIHRoaXMuX29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2lzUmVzcG9uc2VPSyA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgaWYgKCFyZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fb2tDYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLl9va0NhbGxiYWNrKHJlcyk7XG4gIH1cblxuICByZXR1cm4gcmVzLnN0YXR1cyA+PSAyMDAgJiYgcmVzLnN0YXR1cyA8IDMwMDtcbn07XG5cbi8qKlxuICogR2V0IHJlcXVlc3QgaGVhZGVyIGBmaWVsZGAuXG4gKiBDYXNlLWluc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIHJldHVybiB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV07XG59O1xuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBgZmllbGRgIHZhbHVlLlxuICogVGhpcyBpcyBhIGRlcHJlY2F0ZWQgaW50ZXJuYWwgQVBJLiBVc2UgYC5nZXQoZmllbGQpYCBpbnN0ZWFkLlxuICpcbiAqIChnZXRIZWFkZXIgaXMgbm8gbG9uZ2VyIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgc3VwZXJhZ2VudCBjb2RlIGJhc2UpXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqIEBkZXByZWNhdGVkXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmdldEhlYWRlciA9IFJlcXVlc3RCYXNlLnByb3RvdHlwZS5nZXQ7XG5cbi8qKlxuICogU2V0IGhlYWRlciBgZmllbGRgIHRvIGB2YWxgLCBvciBtdWx0aXBsZSBmaWVsZHMgd2l0aCBvbmUgb2JqZWN0LlxuICogQ2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuc2V0KCdYLUFQSS1LZXknLCAnZm9vYmFyJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywgJ1gtQVBJLUtleSc6ICdmb29iYXInIH0pXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gIGlmIChpc09iamVjdChmaWVsZCkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZCkge1xuICAgICAgaWYgKGhhc093bihmaWVsZCwga2V5KSkgdGhpcy5zZXQoa2V5LCBmaWVsZFtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB0aGlzLmhlYWRlcltmaWVsZF0gPSB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBoZWFkZXIgYGZpZWxkYC5cbiAqIENhc2UtaW5zZW5zaXRpdmUuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC51bnNldCgnVXNlci1BZ2VudCcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkIGZpZWxkIG5hbWVcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLnVuc2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIGRlbGV0ZSB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gIGRlbGV0ZSB0aGlzLmhlYWRlcltmaWVsZF07XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSB0aGUgZmllbGQgYG5hbWVgIGFuZCBgdmFsYCwgb3IgbXVsdGlwbGUgZmllbGRzIHdpdGggb25lIG9iamVjdFxuICogZm9yIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHJlcXVlc3QgYm9kaWVzLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKCdmb28nLCAnYmFyJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKHsgZm9vOiAnYmFyJywgYmF6OiAncXV4JyB9KVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gbmFtZSBuYW1lIG9mIGZpZWxkXG4gKiBAcGFyYW0ge1N0cmluZ3xCbG9ifEZpbGV8QnVmZmVyfGZzLlJlYWRTdHJlYW19IHZhbCB2YWx1ZSBvZiBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMgZXh0cmEgb3B0aW9ucywgZS5nLiAnYmxvYidcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLmZpZWxkID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIG5hbWUgc2hvdWxkIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvYmplY3QuXG4gIGlmIChuYW1lID09PSBudWxsIHx8IHVuZGVmaW5lZCA9PT0gbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignLmZpZWxkKG5hbWUsIHZhbCkgbmFtZSBjYW4gbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodGhpcy5fZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiLmZpZWxkKCkgY2FuJ3QgYmUgdXNlZCBpZiAuc2VuZCgpIGlzIHVzZWQuIFBsZWFzZSB1c2Ugb25seSAuc2VuZCgpIG9yIG9ubHkgLmZpZWxkKCkgJiAuYXR0YWNoKClcIlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBuYW1lKSB7XG4gICAgICBpZiAoaGFzT3duKG5hbWUsIGtleSkpIHRoaXMuZmllbGQoa2V5LCBuYW1lW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCBpIGluIHZhbHVlKSB7XG4gICAgICBpZiAoaGFzT3duKHZhbHVlLCBpKSkgdGhpcy5maWVsZChuYW1lLCB2YWx1ZVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB2YWwgc2hvdWxkIGJlIGRlZmluZWQgbm93XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB1bmRlZmluZWQgPT09IHZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCcuZmllbGQobmFtZSwgdmFsKSB2YWwgY2FuIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLy8gZml4IGh0dHBzOi8vZ2l0aHViLmNvbS9sYWRqcy9zdXBlcmFnZW50L2lzc3Vlcy8xNjgwXG4gIGlmIChvcHRpb25zKSB0aGlzLl9nZXRGb3JtRGF0YSgpLmFwcGVuZChuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIGVsc2UgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQobmFtZSwgdmFsdWUpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBYm9ydCB0aGUgcmVxdWVzdCwgYW5kIGNsZWFyIHBvdGVudGlhbCB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Fib3J0ZWQgPSB0cnVlO1xuICBpZiAodGhpcy54aHIpIHRoaXMueGhyLmFib3J0KCk7IC8vIGJyb3dzZXJcbiAgaWYgKHRoaXMucmVxKSB7XG4gICAgdGhpcy5yZXEuYWJvcnQoKTsgLy8gbm9kZVxuICB9XG5cbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgdGhpcy5lbWl0KCdhYm9ydCcpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fYXV0aCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBvcHRpb25zLCBiYXNlNjRFbmNvZGVyKSB7XG4gIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgY2FzZSAnYmFzaWMnOlxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmFzaWMgJHtiYXNlNjRFbmNvZGVyKGAke3VzZXJ9OiR7cGFzc31gKX1gKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcjtcbiAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWFyZXInOiAvLyB1c2FnZSB3b3VsZCBiZSAuYXV0aChhY2Nlc3NUb2tlbiwgeyB0eXBlOiAnYmVhcmVyJyB9KVxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dXNlcn1gKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBFbmFibGUgdHJhbnNtaXNzaW9uIG9mIGNvb2tpZXMgd2l0aCB4LWRvbWFpbiByZXF1ZXN0cy5cbiAqXG4gKiBOb3RlIHRoYXQgZm9yIHRoaXMgdG8gd29yayB0aGUgb3JpZ2luIG11c3Qgbm90IGJlXG4gKiB1c2luZyBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiIHdpdGggYSB3aWxkY2FyZCxcbiAqIGFuZCBhbHNvIG11c3Qgc2V0IFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIlxuICogdG8gXCJ0cnVlXCIuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbj10cnVlXSAtIFNldCAnd2l0aENyZWRlbnRpYWxzJyBzdGF0ZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS53aXRoQ3JlZGVudGlhbHMgPSBmdW5jdGlvbiAob24pIHtcbiAgLy8gVGhpcyBpcyBicm93c2VyLW9ubHkgZnVuY3Rpb25hbGl0eS4gTm9kZSBzaWRlIGlzIG5vLW9wLlxuICBpZiAob24gPT09IHVuZGVmaW5lZCkgb24gPSB0cnVlO1xuICB0aGlzLl93aXRoQ3JlZGVudGlhbHMgPSBvbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF4IHJlZGlyZWN0cyB0byBgbmAuIERvZXMgbm90aGluZyBpbiBicm93c2VyIFhIUiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gblxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZWRpcmVjdHMgPSBmdW5jdGlvbiAobikge1xuICB0aGlzLl9tYXhSZWRpcmVjdHMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTWF4aW11bSBzaXplIG9mIGJ1ZmZlcmVkIHJlc3BvbnNlIGJvZHksIGluIGJ5dGVzLiBDb3VudHMgdW5jb21wcmVzc2VkIHNpemUuXG4gKiBEZWZhdWx0IDIwME1CLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBuIG51bWJlciBvZiBieXRlc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5tYXhSZXNwb25zZVNpemUgPSBmdW5jdGlvbiAobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICB9XG5cbiAgdGhpcy5fbWF4UmVzcG9uc2VTaXplID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgdG8gYSBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdCAobm90IEpTT04gc3RyaW5nKSBvZiBzY2FsYXIgcHJvcGVydGllcy5cbiAqIE5vdGUgYXMgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQgdG8gcmV0dXJuIGEgdXNlZnVsIG5vbi10aGlzIHZhbHVlLFxuICogaXQgY2Fubm90IGJlIGNoYWluZWQuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkZXNjcmliaW5nIG1ldGhvZCwgdXJsLCBhbmQgZGF0YSBvZiB0aGlzIHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgIHVybDogdGhpcy51cmwsXG4gICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogU2VuZCBgZGF0YWAgYXMgdGhlIHJlcXVlc3QgYm9keSwgZGVmYXVsdGluZyB0aGUgYC50eXBlKClgIHRvIFwianNvblwiIHdoZW5cbiAqIGFuIG9iamVjdCBpcyBnaXZlbi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgICAvLyBtYW51YWwganNvblxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdqc29uJylcbiAqICAgICAgICAgLnNlbmQoJ3tcIm5hbWVcIjpcInRqXCJ9JylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBhdXRvIGpzb25cbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBtYW51YWwgeC13d3ctZm9ybS11cmxlbmNvZGVkXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2Zvcm0nKVxuICogICAgICAgICAuc2VuZCgnbmFtZT10aicpXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gYXV0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnZm9ybScpXG4gKiAgICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGRlZmF1bHRzIHRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCgnbmFtZT10b2JpJylcbiAqICAgICAgICAuc2VuZCgnc3BlY2llcz1mZXJyZXQnKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBkYXRhXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgaXNPYmplY3RfID0gaXNPYmplY3QoZGF0YSk7XG4gIGxldCB0eXBlID0gdGhpcy5faGVhZGVyWydjb250ZW50LXR5cGUnXTtcblxuICBpZiAodGhpcy5fZm9ybURhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIi5zZW5kKCkgY2FuJ3QgYmUgdXNlZCBpZiAuYXR0YWNoKCkgb3IgLmZpZWxkKCkgaXMgdXNlZC4gUGxlYXNlIHVzZSBvbmx5IC5zZW5kKCkgb3Igb25seSAuZmllbGQoKSAmIC5hdHRhY2goKVwiXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc09iamVjdF8gJiYgIXRoaXMuX2RhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzSG9zdChkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChkYXRhICYmIHRoaXMuX2RhdGEgJiYgdGhpcy5faXNIb3N0KHRoaXMuX2RhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgbWVyZ2UgdGhlc2Ugc2VuZCBjYWxsc1wiKTtcbiAgfVxuXG4gIC8vIG1lcmdlXG4gIGlmIChpc09iamVjdF8gJiYgaXNPYmplY3QodGhpcy5fZGF0YSkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFba2V5XSA9PSAnYmlnaW50JyAmJiAhZGF0YVtrZXldLnRvSlNPTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2VyaWFsaXplIEJpZ0ludCB2YWx1ZSB0byBqc29uJyk7XG4gICAgICBpZiAoaGFzT3duKGRhdGEsIGtleSkpIHRoaXMuX2RhdGFba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdiaWdpbnQnKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2VuZCB2YWx1ZSBvZiB0eXBlIEJpZ0ludFwiKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZGVmYXVsdCB0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAgICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnZm9ybScpO1xuICAgIHR5cGUgPSB0aGlzLl9oZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICAgIGlmICh0eXBlKSB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhID8gYCR7dGhpcy5fZGF0YX0mJHtkYXRhfWAgOiBkYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gKHRoaXMuX2RhdGEgfHwgJycpICsgZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0XyB8fCB0aGlzLl9pc0hvc3QoZGF0YSkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdG8ganNvblxuICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnanNvbicpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU29ydCBgcXVlcnlzdHJpbmdgIGJ5IHRoZSBzb3J0IGZ1bmN0aW9uXG4gKlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgIC8vIGRlZmF1bHQgb3JkZXJcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KClcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBjdXN0b21pemVkIHNvcnQgZnVuY3Rpb25cbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KGZ1bmN0aW9uKGEsIGIpe1xuICogICAgICAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICogICAgICAgICB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzb3J0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnNvcnRRdWVyeSA9IGZ1bmN0aW9uIChzb3J0KSB7XG4gIC8vIF9zb3J0IGRlZmF1bHQgdG8gdHJ1ZSBidXQgb3RoZXJ3aXNlIGNhbiBiZSBhIGZ1bmN0aW9uIG9yIGJvb2xlYW5cbiAgdGhpcy5fc29ydCA9IHR5cGVvZiBzb3J0ID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBzb3J0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ29tcG9zZSBxdWVyeXN0cmluZyB0byBhcHBlbmQgdG8gcmVxLnVybFxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2ZpbmFsaXplUXVlcnlTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcXVlcnkuam9pbignJicpO1xuICBpZiAocXVlcnkpIHtcbiAgICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBxdWVyeTtcbiAgfVxuXG4gIHRoaXMuX3F1ZXJ5Lmxlbmd0aCA9IDA7IC8vIE1ha2VzIHRoZSBjYWxsIGlkZW1wb3RlbnRcblxuICBpZiAodGhpcy5fc29ydCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBxdWVyeUFycmF5ID0gdGhpcy51cmwuc2xpY2UoaW5kZXggKyAxKS5zcGxpdCgnJicpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCh0aGlzLl9zb3J0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnNsaWNlKDAsIGluZGV4KSArICc/JyArIHF1ZXJ5QXJyYXkuam9pbignJicpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRm9yIGJhY2t3YXJkcyBjb21wYXQgb25seVxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9hcHBlbmRRdWVyeVN0cmluZyA9ICgpID0+IHtcbiAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCcpO1xufTtcblxuLyoqXG4gKiBJbnZva2UgY2FsbGJhY2sgd2l0aCB0aW1lb3V0IGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fdGltZW91dEVycm9yID0gZnVuY3Rpb24gKHJlYXNvbiwgdGltZW91dCwgZXJybm8pIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgJHtyZWFzb24gKyB0aW1lb3V0fW1zIGV4Y2VlZGVkYCk7XG4gIGVycm9yLnRpbWVvdXQgPSB0aW1lb3V0O1xuICBlcnJvci5jb2RlID0gJ0VDT05OQUJPUlRFRCc7XG4gIGVycm9yLmVycm5vID0gZXJybm87XG4gIHRoaXMudGltZWRvdXQgPSB0cnVlO1xuICB0aGlzLnRpbWVkb3V0RXJyb3IgPSBlcnJvcjtcbiAgdGhpcy5hYm9ydCgpO1xuICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2V0VGltZW91dHMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIC8vIGRlYWRsaW5lXG4gIGlmICh0aGlzLl90aW1lb3V0ICYmICF0aGlzLl90aW1lcikge1xuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZWxmLl90aW1lb3V0RXJyb3IoJ1RpbWVvdXQgb2YgJywgc2VsZi5fdGltZW91dCwgJ0VUSU1FJyk7XG4gICAgfSwgdGhpcy5fdGltZW91dCk7XG4gIH1cblxuICAvLyByZXNwb25zZSB0aW1lb3V0XG4gIGlmICh0aGlzLl9yZXNwb25zZVRpbWVvdXQgJiYgIXRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKSB7XG4gICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGYuX3RpbWVvdXRFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIHRpbWVvdXQgb2YgJyxcbiAgICAgICAgc2VsZi5fcmVzcG9uc2VUaW1lb3V0LFxuICAgICAgICAnRVRJTUVET1VUJ1xuICAgICAgKTtcbiAgICB9LCB0aGlzLl9yZXNwb25zZVRpbWVvdXQpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBLE1BQU07RUFBRUEsUUFBUTtFQUFFQztBQUFPLENBQUMsR0FBR0MsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7QUFFL0M7QUFDQTtBQUNBOztBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBR0MsV0FBVzs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTQSxXQUFXQSxDQUFBLEVBQUcsQ0FBQzs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBQSxXQUFXLENBQUNDLFNBQVMsQ0FBQ0MsWUFBWSxHQUFHLFlBQVk7RUFDL0NBLFlBQVksQ0FBQyxJQUFJLENBQUNDLE1BQU0sQ0FBQztFQUN6QkQsWUFBWSxDQUFDLElBQUksQ0FBQ0UscUJBQXFCLENBQUM7RUFDeENGLFlBQVksQ0FBQyxJQUFJLENBQUNHLG1CQUFtQixDQUFDO0VBQ3RDLE9BQU8sSUFBSSxDQUFDRixNQUFNO0VBQ2xCLE9BQU8sSUFBSSxDQUFDQyxxQkFBcUI7RUFDakMsT0FBTyxJQUFJLENBQUNDLG1CQUFtQjtFQUMvQixPQUFPLElBQUk7QUFDYixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFMLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDSyxLQUFLLEdBQUcsVUFBVUMsRUFBRSxFQUFFO0VBQzFDLElBQUksQ0FBQ0MsT0FBTyxHQUFHRCxFQUFFO0VBQ2pCLE9BQU8sSUFBSTtBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQVAsV0FBVyxDQUFDQyxTQUFTLENBQUNRLFlBQVksR0FBRyxVQUFVQyxLQUFLLEVBQUU7RUFDcEQsSUFBSSxDQUFDQyxhQUFhLEdBQUdELEtBQUs7RUFDMUIsT0FBTyxJQUFJO0FBQ2IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBVixXQUFXLENBQUNDLFNBQVMsQ0FBQ1csU0FBUyxHQUFHLFVBQVVMLEVBQUUsRUFBRTtFQUM5QyxJQUFJLENBQUNNLFdBQVcsR0FBR04sRUFBRTtFQUNyQixPQUFPLElBQUk7QUFDYixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBUCxXQUFXLENBQUNDLFNBQVMsQ0FBQ2EsT0FBTyxHQUFHLFVBQVVDLE9BQU8sRUFBRTtFQUNqRCxJQUFJLENBQUNBLE9BQU8sSUFBSSxPQUFPQSxPQUFPLEtBQUssUUFBUSxFQUFFO0lBQzNDLElBQUksQ0FBQ0MsUUFBUSxHQUFHRCxPQUFPO0lBQ3ZCLElBQUksQ0FBQ0UsZ0JBQWdCLEdBQUcsQ0FBQztJQUN6QixJQUFJLENBQUNDLGNBQWMsR0FBRyxDQUFDO0lBQ3ZCLE9BQU8sSUFBSTtFQUNiO0VBRUEsS0FBSyxNQUFNQyxNQUFNLElBQUlKLE9BQU8sRUFBRTtJQUM1QixJQUFJbkIsTUFBTSxDQUFDbUIsT0FBTyxFQUFFSSxNQUFNLENBQUMsRUFBRTtNQUMzQixRQUFRQSxNQUFNO1FBQ1osS0FBSyxVQUFVO1VBQ2IsSUFBSSxDQUFDSCxRQUFRLEdBQUdELE9BQU8sQ0FBQ0ssUUFBUTtVQUNoQztRQUNGLEtBQUssVUFBVTtVQUNiLElBQUksQ0FBQ0gsZ0JBQWdCLEdBQUdGLE9BQU8sQ0FBQ00sUUFBUTtVQUN4QztRQUNGLEtBQUssUUFBUTtVQUNYLElBQUksQ0FBQ0gsY0FBYyxHQUFHSCxPQUFPLENBQUNPLE1BQU07VUFDcEM7UUFDRjtVQUNFQyxPQUFPLENBQUNDLElBQUksQ0FBQyx3QkFBd0IsRUFBRUwsTUFBTSxDQUFDO01BQ2xEO0lBQ0Y7RUFDRjtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFuQixXQUFXLENBQUNDLFNBQVMsQ0FBQ3dCLEtBQUssR0FBRyxVQUFVQyxLQUFLLEVBQUVuQixFQUFFLEVBQUU7RUFDakQ7RUFDQSxJQUFJb0IsU0FBUyxDQUFDQyxNQUFNLEtBQUssQ0FBQyxJQUFJRixLQUFLLEtBQUssSUFBSSxFQUFFQSxLQUFLLEdBQUcsQ0FBQztFQUN2RCxJQUFJQSxLQUFLLElBQUksQ0FBQyxFQUFFQSxLQUFLLEdBQUcsQ0FBQztFQUN6QixJQUFJLENBQUNHLFdBQVcsR0FBR0gsS0FBSztFQUN4QixJQUFJLENBQUNJLFFBQVEsR0FBRyxDQUFDO0VBQ2pCLElBQUksQ0FBQ0MsY0FBYyxHQUFHeEIsRUFBRTtFQUN4QixPQUFPLElBQUk7QUFDYixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNeUIsV0FBVyxHQUFHLElBQUlDLEdBQUcsQ0FBQyxDQUMxQixXQUFXLEVBQ1gsWUFBWSxFQUNaLFlBQVksRUFDWixjQUFjLEVBQ2QsT0FBTyxFQUNQLFdBQVcsRUFDWCxhQUFhLEVBQ2IsV0FBVyxDQUNaLENBQUM7QUFFRixNQUFNQyxZQUFZLEdBQUcsSUFBSUQsR0FBRyxDQUFDLENBQzNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FDakQsQ0FBQzs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQWpDLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDa0MsWUFBWSxHQUFHLFVBQVVDLEtBQUssRUFBRUMsR0FBRyxFQUFFO0VBQ3pELElBQUksQ0FBQyxJQUFJLENBQUNSLFdBQVcsSUFBSSxJQUFJLENBQUNDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQ0QsV0FBVyxFQUFFO0lBQzVELE9BQU8sS0FBSztFQUNkO0VBRUEsSUFBSSxJQUFJLENBQUNFLGNBQWMsRUFBRTtJQUN2QixJQUFJO01BQ0YsTUFBTU8sUUFBUSxHQUFHLElBQUksQ0FBQ1AsY0FBYyxDQUFDSyxLQUFLLEVBQUVDLEdBQUcsQ0FBQztNQUNoRCxJQUFJQyxRQUFRLEtBQUssSUFBSSxFQUFFLE9BQU8sSUFBSTtNQUNsQyxJQUFJQSxRQUFRLEtBQUssS0FBSyxFQUFFLE9BQU8sS0FBSztNQUNwQztJQUNGLENBQUMsQ0FBQyxPQUFPQyxHQUFHLEVBQUU7TUFDWmhCLE9BQU8sQ0FBQ2EsS0FBSyxDQUFDRyxHQUFHLENBQUM7SUFDcEI7RUFDRjs7RUFFQTtFQUNBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFJRixHQUFHLElBQUlBLEdBQUcsQ0FBQ0csTUFBTSxJQUFJTixZQUFZLENBQUNPLEdBQUcsQ0FBQ0osR0FBRyxDQUFDRyxNQUFNLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDbEUsSUFBSUosS0FBSyxFQUFFO0lBQ1QsSUFBSUEsS0FBSyxDQUFDTSxJQUFJLElBQUlWLFdBQVcsQ0FBQ1MsR0FBRyxDQUFDTCxLQUFLLENBQUNNLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSTtJQUMxRDtJQUNBLElBQUlOLEtBQUssQ0FBQ3RCLE9BQU8sSUFBSXNCLEtBQUssQ0FBQ00sSUFBSSxLQUFLLGNBQWMsRUFBRSxPQUFPLElBQUk7SUFDL0QsSUFBSU4sS0FBSyxDQUFDTyxXQUFXLEVBQUUsT0FBTyxJQUFJO0VBQ3BDO0VBRUEsT0FBTyxLQUFLO0FBQ2QsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEzQyxXQUFXLENBQUNDLFNBQVMsQ0FBQzJDLE1BQU0sR0FBRyxZQUFZO0VBQ3pDLElBQUksQ0FBQzFDLFlBQVksQ0FBQyxDQUFDOztFQUVuQjtFQUNBLElBQUksSUFBSSxDQUFDMkMsR0FBRyxFQUFFO0lBQ1osSUFBSSxDQUFDQSxHQUFHLEdBQUcsSUFBSTtJQUNmLElBQUksQ0FBQ0EsR0FBRyxHQUFHLElBQUksQ0FBQ0MsT0FBTyxDQUFDLENBQUM7RUFDM0I7RUFFQSxJQUFJLENBQUNDLFFBQVEsR0FBRyxLQUFLO0VBQ3JCLElBQUksQ0FBQ0MsUUFBUSxHQUFHLEtBQUs7RUFDckIsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSTtFQUV6QixPQUFPLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUM7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQWxELFdBQVcsQ0FBQ0MsU0FBUyxDQUFDa0QsSUFBSSxHQUFHLFVBQVVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFO0VBQ3RELElBQUksQ0FBQyxJQUFJLENBQUNDLGtCQUFrQixFQUFFO0lBQzVCLE1BQU1DLElBQUksR0FBRyxJQUFJO0lBQ2pCLElBQUksSUFBSSxDQUFDQyxVQUFVLEVBQUU7TUFDbkJqQyxPQUFPLENBQUNDLElBQUksQ0FDVixnSUFDRixDQUFDO0lBQ0g7SUFFQSxJQUFJLENBQUM4QixrQkFBa0IsR0FBRyxJQUFJRyxPQUFPLENBQUMsQ0FBQ0wsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDekRFLElBQUksQ0FBQ0csRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ3JCLElBQUksSUFBSSxDQUFDN0IsV0FBVyxJQUFJLElBQUksQ0FBQ0EsV0FBVyxHQUFHLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1VBQ3hEO1FBQ0Y7UUFFQSxJQUFJLElBQUksQ0FBQ2tCLFFBQVEsSUFBSSxJQUFJLENBQUNDLGFBQWEsRUFBRTtVQUN2Q0ksTUFBTSxDQUFDLElBQUksQ0FBQ0osYUFBYSxDQUFDO1VBQzFCO1FBQ0Y7UUFFQSxNQUFNYixLQUFLLEdBQUcsSUFBSXVCLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEN2QixLQUFLLENBQUNNLElBQUksR0FBRyxTQUFTO1FBQ3RCTixLQUFLLENBQUNJLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07UUFDMUJKLEtBQUssQ0FBQ3dCLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07UUFDMUJ4QixLQUFLLENBQUN5QixHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHO1FBQ3BCUixNQUFNLENBQUNqQixLQUFLLENBQUM7TUFDZixDQUFDLENBQUM7TUFDRm1CLElBQUksQ0FBQ08sR0FBRyxDQUFDLENBQUMxQixLQUFLLEVBQUVDLEdBQUcsS0FBSztRQUN2QixJQUFJRCxLQUFLLEVBQUVpQixNQUFNLENBQUNqQixLQUFLLENBQUMsQ0FBQyxLQUNwQmdCLE9BQU8sQ0FBQ2YsR0FBRyxDQUFDO01BQ25CLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBTyxJQUFJLENBQUNpQixrQkFBa0IsQ0FBQ0gsSUFBSSxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sQ0FBQztBQUN0RCxDQUFDO0FBRURyRCxXQUFXLENBQUNDLFNBQVMsQ0FBQzhELEtBQUssR0FBRyxVQUFVQyxRQUFRLEVBQUU7RUFDaEQsT0FBTyxJQUFJLENBQUNiLElBQUksQ0FBQ2MsU0FBUyxFQUFFRCxRQUFRLENBQUM7QUFDdkMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUFoRSxXQUFXLENBQUNDLFNBQVMsQ0FBQ2lFLEdBQUcsR0FBRyxVQUFVM0QsRUFBRSxFQUFFO0VBQ3hDQSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ1IsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQUVEUCxXQUFXLENBQUNDLFNBQVMsQ0FBQ2tFLEVBQUUsR0FBRyxVQUFVSCxRQUFRLEVBQUU7RUFDN0MsSUFBSSxPQUFPQSxRQUFRLEtBQUssVUFBVSxFQUFFLE1BQU0sSUFBSUwsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0VBQ3hFLElBQUksQ0FBQ1MsV0FBVyxHQUFHSixRQUFRO0VBQzNCLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRGhFLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDb0UsYUFBYSxHQUFHLFVBQVVoQyxHQUFHLEVBQUU7RUFDbkQsSUFBSSxDQUFDQSxHQUFHLEVBQUU7SUFDUixPQUFPLEtBQUs7RUFDZDtFQUVBLElBQUksSUFBSSxDQUFDK0IsV0FBVyxFQUFFO0lBQ3BCLE9BQU8sSUFBSSxDQUFDQSxXQUFXLENBQUMvQixHQUFHLENBQUM7RUFDOUI7RUFFQSxPQUFPQSxHQUFHLENBQUNHLE1BQU0sSUFBSSxHQUFHLElBQUlILEdBQUcsQ0FBQ0csTUFBTSxHQUFHLEdBQUc7QUFDOUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBeEMsV0FBVyxDQUFDQyxTQUFTLENBQUNxRSxHQUFHLEdBQUcsVUFBVUMsS0FBSyxFQUFFO0VBQzNDLE9BQU8sSUFBSSxDQUFDQyxPQUFPLENBQUNELEtBQUssQ0FBQ0UsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUF6RSxXQUFXLENBQUNDLFNBQVMsQ0FBQ3lFLFNBQVMsR0FBRzFFLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDcUUsR0FBRzs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXRFLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDMEUsR0FBRyxHQUFHLFVBQVVKLEtBQUssRUFBRTdELEtBQUssRUFBRTtFQUNsRCxJQUFJZixRQUFRLENBQUM0RSxLQUFLLENBQUMsRUFBRTtJQUNuQixLQUFLLE1BQU1LLEdBQUcsSUFBSUwsS0FBSyxFQUFFO01BQ3ZCLElBQUkzRSxNQUFNLENBQUMyRSxLQUFLLEVBQUVLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQ0QsR0FBRyxDQUFDQyxHQUFHLEVBQUVMLEtBQUssQ0FBQ0ssR0FBRyxDQUFDLENBQUM7SUFDbkQ7SUFFQSxPQUFPLElBQUk7RUFDYjtFQUVBLElBQUksQ0FBQ0osT0FBTyxDQUFDRCxLQUFLLENBQUNFLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRy9ELEtBQUs7RUFDekMsSUFBSSxDQUFDbUUsTUFBTSxDQUFDTixLQUFLLENBQUMsR0FBRzdELEtBQUs7RUFDMUIsT0FBTyxJQUFJO0FBQ2IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQVYsV0FBVyxDQUFDQyxTQUFTLENBQUM2RSxLQUFLLEdBQUcsVUFBVVAsS0FBSyxFQUFFO0VBQzdDLE9BQU8sSUFBSSxDQUFDQyxPQUFPLENBQUNELEtBQUssQ0FBQ0UsV0FBVyxDQUFDLENBQUMsQ0FBQztFQUN4QyxPQUFPLElBQUksQ0FBQ0ksTUFBTSxDQUFDTixLQUFLLENBQUM7RUFDekIsT0FBTyxJQUFJO0FBQ2IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0F2RSxXQUFXLENBQUNDLFNBQVMsQ0FBQ3NFLEtBQUssR0FBRyxVQUFVUSxJQUFJLEVBQUVyRSxLQUFLLEVBQUVLLE9BQU8sRUFBRTtFQUM1RDtFQUNBLElBQUlnRSxJQUFJLEtBQUssSUFBSSxJQUFJZCxTQUFTLEtBQUtjLElBQUksRUFBRTtJQUN2QyxNQUFNLElBQUlwQixLQUFLLENBQUMseUNBQXlDLENBQUM7RUFDNUQ7RUFFQSxJQUFJLElBQUksQ0FBQ3FCLEtBQUssRUFBRTtJQUNkLE1BQU0sSUFBSXJCLEtBQUssQ0FDYixpR0FDRixDQUFDO0VBQ0g7RUFFQSxJQUFJaEUsUUFBUSxDQUFDb0YsSUFBSSxDQUFDLEVBQUU7SUFDbEIsS0FBSyxNQUFNSCxHQUFHLElBQUlHLElBQUksRUFBRTtNQUN0QixJQUFJbkYsTUFBTSxDQUFDbUYsSUFBSSxFQUFFSCxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUNMLEtBQUssQ0FBQ0ssR0FBRyxFQUFFRyxJQUFJLENBQUNILEdBQUcsQ0FBQyxDQUFDO0lBQ25EO0lBRUEsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJSyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3hFLEtBQUssQ0FBQyxFQUFFO0lBQ3hCLEtBQUssTUFBTXlFLENBQUMsSUFBSXpFLEtBQUssRUFBRTtNQUNyQixJQUFJZCxNQUFNLENBQUNjLEtBQUssRUFBRXlFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ1osS0FBSyxDQUFDUSxJQUFJLEVBQUVyRSxLQUFLLENBQUN5RSxDQUFDLENBQUMsQ0FBQztJQUNsRDtJQUVBLE9BQU8sSUFBSTtFQUNiOztFQUVBO0VBQ0EsSUFBSXpFLEtBQUssS0FBSyxJQUFJLElBQUl1RCxTQUFTLEtBQUt2RCxLQUFLLEVBQUU7SUFDekMsTUFBTSxJQUFJaUQsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO0VBQzNEO0VBRUEsSUFBSSxPQUFPakQsS0FBSyxLQUFLLFNBQVMsRUFBRTtJQUM5QkEsS0FBSyxHQUFHMEUsTUFBTSxDQUFDMUUsS0FBSyxDQUFDO0VBQ3ZCOztFQUVBO0VBQ0EsSUFBSUssT0FBTyxFQUFFLElBQUksQ0FBQ3NFLFlBQVksQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FBQ1AsSUFBSSxFQUFFckUsS0FBSyxFQUFFSyxPQUFPLENBQUMsQ0FBQyxLQUN6RCxJQUFJLENBQUNzRSxZQUFZLENBQUMsQ0FBQyxDQUFDQyxNQUFNLENBQUNQLElBQUksRUFBRXJFLEtBQUssQ0FBQztFQUU1QyxPQUFPLElBQUk7QUFDYixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBVixXQUFXLENBQUNDLFNBQVMsQ0FBQ3NGLEtBQUssR0FBRyxZQUFZO0VBQ3hDLElBQUksSUFBSSxDQUFDeEMsUUFBUSxFQUFFO0lBQ2pCLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBSSxDQUFDQSxRQUFRLEdBQUcsSUFBSTtFQUNwQixJQUFJLElBQUksQ0FBQ3lDLEdBQUcsRUFBRSxJQUFJLENBQUNBLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDLElBQUksSUFBSSxDQUFDMUMsR0FBRyxFQUFFO0lBQ1osSUFBSSxDQUFDQSxHQUFHLENBQUMwQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEI7RUFFQSxJQUFJLENBQUNyRixZQUFZLENBQUMsQ0FBQztFQUNuQixJQUFJLENBQUN1RixJQUFJLENBQUMsT0FBTyxDQUFDO0VBQ2xCLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRHpGLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDeUYsS0FBSyxHQUFHLFVBQVVDLElBQUksRUFBRUMsSUFBSSxFQUFFN0UsT0FBTyxFQUFFOEUsYUFBYSxFQUFFO0VBQzFFLFFBQVE5RSxPQUFPLENBQUMrRSxJQUFJO0lBQ2xCLEtBQUssT0FBTztNQUNWLElBQUksQ0FBQ25CLEdBQUcsQ0FBQyxlQUFlLEVBQUUsU0FBU2tCLGFBQWEsQ0FBQyxHQUFHRixJQUFJLElBQUlDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztNQUN0RTtJQUVGLEtBQUssTUFBTTtNQUNULElBQUksQ0FBQ0csUUFBUSxHQUFHSixJQUFJO01BQ3BCLElBQUksQ0FBQ0ssUUFBUSxHQUFHSixJQUFJO01BQ3BCO0lBRUYsS0FBSyxRQUFRO01BQUU7TUFDYixJQUFJLENBQUNqQixHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVVnQixJQUFJLEVBQUUsQ0FBQztNQUMzQztJQUNGO01BQ0U7RUFDSjtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTNGLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDZ0csZUFBZSxHQUFHLFVBQVV2QyxFQUFFLEVBQUU7RUFDcEQ7RUFDQSxJQUFJQSxFQUFFLEtBQUtPLFNBQVMsRUFBRVAsRUFBRSxHQUFHLElBQUk7RUFDL0IsSUFBSSxDQUFDd0MsZ0JBQWdCLEdBQUd4QyxFQUFFO0VBQzFCLE9BQU8sSUFBSTtBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUExRCxXQUFXLENBQUNDLFNBQVMsQ0FBQ2tHLFNBQVMsR0FBRyxVQUFVQyxDQUFDLEVBQUU7RUFDN0MsSUFBSSxDQUFDQyxhQUFhLEdBQUdELENBQUM7RUFDdEIsT0FBTyxJQUFJO0FBQ2IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBcEcsV0FBVyxDQUFDQyxTQUFTLENBQUNxRyxlQUFlLEdBQUcsVUFBVUYsQ0FBQyxFQUFFO0VBQ25ELElBQUksT0FBT0EsQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUN6QixNQUFNLElBQUlHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztFQUN6QztFQUVBLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUdKLENBQUM7RUFDekIsT0FBTyxJQUFJO0FBQ2IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBcEcsV0FBVyxDQUFDQyxTQUFTLENBQUN3RyxNQUFNLEdBQUcsWUFBWTtFQUN6QyxPQUFPO0lBQ0w3QyxNQUFNLEVBQUUsSUFBSSxDQUFDQSxNQUFNO0lBQ25CQyxHQUFHLEVBQUUsSUFBSSxDQUFDQSxHQUFHO0lBQ2I2QyxJQUFJLEVBQUUsSUFBSSxDQUFDMUIsS0FBSztJQUNoQjJCLE9BQU8sRUFBRSxJQUFJLENBQUNuQztFQUNoQixDQUFDO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQXhFLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDMkcsSUFBSSxHQUFHLFVBQVVGLElBQUksRUFBRTtFQUMzQyxNQUFNRyxTQUFTLEdBQUdsSCxRQUFRLENBQUMrRyxJQUFJLENBQUM7RUFDaEMsSUFBSVosSUFBSSxHQUFHLElBQUksQ0FBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQUM7RUFFdkMsSUFBSSxJQUFJLENBQUNzQyxTQUFTLEVBQUU7SUFDbEIsTUFBTSxJQUFJbkQsS0FBSyxDQUNiLDhHQUNGLENBQUM7RUFDSDtFQUVBLElBQUlrRCxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUM3QixLQUFLLEVBQUU7SUFDNUIsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUN3QixJQUFJLENBQUMsRUFBRTtNQUN2QixJQUFJLENBQUMxQixLQUFLLEdBQUcsRUFBRTtJQUNqQixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQytCLE9BQU8sQ0FBQ0wsSUFBSSxDQUFDLEVBQUU7TUFDOUIsSUFBSSxDQUFDMUIsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqQjtFQUNGLENBQUMsTUFBTSxJQUFJMEIsSUFBSSxJQUFJLElBQUksQ0FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMrQixPQUFPLENBQUMsSUFBSSxDQUFDL0IsS0FBSyxDQUFDLEVBQUU7SUFDekQsTUFBTSxJQUFJckIsS0FBSyxDQUFDLDhCQUE4QixDQUFDO0VBQ2pEOztFQUVBO0VBQ0EsSUFBSWtELFNBQVMsSUFBSWxILFFBQVEsQ0FBQyxJQUFJLENBQUNxRixLQUFLLENBQUMsRUFBRTtJQUNyQyxLQUFLLE1BQU1KLEdBQUcsSUFBSThCLElBQUksRUFBRTtNQUN0QixJQUFJLE9BQU9BLElBQUksQ0FBQzlCLEdBQUcsQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDOEIsSUFBSSxDQUFDOUIsR0FBRyxDQUFDLENBQUM2QixNQUFNLEVBQ25ELE1BQU0sSUFBSTlDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztNQUMxRCxJQUFJL0QsTUFBTSxDQUFDOEcsSUFBSSxFQUFFOUIsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDSSxLQUFLLENBQUNKLEdBQUcsQ0FBQyxHQUFHOEIsSUFBSSxDQUFDOUIsR0FBRyxDQUFDO0lBQ3BEO0VBQ0YsQ0FBQyxNQUNJLElBQUksT0FBTzhCLElBQUksS0FBSyxRQUFRLEVBQUUsTUFBTSxJQUFJL0MsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsS0FDbEYsSUFBSSxPQUFPK0MsSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUNqQztJQUNBLElBQUksQ0FBQ1osSUFBSSxFQUFFLElBQUksQ0FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QkEsSUFBSSxHQUFHLElBQUksQ0FBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDbkMsSUFBSXNCLElBQUksRUFBRUEsSUFBSSxHQUFHQSxJQUFJLENBQUNyQixXQUFXLENBQUMsQ0FBQyxDQUFDdUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsSUFBSWxCLElBQUksS0FBSyxtQ0FBbUMsRUFBRTtNQUNoRCxJQUFJLENBQUNkLEtBQUssR0FBRyxJQUFJLENBQUNBLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxJQUFJMEIsSUFBSSxFQUFFLEdBQUdBLElBQUk7SUFDMUQsQ0FBQyxNQUFNO01BQ0wsSUFBSSxDQUFDMUIsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDQSxLQUFLLElBQUksRUFBRSxJQUFJMEIsSUFBSTtJQUN4QztFQUNGLENBQUMsTUFBTTtJQUNMLElBQUksQ0FBQzFCLEtBQUssR0FBRzBCLElBQUk7RUFDbkI7RUFFQSxJQUFJLENBQUNHLFNBQVMsSUFBSSxJQUFJLENBQUNFLE9BQU8sQ0FBQ0wsSUFBSSxDQUFDLEVBQUU7SUFDcEMsT0FBTyxJQUFJO0VBQ2I7O0VBRUE7RUFDQSxJQUFJLENBQUNaLElBQUksRUFBRSxJQUFJLENBQUNBLElBQUksQ0FBQyxNQUFNLENBQUM7RUFDNUIsT0FBTyxJQUFJO0FBQ2IsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE5RixXQUFXLENBQUNDLFNBQVMsQ0FBQ2dILFNBQVMsR0FBRyxVQUFVQyxJQUFJLEVBQUU7RUFDaEQ7RUFDQSxJQUFJLENBQUNDLEtBQUssR0FBRyxPQUFPRCxJQUFJLEtBQUssV0FBVyxHQUFHLElBQUksR0FBR0EsSUFBSTtFQUN0RCxPQUFPLElBQUk7QUFDYixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQWxILFdBQVcsQ0FBQ0MsU0FBUyxDQUFDbUgsb0JBQW9CLEdBQUcsWUFBWTtFQUN2RCxNQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDQyxNQUFNLENBQUNDLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDbkMsSUFBSUYsS0FBSyxFQUFFO0lBQ1QsSUFBSSxDQUFDeEQsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDQSxHQUFHLENBQUMyRCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSUgsS0FBSztFQUMxRDtFQUVBLElBQUksQ0FBQ0MsTUFBTSxDQUFDMUYsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOztFQUV4QixJQUFJLElBQUksQ0FBQ3VGLEtBQUssRUFBRTtJQUNkLE1BQU1NLEtBQUssR0FBRyxJQUFJLENBQUM1RCxHQUFHLENBQUM2RCxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ25DLElBQUlELEtBQUssSUFBSSxDQUFDLEVBQUU7TUFDZCxNQUFNRSxVQUFVLEdBQUcsSUFBSSxDQUFDOUQsR0FBRyxDQUFDK0QsS0FBSyxDQUFDSCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUNJLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDdkQsSUFBSSxPQUFPLElBQUksQ0FBQ1YsS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUNwQ1EsVUFBVSxDQUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDQyxLQUFLLENBQUM7TUFDN0IsQ0FBQyxNQUFNO1FBQ0xRLFVBQVUsQ0FBQ1QsSUFBSSxDQUFDLENBQUM7TUFDbkI7TUFFQSxJQUFJLENBQUNyRCxHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUMrRCxLQUFLLENBQUMsQ0FBQyxFQUFFSCxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUdFLFVBQVUsQ0FBQ0osSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsRTtFQUNGO0FBQ0YsQ0FBQzs7QUFFRDtBQUNBdkgsV0FBVyxDQUFDQyxTQUFTLENBQUM2SCxrQkFBa0IsR0FBRyxNQUFNO0VBQy9DdkcsT0FBTyxDQUFDQyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXhCLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDOEgsYUFBYSxHQUFHLFVBQVVDLE1BQU0sRUFBRWxILE9BQU8sRUFBRW1ILEtBQUssRUFBRTtFQUN0RSxJQUFJLElBQUksQ0FBQ2xGLFFBQVEsRUFBRTtJQUNqQjtFQUNGO0VBRUEsTUFBTVgsS0FBSyxHQUFHLElBQUl1QixLQUFLLENBQUMsR0FBR3FFLE1BQU0sR0FBR2xILE9BQU8sYUFBYSxDQUFDO0VBQ3pEc0IsS0FBSyxDQUFDdEIsT0FBTyxHQUFHQSxPQUFPO0VBQ3ZCc0IsS0FBSyxDQUFDTSxJQUFJLEdBQUcsY0FBYztFQUMzQk4sS0FBSyxDQUFDNkYsS0FBSyxHQUFHQSxLQUFLO0VBQ25CLElBQUksQ0FBQ2pGLFFBQVEsR0FBRyxJQUFJO0VBQ3BCLElBQUksQ0FBQ0MsYUFBYSxHQUFHYixLQUFLO0VBQzFCLElBQUksQ0FBQ21ELEtBQUssQ0FBQyxDQUFDO0VBQ1osSUFBSSxDQUFDdkIsUUFBUSxDQUFDNUIsS0FBSyxDQUFDO0FBQ3RCLENBQUM7QUFFRHBDLFdBQVcsQ0FBQ0MsU0FBUyxDQUFDaUksWUFBWSxHQUFHLFlBQVk7RUFDL0MsTUFBTTNFLElBQUksR0FBRyxJQUFJOztFQUVqQjtFQUNBLElBQUksSUFBSSxDQUFDdkMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDYixNQUFNLEVBQUU7SUFDakMsSUFBSSxDQUFDQSxNQUFNLEdBQUdnSSxVQUFVLENBQUMsTUFBTTtNQUM3QjVFLElBQUksQ0FBQ3dFLGFBQWEsQ0FBQyxhQUFhLEVBQUV4RSxJQUFJLENBQUN2QyxRQUFRLEVBQUUsT0FBTyxDQUFDO0lBQzNELENBQUMsRUFBRSxJQUFJLENBQUNBLFFBQVEsQ0FBQztFQUNuQjs7RUFFQTtFQUNBLElBQUksSUFBSSxDQUFDQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQ2IscUJBQXFCLEVBQUU7SUFDeEQsSUFBSSxDQUFDQSxxQkFBcUIsR0FBRytILFVBQVUsQ0FBQyxNQUFNO01BQzVDNUUsSUFBSSxDQUFDd0UsYUFBYSxDQUNoQixzQkFBc0IsRUFDdEJ4RSxJQUFJLENBQUN0QyxnQkFBZ0IsRUFDckIsV0FDRixDQUFDO0lBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQ0EsZ0JBQWdCLENBQUM7RUFDM0I7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\nconst http2 = require('http2');\nconst Stream = require('stream');\nconst net = require('net');\nconst tls = require('tls');\nconst {\n HTTP2_HEADER_PATH,\n HTTP2_HEADER_STATUS,\n HTTP2_HEADER_METHOD,\n HTTP2_HEADER_AUTHORITY,\n HTTP2_HEADER_HOST,\n HTTP2_HEADER_SET_COOKIE,\n NGHTTP2_CANCEL\n} = http2.constants;\nfunction setProtocol(protocol) {\n return {\n request(options) {\n return new Request(protocol, options);\n }\n };\n}\nfunction normalizeIpv6Host(host) {\n return net.isIP(host) === 6 ? `[${host}]` : host;\n}\nclass Request extends Stream {\n constructor(protocol, options) {\n super();\n const defaultPort = protocol === 'https:' ? 443 : 80;\n const defaultHost = 'localhost';\n const port = options.port || defaultPort;\n const host = options.host || defaultHost;\n delete options.port;\n delete options.host;\n this.method = options.method;\n this.path = options.path;\n this.protocol = protocol;\n this.host = host;\n delete options.method;\n delete options.path;\n const sessionOptions = {\n ...options\n };\n if (options.socketPath) {\n sessionOptions.socketPath = options.socketPath;\n sessionOptions.createConnection = this.createUnixConnection.bind(this);\n }\n this._headers = {};\n const normalizedHost = normalizeIpv6Host(host);\n const session = http2.connect(`${protocol}//${normalizedHost}:${port}`, sessionOptions);\n this.setHeader('host', `${normalizedHost}:${port}`);\n session.on('error', error => this.emit('error', error));\n this.session = session;\n }\n createUnixConnection(authority, options) {\n switch (this.protocol) {\n case 'http:':\n return net.connect(options.socketPath);\n case 'https:':\n options.ALPNProtocols = ['h2'];\n options.servername = this.host;\n options.allowHalfOpen = true;\n return tls.connect(options.socketPath, options);\n default:\n throw new Error('Unsupported protocol', this.protocol);\n }\n }\n setNoDelay(bool) {\n // We can not use setNoDelay with HTTP/2.\n // Node 10 limits http2session.socket methods to ones safe to use with HTTP/2.\n // See also https://nodejs.org/api/http2.html#http2_http2session_socket\n }\n getFrame() {\n if (this.frame) {\n return this.frame;\n }\n const method = {\n [HTTP2_HEADER_PATH]: this.path,\n [HTTP2_HEADER_METHOD]: this.method\n };\n let headers = this.mapToHttp2Header(this._headers);\n headers = Object.assign(headers, method);\n const frame = this.session.request(headers);\n frame.once('response', (headers, flags) => {\n headers = this.mapToHttpHeader(headers);\n frame.headers = headers;\n frame.statusCode = headers[HTTP2_HEADER_STATUS];\n frame.status = frame.statusCode;\n this.emit('response', frame);\n });\n this._headerSent = true;\n frame.once('drain', () => this.emit('drain'));\n frame.on('error', error => this.emit('error', error));\n frame.on('close', () => this.session.close());\n this.frame = frame;\n return frame;\n }\n mapToHttpHeader(headers) {\n const keys = Object.keys(headers);\n const http2Headers = {};\n for (let key of keys) {\n let value = headers[key];\n key = key.toLowerCase();\n switch (key) {\n case HTTP2_HEADER_SET_COOKIE:\n value = Array.isArray(value) ? value : [value];\n break;\n default:\n break;\n }\n http2Headers[key] = value;\n }\n return http2Headers;\n }\n mapToHttp2Header(headers) {\n const keys = Object.keys(headers);\n const http2Headers = {};\n for (let key of keys) {\n let value = headers[key];\n key = key.toLowerCase();\n switch (key) {\n case HTTP2_HEADER_HOST:\n key = HTTP2_HEADER_AUTHORITY;\n value = /^http:\\/\\/|^https:\\/\\//.test(value) ? new URL(value).host : value;\n break;\n default:\n break;\n }\n http2Headers[key] = value;\n }\n return http2Headers;\n }\n setHeader(name, value) {\n this._headers[name.toLowerCase()] = value;\n }\n getHeader(name) {\n return this._headers[name.toLowerCase()];\n }\n write(data, encoding) {\n const frame = this.getFrame();\n return frame.write(data, encoding);\n }\n pipe(stream, options) {\n const frame = this.getFrame();\n return frame.pipe(stream, options);\n }\n end(data) {\n const frame = this.getFrame();\n frame.end(data);\n }\n abort(data) {\n const frame = this.getFrame();\n frame.close(NGHTTP2_CANCEL);\n this.session.destroy();\n }\n}\nexports.setProtocol = setProtocol;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwMiIsInJlcXVpcmUiLCJTdHJlYW0iLCJuZXQiLCJ0bHMiLCJIVFRQMl9IRUFERVJfUEFUSCIsIkhUVFAyX0hFQURFUl9TVEFUVVMiLCJIVFRQMl9IRUFERVJfTUVUSE9EIiwiSFRUUDJfSEVBREVSX0FVVEhPUklUWSIsIkhUVFAyX0hFQURFUl9IT1NUIiwiSFRUUDJfSEVBREVSX1NFVF9DT09LSUUiLCJOR0hUVFAyX0NBTkNFTCIsImNvbnN0YW50cyIsInNldFByb3RvY29sIiwicHJvdG9jb2wiLCJyZXF1ZXN0Iiwib3B0aW9ucyIsIlJlcXVlc3QiLCJub3JtYWxpemVJcHY2SG9zdCIsImhvc3QiLCJpc0lQIiwiY29uc3RydWN0b3IiLCJkZWZhdWx0UG9ydCIsImRlZmF1bHRIb3N0IiwicG9ydCIsIm1ldGhvZCIsInBhdGgiLCJzZXNzaW9uT3B0aW9ucyIsInNvY2tldFBhdGgiLCJjcmVhdGVDb25uZWN0aW9uIiwiY3JlYXRlVW5peENvbm5lY3Rpb24iLCJiaW5kIiwiX2hlYWRlcnMiLCJub3JtYWxpemVkSG9zdCIsInNlc3Npb24iLCJjb25uZWN0Iiwic2V0SGVhZGVyIiwib24iLCJlcnJvciIsImVtaXQiLCJhdXRob3JpdHkiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsImFsbG93SGFsZk9wZW4iLCJFcnJvciIsInNldE5vRGVsYXkiLCJib29sIiwiZ2V0RnJhbWUiLCJmcmFtZSIsImhlYWRlcnMiLCJtYXBUb0h0dHAySGVhZGVyIiwiT2JqZWN0IiwiYXNzaWduIiwib25jZSIsImZsYWdzIiwibWFwVG9IdHRwSGVhZGVyIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsIl9oZWFkZXJTZW50IiwiY2xvc2UiLCJrZXlzIiwiaHR0cDJIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJ0b0xvd2VyQ2FzZSIsIkFycmF5IiwiaXNBcnJheSIsInRlc3QiLCJVUkwiLCJuYW1lIiwiZ2V0SGVhZGVyIiwid3JpdGUiLCJkYXRhIiwiZW5jb2RpbmciLCJwaXBlIiwic3RyZWFtIiwiZW5kIiwiYWJvcnQiLCJkZXN0cm95IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2h0dHAyd3JhcHBlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJyk7XG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xuY29uc3QgdGxzID0gcmVxdWlyZSgndGxzJyk7XG5cbmNvbnN0IHtcbiAgSFRUUDJfSEVBREVSX1BBVEgsXG4gIEhUVFAyX0hFQURFUl9TVEFUVVMsXG4gIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gIEhUVFAyX0hFQURFUl9IT1NULFxuICBIVFRQMl9IRUFERVJfU0VUX0NPT0tJRSxcbiAgTkdIVFRQMl9DQU5DRUxcbn0gPSBodHRwMi5jb25zdGFudHM7XG5cbmZ1bmN0aW9uIHNldFByb3RvY29sKHByb3RvY29sKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gbmV3IFJlcXVlc3QocHJvdG9jb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSXB2Nkhvc3QoaG9zdCkge1xuICByZXR1cm4gbmV0LmlzSVAoaG9zdCkgPT09IDYgPyBgWyR7aG9zdH1dYCA6IGhvc3Q7XG59XG5cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBTdHJlYW0ge1xuICBjb25zdHJ1Y3Rvcihwcm90b2NvbCwgb3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgZGVmYXVsdFBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICBjb25zdCBkZWZhdWx0SG9zdCA9ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgZGVmYXVsdFBvcnQ7XG4gICAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCBkZWZhdWx0SG9zdDtcblxuICAgIGRlbGV0ZSBvcHRpb25zLnBvcnQ7XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcblxuICAgIHRoaXMubWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gICAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoO1xuICAgIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuXG4gICAgZGVsZXRlIG9wdGlvbnMubWV0aG9kO1xuICAgIGRlbGV0ZSBvcHRpb25zLnBhdGg7XG5cbiAgICBjb25zdCBzZXNzaW9uT3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9O1xuICAgIGlmIChvcHRpb25zLnNvY2tldFBhdGgpIHtcbiAgICAgIHNlc3Npb25PcHRpb25zLnNvY2tldFBhdGggPSBvcHRpb25zLnNvY2tldFBhdGg7XG4gICAgICBzZXNzaW9uT3B0aW9ucy5jcmVhdGVDb25uZWN0aW9uID0gdGhpcy5jcmVhdGVVbml4Q29ubmVjdGlvbi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnMgPSB7fTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRIb3N0ID0gbm9ybWFsaXplSXB2Nkhvc3QoaG9zdCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoXG4gICAgICBgJHtwcm90b2NvbH0vLyR7bm9ybWFsaXplZEhvc3R9OiR7cG9ydH1gLFxuICAgICAgc2Vzc2lvbk9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuc2V0SGVhZGVyKCdob3N0JywgYCR7bm9ybWFsaXplZEhvc3R9OiR7cG9ydH1gKTtcblxuICAgIHNlc3Npb24ub24oJ2Vycm9yJywgKGVycm9yKSA9PiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gIH1cblxuICBjcmVhdGVVbml4Q29ubmVjdGlvbihhdXRob3JpdHksIG9wdGlvbnMpIHtcbiAgICBzd2l0Y2ggKHRoaXMucHJvdG9jb2wpIHtcbiAgICAgIGNhc2UgJ2h0dHA6JzpcbiAgICAgICAgcmV0dXJuIG5ldC5jb25uZWN0KG9wdGlvbnMuc29ja2V0UGF0aCk7XG4gICAgICBjYXNlICdodHRwczonOlxuICAgICAgICBvcHRpb25zLkFMUE5Qcm90b2NvbHMgPSBbJ2gyJ107XG4gICAgICAgIG9wdGlvbnMuc2VydmVybmFtZSA9IHRoaXMuaG9zdDtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KG9wdGlvbnMuc29ja2V0UGF0aCwgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sJywgdGhpcy5wcm90b2NvbCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Tm9EZWxheShib29sKSB7XG4gICAgLy8gV2UgY2FuIG5vdCB1c2Ugc2V0Tm9EZWxheSB3aXRoIEhUVFAvMi5cbiAgICAvLyBOb2RlIDEwIGxpbWl0cyBodHRwMnNlc3Npb24uc29ja2V0IG1ldGhvZHMgdG8gb25lcyBzYWZlIHRvIHVzZSB3aXRoIEhUVFAvMi5cbiAgICAvLyBTZWUgYWxzbyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAyLmh0bWwjaHR0cDJfaHR0cDJzZXNzaW9uX3NvY2tldFxuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgaWYgKHRoaXMuZnJhbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZCA9IHtcbiAgICAgIFtIVFRQMl9IRUFERVJfUEFUSF06IHRoaXMucGF0aCxcbiAgICAgIFtIVFRQMl9IRUFERVJfTUVUSE9EXTogdGhpcy5tZXRob2RcbiAgICB9O1xuXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLm1hcFRvSHR0cDJIZWFkZXIodGhpcy5faGVhZGVycyk7XG5cbiAgICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBtZXRob2QpO1xuXG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLnNlc3Npb24ucmVxdWVzdChoZWFkZXJzKTtcblxuICAgIGZyYW1lLm9uY2UoJ3Jlc3BvbnNlJywgKGhlYWRlcnMsIGZsYWdzKSA9PiB7XG4gICAgICBoZWFkZXJzID0gdGhpcy5tYXBUb0h0dHBIZWFkZXIoaGVhZGVycyk7XG4gICAgICBmcmFtZS5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgIGZyYW1lLnN0YXR1c0NvZGUgPSBoZWFkZXJzW0hUVFAyX0hFQURFUl9TVEFUVVNdO1xuICAgICAgZnJhbWUuc3RhdHVzID0gZnJhbWUuc3RhdHVzQ29kZTtcbiAgICAgIHRoaXMuZW1pdCgncmVzcG9uc2UnLCBmcmFtZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9oZWFkZXJTZW50ID0gdHJ1ZTtcblxuICAgIGZyYW1lLm9uY2UoJ2RyYWluJywgKCkgPT4gdGhpcy5lbWl0KCdkcmFpbicpKTtcbiAgICBmcmFtZS5vbignZXJyb3InLCAoZXJyb3IpID0+IHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcikpO1xuICAgIGZyYW1lLm9uKCdjbG9zZScsICgpID0+IHRoaXMuc2Vzc2lvbi5jbG9zZSgpKTtcblxuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBtYXBUb0h0dHBIZWFkZXIoaGVhZGVycykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgICBjb25zdCBodHRwMkhlYWRlcnMgPSB7fTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFOlxuICAgICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0dHAySGVhZGVycztcbiAgfVxuXG4gIG1hcFRvSHR0cDJIZWFkZXIoaGVhZGVycykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgICBjb25zdCBodHRwMkhlYWRlcnMgPSB7fTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIEhUVFAyX0hFQURFUl9IT1NUOlxuICAgICAgICAgIGtleSA9IEhUVFAyX0hFQURFUl9BVVRIT1JJVFk7XG4gICAgICAgICAgdmFsdWUgPSAvXmh0dHA6XFwvXFwvfF5odHRwczpcXC9cXC8vLnRlc3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBVUkwodmFsdWUpLmhvc3RcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0dHAySGVhZGVycztcbiAgfVxuXG4gIHNldEhlYWRlcihuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0SGVhZGVyKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgd3JpdGUoZGF0YSwgZW5jb2RpbmcpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICByZXR1cm4gZnJhbWUud3JpdGUoZGF0YSwgZW5jb2RpbmcpO1xuICB9XG5cbiAgcGlwZShzdHJlYW0sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICByZXR1cm4gZnJhbWUucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5kKGRhdGEpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICBmcmFtZS5lbmQoZGF0YSk7XG4gIH1cblxuICBhYm9ydChkYXRhKSB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gICAgZnJhbWUuY2xvc2UoTkdIVFRQMl9DQU5DRUwpO1xuICAgIHRoaXMuc2Vzc2lvbi5kZXN0cm95KCk7XG4gIH1cbn1cblxuZXhwb3J0cy5zZXRQcm90b2NvbCA9IHNldFByb3RvY29sO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QixNQUFNQyxNQUFNLEdBQUdELE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDaEMsTUFBTUUsR0FBRyxHQUFHRixPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFCLE1BQU1HLEdBQUcsR0FBR0gsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUUxQixNQUFNO0VBQ0pJLGlCQUFpQjtFQUNqQkMsbUJBQW1CO0VBQ25CQyxtQkFBbUI7RUFDbkJDLHNCQUFzQjtFQUN0QkMsaUJBQWlCO0VBQ2pCQyx1QkFBdUI7RUFDdkJDO0FBQ0YsQ0FBQyxHQUFHWCxLQUFLLENBQUNZLFNBQVM7QUFFbkIsU0FBU0MsV0FBV0EsQ0FBQ0MsUUFBUSxFQUFFO0VBQzdCLE9BQU87SUFDTEMsT0FBT0EsQ0FBQ0MsT0FBTyxFQUFFO01BQ2YsT0FBTyxJQUFJQyxPQUFPLENBQUNILFFBQVEsRUFBRUUsT0FBTyxDQUFDO0lBQ3ZDO0VBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU0UsaUJBQWlC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","\"use strict\";\n\nconst zlib = require('zlib');\nconst utils = require('../utils');\nconst {\n isGzipOrDeflateEncoding,\n isBrotliEncoding\n} = utils;\nexports.chooseDecompresser = res => {\n let decompresser;\n if (isGzipOrDeflateEncoding(res)) {\n decompresser = zlib.createUnzip();\n } else if (isBrotliEncoding(res)) {\n decompresser = zlib.createBrotliDecompress();\n } else {\n throw new Error('unknown content-encoding');\n }\n return decompresser;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6bGliIiwicmVxdWlyZSIsInV0aWxzIiwiaXNHemlwT3JEZWZsYXRlRW5jb2RpbmciLCJpc0Jyb3RsaUVuY29kaW5nIiwiZXhwb3J0cyIsImNob29zZURlY29tcHJlc3NlciIsInJlcyIsImRlY29tcHJlc3NlciIsImNyZWF0ZVVuemlwIiwiY3JlYXRlQnJvdGxpRGVjb21wcmVzcyIsIkVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vZGUvZGVjb21wcmVzcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuY29uc3QgeyBpc0d6aXBPckRlZmxhdGVFbmNvZGluZywgaXNCcm90bGlFbmNvZGluZyB9ID0gdXRpbHM7XG5cbmV4cG9ydHMuY2hvb3NlRGVjb21wcmVzc2VyID0gKHJlcykgPT4ge1xuICBsZXQgZGVjb21wcmVzc2VyO1xuICBpZiAoaXNHemlwT3JEZWZsYXRlRW5jb2RpbmcocmVzKSkge1xuICAgIGRlY29tcHJlc3NlciA9IHpsaWIuY3JlYXRlVW56aXAoKTtcbiAgfSBlbHNlIGlmIChpc0Jyb3RsaUVuY29kaW5nKHJlcykpIHtcbiAgICBkZWNvbXByZXNzZXIgPSB6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29udGVudC1lbmNvZGluZycpO1xuICB9XG4gIHJldHVybiBkZWNvbXByZXNzZXI7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1DLEtBQUssR0FBR0QsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNqQyxNQUFNO0VBQUVFLHVCQUF1QjtFQUFFQztBQUFpQixDQUFDLEdBQUdGLEtBQUs7QUFFM0RHLE9BQU8sQ0FBQ0Msa0JBQWtCLEdBQUlDLEdBQUcsSUFBSztFQUNwQyxJQUFJQyxZQUFZO0VBQ2hCLElBQUlMLHVCQUF1QixDQUFDSSxHQUFHLENBQUMsRUFBRTtJQUNoQ0MsWUFBWSxHQUFHUixJQUFJLENBQUNTLFdBQVcsQ0FBQyxDQUFDO0VBQ25DLENBQUMsTUFBTSxJQUFJTCxnQkFBZ0IsQ0FBQ0csR0FBRyxDQUFDLEVBQUU7SUFDaENDLFlBQVksR0FBR1IsSUFBSSxDQUFDVSxzQkFBc0IsQ0FBQyxDQUFDO0VBQzlDLENBQUMsTUFBTTtJQUNMLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDO0VBQzdDO0VBQ0EsT0FBT0gsWUFBWTtBQUNyQixDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst {\n StringDecoder\n} = require('string_decoder');\nconst Stream = require('stream');\nconst {\n chooseDecompresser\n} = require('./decompress');\n\n/**\n * Buffers response data events and re-emits when they're decompressed.\n *\n * @param {Request} req\n * @param {Response} res\n * @api private\n */\n\nexports.decompress = (request, res) => {\n let decompresser = chooseDecompresser(res);\n const stream = new Stream();\n let decoder;\n\n // make node responseOnEnd() happy\n stream.req = request;\n decompresser.on('error', error => {\n if (error && error.code === 'Z_BUF_ERROR') {\n // unexpected end of file is ignored by browsers and curl\n stream.emit('end');\n return;\n }\n stream.emit('error', error);\n });\n\n // pipe to unzip\n res.pipe(decompresser);\n\n // override `setEncoding` to capture encoding\n res.setEncoding = type => {\n decoder = new StringDecoder(type);\n };\n\n // decode upon decompressing with captured encoding\n decompresser.on('data', buf => {\n if (decoder) {\n const string_ = decoder.write(buf);\n if (string_.length > 0) stream.emit('data', string_);\n } else {\n stream.emit('data', buf);\n }\n });\n decompresser.on('end', () => {\n stream.emit('end');\n });\n\n // override `on` to capture data listeners\n const _on = res.on;\n res.on = function (type, fn) {\n if (type === 'data' || type === 'end') {\n stream.on(type, fn.bind(res));\n } else if (type === 'error') {\n stream.on(type, fn.bind(res));\n _on.call(res, type, fn);\n } else {\n _on.call(res, type, fn);\n }\n return this;\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdHJpbmdEZWNvZGVyIiwicmVxdWlyZSIsIlN0cmVhbSIsImNob29zZURlY29tcHJlc3NlciIsImV4cG9ydHMiLCJkZWNvbXByZXNzIiwicmVxdWVzdCIsInJlcyIsImRlY29tcHJlc3NlciIsInN0cmVhbSIsImRlY29kZXIiLCJyZXEiLCJvbiIsImVycm9yIiwiY29kZSIsImVtaXQiLCJwaXBlIiwic2V0RW5jb2RpbmciLCJ0eXBlIiwiYnVmIiwic3RyaW5nXyIsIndyaXRlIiwibGVuZ3RoIiwiX29uIiwiZm4iLCJiaW5kIiwiY2FsbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3VuemlwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJyk7XG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmNvbnN0IHsgY2hvb3NlRGVjb21wcmVzc2VyIH0gPSByZXF1aXJlKCcuL2RlY29tcHJlc3MnKTtcblxuLyoqXG4gKiBCdWZmZXJzIHJlc3BvbnNlIGRhdGEgZXZlbnRzIGFuZCByZS1lbWl0cyB3aGVuIHRoZXkncmUgZGVjb21wcmVzc2VkLlxuICpcbiAqIEBwYXJhbSB7UmVxdWVzdH0gcmVxXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuZGVjb21wcmVzcyA9IChyZXF1ZXN0LCByZXMpID0+IHtcbiAgbGV0IGRlY29tcHJlc3NlciA9IGNob29zZURlY29tcHJlc3NlcihyZXMpO1xuXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJlYW0oKTtcbiAgbGV0IGRlY29kZXI7XG5cbiAgLy8gbWFrZSBub2RlIHJlc3BvbnNlT25FbmQoKSBoYXBweVxuICBzdHJlYW0ucmVxID0gcmVxdWVzdDtcblxuICBkZWNvbXByZXNzZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgaWYgKGVycm9yICYmIGVycm9yLmNvZGUgPT09ICdaX0JVRl9FUlJPUicpIHtcbiAgICAgIC8vIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaXMgaWdub3JlZCBieSBicm93c2VycyBhbmQgY3VybFxuICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgfSk7XG5cbiAgLy8gcGlwZSB0byB1bnppcFxuICByZXMucGlwZShkZWNvbXByZXNzZXIpO1xuXG4gIC8vIG92ZXJyaWRlIGBzZXRFbmNvZGluZ2AgdG8gY2FwdHVyZSBlbmNvZGluZ1xuICByZXMuc2V0RW5jb2RpbmcgPSAodHlwZSkgPT4ge1xuICAgIGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2Rlcih0eXBlKTtcbiAgfTtcblxuICAvLyBkZWNvZGUgdXBvbiBkZWNvbXByZXNzaW5nIHdpdGggY2FwdHVyZWQgZW5jb2RpbmdcbiAgZGVjb21wcmVzc2VyLm9uKCdkYXRhJywgKGJ1ZikgPT4ge1xuICAgIGlmIChkZWNvZGVyKSB7XG4gICAgICBjb25zdCBzdHJpbmdfID0gZGVjb2Rlci53cml0ZShidWYpO1xuICAgICAgaWYgKHN0cmluZ18ubGVuZ3RoID4gMCkgc3RyZWFtLmVtaXQoJ2RhdGEnLCBzdHJpbmdfKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBidWYpO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVjb21wcmVzc2VyLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9KTtcblxuICAvLyBvdmVycmlkZSBgb25gIHRvIGNhcHR1cmUgZGF0YSBsaXN0ZW5lcnNcbiAgY29uc3QgX29uID0gcmVzLm9uO1xuICByZXMub24gPSBmdW5jdGlvbiAodHlwZSwgZm4pIHtcbiAgICBpZiAodHlwZSA9PT0gJ2RhdGEnIHx8IHR5cGUgPT09ICdlbmQnKSB7XG4gICAgICBzdHJlYW0ub24odHlwZSwgZm4uYmluZChyZXMpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHN0cmVhbS5vbih0eXBlLCBmbi5iaW5kKHJlcykpO1xuICAgICAgX29uLmNhbGwocmVzLCB0eXBlLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9vbi5jYWxsKHJlcywgdHlwZSwgZm4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTtFQUFFQTtBQUFjLENBQUMsR0FBR0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQ25ELE1BQU1DLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNO0VBQUVFO0FBQW1CLENBQUMsR0FBR0YsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFHLE9BQU8sQ0FBQ0MsVUFBVSxHQUFHLENBQUNDLE9BQU8sRUFBRUMsR0FBRyxLQUFLO0VBQ3JDLElBQUlDLFlBQVksR0FBR0wsa0JBQWtCLENBQUNJLEdBQUcsQ0FBQztFQUUxQyxNQUFNRSxNQUFNLEdBQUcsSUFBSVAsTUFBTSxDQUFDLENBQUM7RUFDM0IsSUFBSVEsT0FBTzs7RUFFWDtFQUNBRCxNQUFNLENBQUNFLEdBQUcsR0FBR0wsT0FBTztFQUVwQkUsWUFBWSxDQUFDSSxFQUFFLENBQUMsT0FBTyxFQUFHQyxLQUFLLElBQUs7SUFDbEMsSUFBSUEsS0FBSyxJQUFJQSxLQUFLLENBQUNDLElBQUksS0FBSyxhQUFhLEVBQUU7TUFDekM7TUFDQUwsTUFBTSxDQUFDTSxJQUFJLENBQUMsS0FBSyxDQUFDO01BQ2xCO0lBQ0Y7SUFFQU4sTUFBTSxDQUFDTSxJQUFJLENBQUMsT0FBTyxFQUFFRixLQUFLLENBQUM7RUFDN0IsQ0FBQyxDQUFDOztFQUVGO0VBQ0FOLEdBQUcsQ0FBQ1MsSUFBSSxDQUFDUixZQUFZLENBQUM7O0VBRXRCO0VBQ0FELEdBQUcsQ0FBQ1UsV0FBVyxHQUFJQyxJQUFJLElBQUs7SUFDMUJSLE9BQU8sR0FBRyxJQUFJVixhQUFhLENBQUNrQixJQUFJLENBQUM7RUFDbkMsQ0FBQzs7RUFFRDtFQUNBVixZQUFZLENBQUNJLEVBQUUsQ0FBQyxNQUFNLEVBQUdPLEdBQUcsSUFBSztJQUMvQixJQUFJVCxPQUFPLEVBQUU7TUFDWCxNQUFNVSxPQUFPLEdBQUdWLE9BQU8sQ0FBQ1csS0FBSyxDQUFDRixHQUFHLENBQUM7TUFDbEMsSUFBSUMsT0FBTyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFYixNQUFNLENBQUNNLElBQUksQ0FBQyxNQUFNLEVBQUVLLE9BQU8sQ0FBQztJQUN0RCxDQUFDLE1BQU07TUFDTFgsTUFBTSxDQUFDTSxJQUFJLENBQUMsTUFBTSxFQUFFSSxHQUFHLENBQUM7SUFDMUI7RUFDRixDQUFDLENBQUM7RUFFRlgsWUFBWSxDQUFDSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDM0JILE1BQU0sQ0FBQ00sSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNwQixDQUFDLENBQUM7O0VBRUY7RUFDQSxNQUFNUSxHQUFHLEdBQUdoQixHQUFHLENBQUNLLEVBQUU7RUFDbEJMLEdBQUcsQ0FBQ0ssRUFBRSxHQUFHLFVBQVVNLElBQUksRUFBRU0sRUFBRSxFQUFFO0lBQzNCLElBQUlOLElBQUksS0FBSyxNQUFNLElBQUlBLElBQUksS0FBSyxLQUFLLEVBQUU7TUFDckNULE1BQU0sQ0FBQ0csRUFBRSxDQUFDTSxJQUFJLEVBQUVNLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDbEIsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxNQUFNLElBQUlXLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDM0JULE1BQU0sQ0FBQ0csRUFBRSxDQUFDTSxJQUFJLEVBQUVNLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDbEIsR0FBRyxDQUFDLENBQUM7TUFDN0JnQixHQUFHLENBQUNHLElBQUksQ0FBQ25CLEdBQUcsRUFBRVcsSUFBSSxFQUFFTSxFQUFFLENBQUM7SUFDekIsQ0FBQyxNQUFNO01BQ0xELEdBQUcsQ0FBQ0csSUFBSSxDQUFDbkIsR0FBRyxFQUFFVyxJQUFJLEVBQUVNLEVBQUUsQ0FBQztJQUN6QjtJQUVBLE9BQU8sSUFBSTtFQUNiLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst utils = require('./utils');\n\n/**\n * Expose `ResponseBase`.\n */\n\nmodule.exports = ResponseBase;\n\n/**\n * Initialize a new `ResponseBase`.\n *\n * @api public\n */\n\nfunction ResponseBase() {}\n\n/**\n * Get case-insensitive `field` value.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nResponseBase.prototype.get = function (field) {\n return this.header[field.toLowerCase()];\n};\n\n/**\n * Set header related properties:\n *\n * - `.type` the content type without params\n *\n * A response of \"Content-Type: text/plain; charset=utf-8\"\n * will provide you with a `.type` of \"text/plain\".\n *\n * @param {Object} header\n * @api private\n */\n\nResponseBase.prototype._setHeaderProperties = function (header) {\n // TODO: moar!\n // TODO: make this a util\n\n // content-type\n const ct = header['content-type'] || '';\n this.type = utils.type(ct);\n\n // params\n const parameters = utils.params(ct);\n for (const key in parameters) {\n if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key];\n }\n this.links = {};\n\n // links\n try {\n if (header.link) {\n this.links = utils.parseLinks(header.link);\n }\n } catch (err) {\n // ignore\n }\n};\n\n/**\n * Set flags such as `.ok` based on `status`.\n *\n * For example a 2xx response will give you a `.ok` of __true__\n * whereas 5xx will be __false__ and `.error` will be __true__. The\n * `.clientError` and `.serverError` are also available to be more\n * specific, and `.statusType` is the class of error ranging from 1..5\n * sometimes useful for mapping respond colors etc.\n *\n * \"sugar\" properties are also defined for common cases. Currently providing:\n *\n * - .noContent\n * - .badRequest\n * - .unauthorized\n * - .notAcceptable\n * - .notFound\n *\n * @param {Number} status\n * @api private\n */\n\nResponseBase.prototype._setStatusProperties = function (status) {\n const type = Math.trunc(status / 100);\n\n // status / class\n this.statusCode = status;\n this.status = this.statusCode;\n this.statusType = type;\n\n // basics\n this.info = type === 1;\n this.ok = type === 2;\n this.redirect = type === 3;\n this.clientError = type === 4;\n this.serverError = type === 5;\n this.error = type === 4 || type === 5 ? this.toError() : false;\n\n // sugar\n this.created = status === 201;\n this.accepted = status === 202;\n this.noContent = status === 204;\n this.badRequest = status === 400;\n this.unauthorized = status === 401;\n this.notAcceptable = status === 406;\n this.forbidden = status === 403;\n this.notFound = status === 404;\n this.unprocessableEntity = status === 422;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlscyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVzcG9uc2VCYXNlIiwicHJvdG90eXBlIiwiZ2V0IiwiZmllbGQiLCJoZWFkZXIiLCJ0b0xvd2VyQ2FzZSIsIl9zZXRIZWFkZXJQcm9wZXJ0aWVzIiwiY3QiLCJ0eXBlIiwicGFyYW1ldGVycyIsInBhcmFtcyIsImtleSIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImxpbmtzIiwibGluayIsInBhcnNlTGlua3MiLCJlcnIiLCJfc2V0U3RhdHVzUHJvcGVydGllcyIsInN0YXR1cyIsIk1hdGgiLCJ0cnVuYyIsInN0YXR1c0NvZGUiLCJzdGF0dXNUeXBlIiwiaW5mbyIsIm9rIiwicmVkaXJlY3QiLCJjbGllbnRFcnJvciIsInNlcnZlckVycm9yIiwiZXJyb3IiLCJ0b0Vycm9yIiwiY3JlYXRlZCIsImFjY2VwdGVkIiwibm9Db250ZW50IiwiYmFkUmVxdWVzdCIsInVuYXV0aG9yaXplZCIsIm5vdEFjY2VwdGFibGUiLCJmb3JiaWRkZW4iLCJub3RGb3VuZCIsInVucHJvY2Vzc2FibGVFbnRpdHkiXSwic291cmNlcyI6WyIuLi9zcmMvcmVzcG9uc2UtYmFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogRXhwb3NlIGBSZXNwb25zZUJhc2VgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gUmVzcG9uc2VCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlQmFzZWAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXNwb25zZUJhc2UoKSB7fVxuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGBmaWVsZGAgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIHJldHVybiB0aGlzLmhlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbn07XG5cbi8qKlxuICogU2V0IGhlYWRlciByZWxhdGVkIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGAudHlwZWAgdGhlIGNvbnRlbnQgdHlwZSB3aXRob3V0IHBhcmFtc1xuICpcbiAqIEEgcmVzcG9uc2Ugb2YgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICogd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgYC50eXBlYCBvZiBcInRleHQvcGxhaW5cIi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRIZWFkZXJQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGhlYWRlcikge1xuICAvLyBUT0RPOiBtb2FyIVxuICAvLyBUT0RPOiBtYWtlIHRoaXMgYSB1dGlsXG5cbiAgLy8gY29udGVudC10eXBlXG4gIGNvbnN0IGN0ID0gaGVhZGVyWydjb250ZW50LXR5cGUnXSB8fCAnJztcbiAgdGhpcy50eXBlID0gdXRpbHMudHlwZShjdCk7XG5cbiAgLy8gcGFyYW1zXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSB1dGlscy5wYXJhbXMoY3QpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbWV0ZXJzLCBrZXkpKVxuICAgICAgdGhpc1trZXldID0gcGFyYW1ldGVyc1trZXldO1xuICB9XG5cbiAgdGhpcy5saW5rcyA9IHt9O1xuXG4gIC8vIGxpbmtzXG4gIHRyeSB7XG4gICAgaWYgKGhlYWRlci5saW5rKSB7XG4gICAgICB0aGlzLmxpbmtzID0gdXRpbHMucGFyc2VMaW5rcyhoZWFkZXIubGluayk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxufTtcblxuLyoqXG4gKiBTZXQgZmxhZ3Mgc3VjaCBhcyBgLm9rYCBiYXNlZCBvbiBgc3RhdHVzYC5cbiAqXG4gKiBGb3IgZXhhbXBsZSBhIDJ4eCByZXNwb25zZSB3aWxsIGdpdmUgeW91IGEgYC5va2Agb2YgX190cnVlX19cbiAqIHdoZXJlYXMgNXh4IHdpbGwgYmUgX19mYWxzZV9fIGFuZCBgLmVycm9yYCB3aWxsIGJlIF9fdHJ1ZV9fLiBUaGVcbiAqIGAuY2xpZW50RXJyb3JgIGFuZCBgLnNlcnZlckVycm9yYCBhcmUgYWxzbyBhdmFpbGFibGUgdG8gYmUgbW9yZVxuICogc3BlY2lmaWMsIGFuZCBgLnN0YXR1c1R5cGVgIGlzIHRoZSBjbGFzcyBvZiBlcnJvciByYW5naW5nIGZyb20gMS4uNVxuICogc29tZXRpbWVzIHVzZWZ1bCBmb3IgbWFwcGluZyByZXNwb25kIGNvbG9ycyBldGMuXG4gKlxuICogXCJzdWdhclwiIHByb3BlcnRpZXMgYXJlIGFsc28gZGVmaW5lZCBmb3IgY29tbW9uIGNhc2VzLiBDdXJyZW50bHkgcHJvdmlkaW5nOlxuICpcbiAqICAgLSAubm9Db250ZW50XG4gKiAgIC0gLmJhZFJlcXVlc3RcbiAqICAgLSAudW5hdXRob3JpemVkXG4gKiAgIC0gLm5vdEFjY2VwdGFibGVcbiAqICAgLSAubm90Rm91bmRcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRTdGF0dXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICBjb25zdCB0eXBlID0gTWF0aC50cnVuYyhzdGF0dXMgLyAxMDApO1xuXG4gIC8vIHN0YXR1cyAvIGNsYXNzXG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgdGhpcy5zdGF0dXMgPSB0aGlzLnN0YXR1c0NvZGU7XG4gIHRoaXMuc3RhdHVzVHlwZSA9IHR5cGU7XG5cbiAgLy8gYmFzaWNzXG4gIHRoaXMuaW5mbyA9IHR5cGUgPT09IDE7XG4gIHRoaXMub2sgPSB0eXBlID09PSAyO1xuICB0aGlzLnJlZGlyZWN0ID0gdHlwZSA9PT0gMztcbiAgdGhpcy5jbGllbnRFcnJvciA9IHR5cGUgPT09IDQ7XG4gIHRoaXMuc2VydmVyRXJyb3IgPSB0eXBlID09PSA1O1xuICB0aGlzLmVycm9yID0gdHlwZSA9PT0gNCB8fCB0eXBlID09PSA1ID8gdGhpcy50b0Vycm9yKCkgOiBmYWxzZTtcblxuICAvLyBzdWdhclxuICB0aGlzLmNyZWF0ZWQgPSBzdGF0dXMgPT09IDIwMTtcbiAgdGhpcy5hY2NlcHRlZCA9IHN0YXR1cyA9PT0gMjAyO1xuICB0aGlzLm5vQ29udGVudCA9IHN0YXR1cyA9PT0gMjA0O1xuICB0aGlzLmJhZFJlcXVlc3QgPSBzdGF0dXMgPT09IDQwMDtcbiAgdGhpcy51bmF1dGhvcml6ZWQgPSBzdGF0dXMgPT09IDQwMTtcbiAgdGhpcy5ub3RBY2NlcHRhYmxlID0gc3RhdHVzID09PSA0MDY7XG4gIHRoaXMuZm9yYmlkZGVuID0gc3RhdHVzID09PSA0MDM7XG4gIHRoaXMubm90Rm91bmQgPSBzdGF0dXMgPT09IDQwNDtcbiAgdGhpcy51bnByb2Nlc3NhYmxlRW50aXR5ID0gc3RhdHVzID09PSA0MjI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxTQUFTLENBQUM7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdDLFlBQVk7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0EsWUFBWUEsQ0FBQSxFQUFHLENBQUM7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBQSxZQUFZLENBQUNDLFNBQVMsQ0FBQ0MsR0FBRyxHQUFHLFVBQVVDLEtBQUssRUFB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","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst util = require('util');\nconst Stream = require('stream');\nconst ResponseBase = require('../response-base');\nconst {\n mixin\n} = require('../utils');\n\n/**\n * Expose `Response`.\n */\n\nmodule.exports = Response;\n\n/**\n * Initialize a new `Response` with the given `xhr`.\n *\n * - set flags (.ok, .error, etc)\n * - parse header\n *\n * @param {Request} req\n * @param {Object} options\n * @constructor\n * @extends {Stream}\n * @implements {ReadableStream}\n * @api private\n */\n\nfunction Response(request) {\n Stream.call(this);\n this.res = request.res;\n const {\n res\n } = this;\n this.request = request;\n this.req = request.req;\n this.text = res.text;\n this.files = res.files || {};\n this.buffered = request._resBuffered;\n this.headers = res.headers;\n this.header = this.headers;\n this._setStatusProperties(res.statusCode);\n this._setHeaderProperties(this.header);\n this.setEncoding = res.setEncoding.bind(res);\n res.on('data', this.emit.bind(this, 'data'));\n res.on('end', this.emit.bind(this, 'end'));\n res.on('close', this.emit.bind(this, 'close'));\n res.on('error', this.emit.bind(this, 'error'));\n}\n\n// Lazy access res.body.\n// https://github.com/nodejs/node/pull/39520#issuecomment-889697136\nObject.defineProperty(Response.prototype, 'body', {\n get() {\n return this._body !== undefined ? this._body : this.res.body !== undefined ? this.res.body : {};\n },\n set(value) {\n this._body = value;\n }\n});\n\n/**\n * Inherit from `Stream`.\n */\n\nutil.inherits(Response, Stream);\nmixin(Response.prototype, ResponseBase.prototype);\n\n/**\n * Implements methods of a `ReadableStream`\n */\n\nResponse.prototype.destroy = function (error) {\n this.res.destroy(error);\n};\n\n/**\n * Pause.\n */\n\nResponse.prototype.pause = function () {\n this.res.pause();\n};\n\n/**\n * Resume.\n */\n\nResponse.prototype.resume = function () {\n this.res.resume();\n};\n\n/**\n * Return an `Error` representative of this response.\n *\n * @return {Error}\n * @api public\n */\n\nResponse.prototype.toError = function () {\n const {\n req\n } = this;\n const {\n method\n } = req;\n const {\n path\n } = req;\n const message = `cannot ${method} ${path} (${this.status})`;\n const error = new Error(message);\n error.status = this.status;\n error.text = this.text;\n error.method = method;\n error.path = path;\n return error;\n};\nResponse.prototype.setStatusProperties = function (status) {\n console.warn('In superagent 2.x setStatusProperties is a private method');\n return this._setStatusProperties(status);\n};\n\n/**\n * To json.\n *\n * @return {Object}\n * @api public\n */\n\nResponse.prototype.toJSON = function () {\n return {\n req: this.request.toJSON(),\n header: this.header,\n status: this.status,\n text: this.text\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsIiwicmVxdWlyZSIsIlN0cmVhbSIsIlJlc3BvbnNlQmFzZSIsIm1peGluIiwibW9kdWxlIiwiZXhwb3J0cyIsIlJlc3BvbnNlIiwicmVxdWVzdCIsImNhbGwiLCJyZXMiLCJyZXEiLCJ0ZXh0IiwiZmlsZXMiLCJidWZmZXJlZCIsIl9yZXNCdWZmZXJlZCIsImhlYWRlcnMiLCJoZWFkZXIiLCJfc2V0U3RhdHVzUHJvcGVydGllcyIsInN0YXR1c0NvZGUiLCJfc2V0SGVhZGVyUHJvcGVydGllcyIsInNldEVuY29kaW5nIiwiYmluZCIsIm9uIiwiZW1pdCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwicHJvdG90eXBlIiwiZ2V0IiwiX2JvZHkiLCJ1bmRlZmluZWQiLCJib2R5Iiwic2V0IiwidmFsdWUiLCJpbmhlcml0cyIsImRlc3Ryb3kiLCJlcnJvciIsInBhdXNlIiwicmVzdW1lIiwidG9FcnJvciIsIm1ldGhvZCIsInBhdGgiLCJtZXNzYWdlIiwic3RhdHVzIiwiRXJyb3IiLCJzZXRTdGF0dXNQcm9wZXJ0aWVzIiwiY29uc29sZSIsIndhcm4iLCJ0b0pTT04iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9yZXNwb25zZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgUmVzcG9uc2VCYXNlID0gcmVxdWlyZSgnLi4vcmVzcG9uc2UtYmFzZScpO1xuY29uc3QgeyBtaXhpbiB9ID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3BvbnNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlYCB3aXRoIHRoZSBnaXZlbiBgeGhyYC5cbiAqXG4gKiAgLSBzZXQgZmxhZ3MgKC5vaywgLmVycm9yLCBldGMpXG4gKiAgLSBwYXJzZSBoZWFkZXJcbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMge1N0cmVhbX1cbiAqIEBpbXBsZW1lbnRzIHtSZWFkYWJsZVN0cmVhbX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIFJlc3BvbnNlKHJlcXVlc3QpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIHRoaXMucmVzID0gcmVxdWVzdC5yZXM7XG4gIGNvbnN0IHsgcmVzIH0gPSB0aGlzO1xuICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB0aGlzLnJlcSA9IHJlcXVlc3QucmVxO1xuICB0aGlzLnRleHQgPSByZXMudGV4dDtcbiAgdGhpcy5maWxlcyA9IHJlcy5maWxlcyB8fCB7fTtcbiAgdGhpcy5idWZmZXJlZCA9IHJlcXVlc3QuX3Jlc0J1ZmZlcmVkO1xuICB0aGlzLmhlYWRlcnMgPSByZXMuaGVhZGVycztcbiAgdGhpcy5oZWFkZXIgPSB0aGlzLmhlYWRlcnM7XG4gIHRoaXMuX3NldFN0YXR1c1Byb3BlcnRpZXMocmVzLnN0YXR1c0NvZGUpO1xuICB0aGlzLl9zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKTtcbiAgdGhpcy5zZXRFbmNvZGluZyA9IHJlcy5zZXRFbmNvZGluZy5iaW5kKHJlcyk7XG4gIHJlcy5vbignZGF0YScsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdkYXRhJykpO1xuICByZXMub24oJ2VuZCcsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlbmQnKSk7XG4gIHJlcy5vbignY2xvc2UnLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnY2xvc2UnKSk7XG4gIHJlcy5vbignZXJyb3InLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKSk7XG59XG5cbi8vIExhenkgYWNjZXNzIHJlcy5ib2R5LlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzk1MjAjaXNzdWVjb21tZW50LTg4OTY5NzEzNlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgJ2JvZHknLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYm9keSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMuX2JvZHlcbiAgICAgIDogdGhpcy5yZXMuYm9keSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMucmVzLmJvZHlcbiAgICAgIDoge307XG4gIH0sXG4gIHNldCh2YWx1ZSkge1xuICAgIHRoaXMuX2JvZHkgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbi8qKlxuICogSW5oZXJpdCBmcm9tIGBTdHJlYW1gLlxuICovXG5cbnV0aWwuaW5oZXJpdHMoUmVzcG9uc2UsIFN0cmVhbSk7XG5cbm1peGluKFJlc3BvbnNlLnByb3RvdHlwZSwgUmVzcG9uc2VCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogSW1wbGVtZW50cyBtZXRob2RzIG9mIGEgYFJlYWRhYmxlU3RyZWFtYFxuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gIHRoaXMucmVzLmRlc3Ryb3koZXJyb3IpO1xufTtcblxuLyoqXG4gKiBQYXVzZS5cbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucmVzLnBhdXNlKCk7XG59O1xuXG4vKipcbiAqIFJlc3VtZS5cbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJlcy5yZXN1bWUoKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFuIGBFcnJvcmAgcmVwcmVzZW50YXRpdmUgb2YgdGhpcyByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJuIHtFcnJvcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnRvRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gcmVxO1xuICBjb25zdCB7IHBhdGggfSA9IHJlcTtcblxuICBjb25zdCBtZXNzYWdlID0gYGNhbm5vdCAke21ldGhvZH0gJHtwYXRofSAoJHt0aGlzLnN0YXR1c30pYDtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIGVycm9yLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICBlcnJvci50ZXh0ID0gdGhpcy50ZXh0O1xuICBlcnJvci5tZXRob2QgPSBtZXRob2Q7XG4gIGVycm9yLnBhdGggPSBwYXRoO1xuXG4gIHJldHVybiBlcnJvcjtcbn07XG5cblJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICBjb25zb2xlLndhcm4oJ0luIHN1cGVyYWdlbnQgMi54IHNldFN0YXR1c1Byb3BlcnRpZXMgaXMgYSBwcml2YXRlIG1ldGhvZCcpO1xuICByZXR1cm4gdGhpcy5fc2V0U3RhdHVzUHJvcGVydGllcyhzdGF0dXMpO1xufTtcblxuLyoqXG4gKiBUbyBqc29uLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICByZXE6IHRoaXMucmVxdWVzdC50b0pTT04oKSxcbiAgICBoZWFkZXI6IHRoaXMuaGVhZGVyLFxuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgdGV4dDogdGhpcy50ZXh0XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUMsTUFBTSxHQUFHRCxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ2hDLE1BQU1FLFlBQVksR0FB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","\"use strict\";\n\nconst defaults = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts'];\nclass Agent {\n constructor() {\n this._defaults = [];\n }\n _setDefaults(request) {\n for (const def of this._defaults) {\n request[def.fn](...def.args);\n }\n }\n}\nfor (const fn of defaults) {\n // Default setting for all requests from this agent\n Agent.prototype[fn] = function (...args) {\n this._defaults.push({\n fn,\n args\n });\n return this;\n };\n}\nmodule.exports = Agent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0cyIsIkFnZW50IiwiY29uc3RydWN0b3IiLCJfZGVmYXVsdHMiLCJfc2V0RGVmYXVsdHMiLCJyZXF1ZXN0IiwiZGVmIiwiZm4iLCJhcmdzIiwicHJvdG90eXBlIiwicHVzaCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQtYmFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBkZWZhdWx0cyA9IFtcbiAgJ3VzZScsXG4gICdvbicsXG4gICdvbmNlJyxcbiAgJ3NldCcsXG4gICdxdWVyeScsXG4gICd0eXBlJyxcbiAgJ2FjY2VwdCcsXG4gICdhdXRoJyxcbiAgJ3dpdGhDcmVkZW50aWFscycsXG4gICdzb3J0UXVlcnknLFxuICAncmV0cnknLFxuICAnb2snLFxuICAncmVkaXJlY3RzJyxcbiAgJ3RpbWVvdXQnLFxuICAnYnVmZmVyJyxcbiAgJ3NlcmlhbGl6ZScsXG4gICdwYXJzZScsXG4gICdjYScsXG4gICdrZXknLFxuICAncGZ4JyxcbiAgJ2NlcnQnLFxuICAnZGlzYWJsZVRMU0NlcnRzJ1xuXVxuXG5jbGFzcyBBZ2VudCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9kZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgX3NldERlZmF1bHRzIChyZXF1ZXN0KSB7XG4gICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5fZGVmYXVsdHMpIHtcbiAgICAgIHJlcXVlc3RbZGVmLmZuXSguLi5kZWYuYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZvciAoY29uc3QgZm4gb2YgZGVmYXVsdHMpIHtcbiAgLy8gRGVmYXVsdCBzZXR0aW5nIGZvciBhbGwgcmVxdWVzdHMgZnJvbSB0aGlzIGFnZW50XG4gIEFnZW50LnByb3RvdHlwZVtmbl0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHRoaXMuX2RlZmF1bHRzLnB1c2goeyBmbiwgYXJncyB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLFFBQVEsR0FBRyxDQUNmLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxPQUFPLEVBQ1AsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsSUFBSSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixDQUNsQjtBQUVELE1BQU1DLEtBQUssQ0FBQztFQUNWQyxXQUFXQSxDQUFBLEVBQUk7SUFDYixJQUFJLENBQUNDLFNBQVMsR0FBRyxFQUFFO0VBQ3JCO0VBRUFDLFlBQVlBLENBQUVDLE9BQU8sRUFBRTtJQUNyQixLQUFLLE1BQU1DLEdBQUcsSUFBSSxJQUFJLENBQUNILFNBQVMsRUFBRTtNQUNoQ0UsT0FBTyxDQUFDQyxHQUFHLENBQUNDLEVBQUUsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ0UsSUFBSSxDQUFDO0lBQzlCO0VBQ0Y7QUFDRjtBQUVBLEtBQUssTUFBTUQsRUFBRSxJQUFJUCxRQUFRLEVBQUU7RUFDekI7RUFDQUMsS0FBSyxDQUFDUSxTQUFTLENBQUNGLEVBQUUsQ0FBQyxHQUFHLFVBQVUsR0FBR0MsSUFBSSxFQUFFO0lBQ3ZDLElBQUksQ0FBQ0wsU0FBUyxDQUFDTyxJQUFJLENBQUM7TUFBRUgsRUFBRTtNQUFFQztJQUFLLENBQUMsQ0FBQztJQUNqQyxPQUFPLElBQUk7RUFDYixDQUFDO0FBQ0g7QUFHQUcsTUFBTSxDQUFDQyxPQUFPLEdBQUdYLEtBQUsiLCJpZ25vcmVMaXN0IjpbXX0=","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst {\n CookieJar\n} = require('cookiejar');\nconst {\n CookieAccessInfo\n} = require('cookiejar');\nconst methods = require('methods');\nconst request = require('../..');\nconst AgentBase = require('../agent-base');\n\n/**\n * Initialize a new `Agent`.\n *\n * @api public\n */\n\nclass Agent extends AgentBase {\n constructor(options) {\n super();\n this.jar = new CookieJar();\n if (options) {\n if (options.ca) {\n this.ca(options.ca);\n }\n if (options.key) {\n this.key(options.key);\n }\n if (options.pfx) {\n this.pfx(options.pfx);\n }\n if (options.cert) {\n this.cert(options.cert);\n }\n if (options.rejectUnauthorized === false) {\n this.disableTLSCerts();\n }\n }\n }\n\n /**\n * Save the cookies in the given `res` to\n * the agent's cookie jar for persistence.\n *\n * @param {Response} res\n * @api private\n */\n _saveCookies(res) {\n const cookies = res.headers['set-cookie'];\n if (cookies) {\n var _res$request;\n const url = new URL(((_res$request = res.request) === null || _res$request === void 0 ? void 0 : _res$request.url) || '');\n this.jar.setCookies(cookies, url.hostname, url.pathname);\n }\n }\n\n /**\n * Attach cookies when available to the given `req`.\n *\n * @param {Request} req\n * @api private\n */\n _attachCookies(request_) {\n const url = new URL(request_.url);\n const access = new CookieAccessInfo(url.hostname, url.pathname, url.protocol === 'https:');\n const cookies = this.jar.getCookies(access).toValueString();\n request_.cookies = cookies;\n }\n}\nfor (const name of methods) {\n const method = name.toUpperCase();\n if (method === \"QUERY\") continue;\n Agent.prototype[name] = function (url, fn) {\n const request_ = new request.Request(method, url);\n request_.on('response', this._saveCookies.bind(this));\n request_.on('redirect', this._saveCookies.bind(this));\n request_.on('redirect', this._attachCookies.bind(this, request_));\n this._setDefaults(request_);\n this._attachCookies(request_);\n if (fn) {\n request_.end(fn);\n }\n return request_;\n };\n}\nAgent.prototype.del = Agent.prototype.delete;\n\n// create a Proxy that can instantiate a new Agent without using `new` keyword\n// (for backward compatibility and chaining)\nconst proxyAgent = new Proxy(Agent, {\n apply(target, thisArg, argumentsList) {\n return new target(...argumentsList);\n }\n});\nmodule.exports = proxyAgent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb29raWVKYXIiLCJyZXF1aXJlIiwiQ29va2llQWNjZXNzSW5mbyIsIm1ldGhvZHMiLCJyZXF1ZXN0IiwiQWdlbnRCYXNlIiwiQWdlbnQiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJqYXIiLCJjYSIsImtleSIsInBmeCIsImNlcnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJkaXNhYmxlVExTQ2VydHMiLCJfc2F2ZUNvb2tpZXMiLCJyZXMiLCJjb29raWVzIiwiaGVhZGVycyIsIl9yZXMkcmVxdWVzdCIsInVybCIsIlVSTCIsInNldENvb2tpZXMiLCJob3N0bmFtZSIsInBhdGhuYW1lIiwiX2F0dGFjaENvb2tpZXMiLCJyZXF1ZXN0XyIsImFjY2VzcyIsInByb3RvY29sIiwiZ2V0Q29va2llcyIsInRvVmFsdWVTdHJpbmciLCJuYW1lIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJwcm90b3R5cGUiLCJmbiIsIlJlcXVlc3QiLCJvbiIsImJpbmQiLCJfc2V0RGVmYXVsdHMiLCJlbmQiLCJkZWwiLCJkZWxldGUiLCJwcm94eUFnZW50IiwiUHJveHkiLCJhcHBseSIsInRhcmdldCIsInRoaXNBcmciLCJhcmd1bWVudHNMaXN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2FnZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB7IENvb2tpZUphciB9ID0gcmVxdWlyZSgnY29va2llamFyJyk7XG5jb25zdCB7IENvb2tpZUFjY2Vzc0luZm8gfSA9IHJlcXVpcmUoJ2Nvb2tpZWphcicpO1xuY29uc3QgbWV0aG9kcyA9IHJlcXVpcmUoJ21ldGhvZHMnKTtcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCcuLi8uLicpO1xuY29uc3QgQWdlbnRCYXNlID0gcmVxdWlyZSgnLi4vYWdlbnQtYmFzZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYEFnZW50YC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNsYXNzIEFnZW50IGV4dGVuZHMgQWdlbnRCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5qYXIgPSBuZXcgQ29va2llSmFyKCk7XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuY2EpIHtcbiAgICAgICAgdGhpcy5jYShvcHRpb25zLmNhKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMua2V5KSB7XG4gICAgICAgIHRoaXMua2V5KG9wdGlvbnMua2V5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGZ4KSB7XG4gICAgICAgIHRoaXMucGZ4KG9wdGlvbnMucGZ4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2VydCkge1xuICAgICAgICB0aGlzLmNlcnQob3B0aW9ucy5jZXJ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVqZWN0VW5hdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmRpc2FibGVUTFNDZXJ0cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjb29raWVzIGluIHRoZSBnaXZlbiBgcmVzYCB0b1xuICAgKiB0aGUgYWdlbnQncyBjb29raWUgamFyIGZvciBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmVDb29raWVzIChyZXMpIHtcbiAgICBjb25zdCBjb29raWVzID0gcmVzLmhlYWRlcnNbJ3NldC1jb29raWUnXTtcbiAgICBpZiAoY29va2llcykge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXMucmVxdWVzdD8udXJsIHx8ICcnKTtcbiAgICAgIHRoaXMuamFyLnNldENvb2tpZXMoY29va2llcywgdXJsLmhvc3RuYW1lLCB1cmwucGF0aG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggY29va2llcyB3aGVuIGF2YWlsYWJsZSB0byB0aGUgZ2l2ZW4gYHJlcWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVxdWVzdH0gcmVxXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgX2F0dGFjaENvb2tpZXMgKHJlcXVlc3RfKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0Xy51cmwpO1xuICAgIGNvbnN0IGFjY2VzcyA9IG5ldyBDb29raWVBY2Nlc3NJbmZvKFxuICAgICAgdXJsLmhvc3RuYW1lLFxuICAgICAgdXJsLnBhdGhuYW1lLFxuICAgICAgdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xuICAgICk7XG4gICAgY29uc3QgY29va2llcyA9IHRoaXMuamFyLmdldENvb2tpZXMoYWNjZXNzKS50b1ZhbHVlU3RyaW5nKCk7XG4gICAgcmVxdWVzdF8uY29va2llcyA9IGNvb2tpZXM7XG4gIH1cbn1cblxuZm9yIChjb25zdCBuYW1lIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbWV0aG9kID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICBpZiAobWV0aG9kID09PSBcIlFVRVJZXCIpIGNvbnRpbnVlO1xuICBBZ2VudC5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAodXJsLCBmbikge1xuICAgIGNvbnN0IHJlcXVlc3RfID0gbmV3IHJlcXVlc3QuUmVxdWVzdChtZXRob2QsIHVybCk7XG5cbiAgICByZXF1ZXN0Xy5vbigncmVzcG9uc2UnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9hdHRhY2hDb29raWVzLmJpbmQodGhpcywgcmVxdWVzdF8pKTtcbiAgICB0aGlzLl9zZXREZWZhdWx0cyhyZXF1ZXN0Xyk7XG4gICAgdGhpcy5fYXR0YWNoQ29va2llcyhyZXF1ZXN0Xyk7XG5cbiAgICBpZiAoZm4pIHtcbiAgICAgIHJlcXVlc3RfLmVuZChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuZGVsID0gQWdlbnQucHJvdG90eXBlLmRlbGV0ZTtcblxuLy8gY3JlYXRlIGEgUHJveHkgdGhhdCBjYW4gaW5zdGFudGlhdGUgYSBuZXcgQWdlbnQgd2l0aG91dCB1c2luZyBgbmV3YCBrZXl3b3JkXG4vLyAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIGNoYWluaW5nKVxuY29uc3QgcHJveHlBZ2VudCA9IG5ldyBQcm94eShBZ2VudCwge1xuICBhcHBseSAodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSB7XG4gICAgcmV0dXJuIG5ldyB0YXJnZXQoLi4uYXJndW1lbnRzTGlzdCk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3h5QWdlbnQ7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBOztBQUVBLE1BQU07RUFBRUE7QUFBVSxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDMUMsTUFBTTtFQUFFQztBQUFpQixDQUFDLEdBQUdELE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDakQsTUFBTUUsT0FBTyxHQUFHRixPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLE1BQU1HLE9BQU8sR0FBR0gsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNoQyxNQUFNSSxTQUFTLEdBQUdKLE9BQU8sQ0FBQyxlQUFlLENBQUM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUssS0FBSyxTQUFTRCxTQUFTLENBQUM7RUFDNUJFLFdBQVdBLENBQUVDLE9BQU8sRUFBRTtJQUNwQixLQUFLLENBQUMsQ0FBQztJQUVQLElBQUksQ0FBQ0MsR0FBRyxHQUFHLElBQUlULFNBQVMsQ0FBQyxDQUFDO0lBRTFCLElBQUlRLE9B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","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst qs = require('qs');\nmodule.exports = (res, fn) => {\n res.text = '';\n res.setEncoding('ascii');\n res.on('data', chunk => {\n res.text += chunk;\n });\n res.on('end', () => {\n try {\n fn(null, qs.parse(res.text));\n } catch (err) {\n fn(err);\n }\n });\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJxcyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIiwicGFyc2UiLCJlcnIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZS9wYXJzZXJzL3VybGVuY29kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHFzID0gcmVxdWlyZSgncXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAocmVzLCBmbikgPT4ge1xuICByZXMudGV4dCA9ICcnO1xuICByZXMuc2V0RW5jb2RpbmcoJ2FzY2lpJyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKG51bGwsIHFzLnBhcnNlKHJlcy50ZXh0KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbihlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxFQUFFLEdBQUdDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFeEJDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLENBQUNDLEdBQUcsRUFBRUMsRUFBRSxLQUFLO0VBQzVCRCxHQUFHLENBQUNFLElBQUksR0FBRyxFQUFFO0VBQ2JGLEdBQUcsQ0FBQ0csV0FBVyxDQUFDLE9BQU8sQ0FBQztFQUN4QkgsR0FBRyxDQUFDSSxFQUFFLENBQUMsTUFBTSxFQUFHQyxLQUFLLElBQUs7SUFDeEJMLEdBQUcsQ0FBQ0UsSUFBSSxJQUFJRyxLQUFLO0VBQ25CLENBQUMsQ0FBQztFQUNGTCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTTtJQUNsQixJQUFJO01BQ0ZILEVBQUUsQ0FBQyxJQUFJLEVBQUVMLEVBQUUsQ0FBQ1UsS0FBSyxDQUFDTixHQUFHLENBQUNFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQyxPQUFPSyxHQUFHLEVBQUU7TUFDWk4sRUFBRSxDQUFDTSxHQUFHLENBQUM7SUFDVDtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=","\"use strict\";\n\nmodule.exports = function (res, fn) {\n res.text = '';\n res.setEncoding('utf8');\n res.on('data', chunk => {\n res.text += chunk;\n });\n res.on('end', () => {\n let body;\n let error;\n try {\n body = res.text && JSON.parse(res.text);\n } catch (err) {\n error = err;\n // issue #675: return the raw response if the response parsing fails\n error.rawResponse = res.text || null;\n // issue #876: return the http status code if the response parsing fails\n error.statusCode = res.statusCode;\n } finally {\n fn(error, body);\n }\n });\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIiwiYm9keSIsImVycm9yIiwiSlNPTiIsInBhcnNlIiwiZXJyIiwicmF3UmVzcG9uc2UiLCJzdGF0dXNDb2RlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25vZGUvcGFyc2Vycy9qc29uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcywgZm4pIHtcbiAgcmVzLnRleHQgPSAnJztcbiAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgbGV0IGJvZHk7XG4gICAgbGV0IGVycm9yO1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gcmVzLnRleHQgJiYgSlNPTi5wYXJzZShyZXMudGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVycjtcbiAgICAgIC8vIGlzc3VlICM2NzU6IHJldHVybiB0aGUgcmF3IHJlc3BvbnNlIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICBlcnJvci5yYXdSZXNwb25zZSA9IHJlcy50ZXh0IHx8IG51bGw7XG4gICAgICAvLyBpc3N1ZSAjODc2OiByZXR1cm4gdGhlIGh0dHAgc3RhdHVzIGNvZGUgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSByZXMuc3RhdHVzQ29kZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZm4oZXJyb3IsIGJvZHkpO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFVQyxHQUFHLEVBQUVDLEVBQUUsRUFBRTtFQUNsQ0QsR0FBRyxDQUFDRSxJQUFJLEdBQUcsRUFBRTtFQUNiRixHQUFHLENBQUNHLFdBQVcsQ0FBQyxNQUFNLENBQUM7RUFDdkJILEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLE1BQU0sRUFBR0MsS0FBSyxJQUFLO0lBQ3hCTCxHQUFHLENBQUNFLElBQUksSUFBSUcsS0FBSztFQUNuQixDQUFDLENBQUM7RUFDRkwsR0FBRyxDQUFDSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDbEIsSUFBSUUsSUFBSTtJQUNSLElBQUlDLEtBQUs7SUFDVCxJQUFJO01BQ0ZELElBQUksR0FBR04sR0FBRyxDQUFDRSxJQUFJLElBQUlNLElBQUksQ0FBQ0MsS0FBSyxDQUFDVCxHQUFHLENBQUNFLElBQUksQ0FBQztJQUN6QyxDQUFDLENBQUMsT0FBT1EsR0FBRyxFQUFFO01BQ1pILEtBQUssR0FBR0csR0FBRztNQUNYO01BQ0FILEtBQUssQ0FBQ0ksV0FBVyxHQUFHWCxHQUFHLENBQUNFLElBQUksSUFBSSxJQUFJO01BQ3BDO01BQ0FLLEtBQUssQ0FBQ0ssVUFBVSxHQUFHWixHQUFHLENBQUNZLFVBQVU7SUFDbkMsQ0FBQyxTQUFTO01BQ1JYLEVBQUUsQ0FBQ00sS0FBSyxFQUFFRCxJQUFJLENBQUM7SUFDakI7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\nmodule.exports = (res, fn) => {\n res.text = '';\n res.setEncoding('utf8');\n res.on('data', chunk => {\n res.text += chunk;\n });\n res.on('end', fn);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25vZGUvcGFyc2Vycy90ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gKHJlcywgZm4pID0+IHtcbiAgcmVzLnRleHQgPSAnJztcbiAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCBmbik7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxDQUFDQyxHQUFHLEVBQUVDLEVBQUUsS0FBSztFQUM1QkQsR0FBRyxDQUFDRSxJQUFJLEdBQUcsRUFBRTtFQUNiRixHQUFHLENBQUNHLFdBQVcsQ0FBQyxNQUFNLENBQUM7RUFDdkJILEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLE1BQU0sRUFBR0MsS0FBSyxJQUFLO0lBQ3hCTCxHQUFHLENBQUNFLElBQUksSUFBSUcsS0FBSztFQUNuQixDQUFDLENBQUM7RUFDRkwsR0FBRyxDQUFDSSxFQUFFLENBQUMsS0FBSyxFQUFFSCxFQUFFLENBQUM7QUFDbkIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==","\"use strict\";\n\nmodule.exports = (res, fn) => {\n const data = []; // Binary data needs binary storage\n\n res.on('data', chunk => {\n data.push(chunk);\n });\n res.on('end', () => {\n fn(null, Buffer.concat(data));\n });\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJkYXRhIiwib24iLCJjaHVuayIsInB1c2giLCJCdWZmZXIiLCJjb25jYXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZS9wYXJzZXJzL2ltYWdlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gKHJlcywgZm4pID0+IHtcbiAgY29uc3QgZGF0YSA9IFtdOyAvLyBCaW5hcnkgZGF0YSBuZWVkcyBiaW5hcnkgc3RvcmFnZVxuXG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGRhdGEucHVzaChjaHVuayk7XG4gIH0pO1xuICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICBmbihudWxsLCBCdWZmZXIuY29uY2F0KGRhdGEpKTtcbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxDQUFDQyxHQUFHLEVBQUVDLEVBQUUsS0FBSztFQUM1QixNQUFNQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7O0VBRWpCRixHQUFHLENBQUNHLEVBQUUsQ0FBQyxNQUFNLEVBQUdDLEtBQUssSUFBSztJQUN4QkYsSUFBSSxDQUFDRyxJQUFJLENBQUNELEtBQUssQ0FBQztFQUNsQixDQUFDLENBQUM7RUFDRkosR0FBRyxDQUFDRyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDbEJGLEVBQUUsQ0FBQyxJQUFJLEVBQUVLLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxJQUFJLENBQUMsQ0FBQztFQUMvQixDQUFDLENBQUM7QUFDSixDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\nexports['application/x-www-form-urlencoded'] = require('./urlencoded');\nexports['application/json'] = require('./json');\nexports.text = require('./text');\nexports['application/json-seq'] = exports.text;\nconst binary = require('./image');\nexports['application/octet-stream'] = binary;\nexports['application/pdf'] = binary;\nexports.image = binary;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwicmVxdWlyZSIsInRleHQiLCJiaW5hcnkiLCJpbWFnZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3BhcnNlcnMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0c1snYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ10gPSByZXF1aXJlKCcuL3VybGVuY29kZWQnKTtcbmV4cG9ydHNbJ2FwcGxpY2F0aW9uL2pzb24nXSA9IHJlcXVpcmUoJy4vanNvbicpO1xuZXhwb3J0cy50ZXh0ID0gcmVxdWlyZSgnLi90ZXh0Jyk7XG5cbmV4cG9ydHNbJ2FwcGxpY2F0aW9uL2pzb24tc2VxJ10gPSBleHBvcnRzLnRleHQ7XG5cbmNvbnN0IGJpbmFyeSA9IHJlcXVpcmUoJy4vaW1hZ2UnKTtcblxuZXhwb3J0c1snYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ10gPSBiaW5hcnk7XG5leHBvcnRzWydhcHBsaWNhdGlvbi9wZGYnXSA9IGJpbmFyeTtcbmV4cG9ydHMuaW1hZ2UgPSBiaW5hcnk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUFBLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxHQUFHQyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ3RFRCxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUMvQ0QsT0FBTyxDQUFDRSxJQUFJLEdBQUdELE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFFaENELE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHQSxPQUFPLENBQUNFLElBQUk7QUFFOUMsTUFBTUMsTUFBTSxHQUFHRixPQUFPLENBQUMsU0FBUyxDQUFDO0FBRWpDRCxPQUFPLENBQUMsMEJBQTBCLENBQUMsR0FBR0csTUFBTTtBQUM1Q0gsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUdHLE1BQU07QUFDbkNILE9BQU8sQ0FBQ0ksS0FBSyxHQUFHRCxNQUFNIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst {\n format\n} = require('url');\nconst Stream = require('stream');\nconst https = require('https');\nconst http = require('http');\nconst fs = require('fs');\nconst zlib = require('zlib');\nconst util = require('util');\nconst qs = require('qs');\nconst mime = require('mime');\nlet methods = require('methods');\nconst FormData = require('form-data');\nconst formidable = require('formidable');\nconst debug = require('debug')('superagent');\nconst CookieJar = require('cookiejar');\nconst safeStringify = require('fast-safe-stringify');\nconst utils = require('../utils');\nconst RequestBase = require('../request-base');\nconst http2 = require('./http2wrapper');\nconst {\n decompress\n} = require('./unzip');\nconst Response = require('./response');\nconst {\n mixin,\n hasOwn,\n isBrotliEncoding,\n isGzipOrDeflateEncoding\n} = utils;\nconst {\n chooseDecompresser\n} = require('./decompress');\nfunction request(method, url) {\n // callback\n if (typeof url === 'function') {\n return new exports.Request('GET', method).end(url);\n }\n\n // url first\n if (arguments.length === 1) {\n return new exports.Request('GET', method);\n }\n return new exports.Request(method, url);\n}\nmodule.exports = request;\nexports = module.exports;\n\n/**\n * Expose `Request`.\n */\n\nexports.Request = Request;\n\n/**\n * Expose the agent function\n */\n\nexports.agent = require('./agent');\n\n/**\n * Noop.\n */\n\nfunction noop() {}\n\n/**\n * Expose `Response`.\n */\n\nexports.Response = Response;\n\n/**\n * Define \"form\" mime type.\n */\n\nmime.define({\n 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data']\n}, true);\n\n/**\n * Protocol map.\n */\n\nexports.protocols = {\n 'http:': http,\n 'https:': https,\n 'http2:': http2\n};\n\n/**\n * Default serialization map.\n *\n * superagent.serialize['application/xml'] = function(obj){\n * return 'generated xml here';\n * };\n *\n */\n\nexports.serialize = {\n 'application/x-www-form-urlencoded': obj => {\n return qs.stringify(obj, {\n indices: false,\n strictNullHandling: true\n });\n },\n 'application/json': safeStringify\n};\n\n/**\n * Default parsers.\n *\n * superagent.parse['application/xml'] = function(res, fn){\n * fn(null, res);\n * };\n *\n */\n\nexports.parse = require('./parsers');\n\n/**\n * Default buffering map. Can be used to set certain\n * response types to buffer/not buffer.\n *\n * superagent.buffer['application/xml'] = true;\n */\nexports.buffer = {};\n\n/**\n * Initialize internal header tracking properties on a request instance.\n *\n * @param {Object} req the instance\n * @api private\n */\nfunction _initHeaders(request_) {\n request_._header = {\n // coerces header names to lowercase\n };\n request_.header = {\n // preserves header name case\n };\n}\n\n/**\n * Initialize a new `Request` with the given `method` and `url`.\n *\n * @param {String} method\n * @param {String|Object} url\n * @api public\n */\n\nfunction Request(method, url) {\n Stream.call(this);\n if (typeof url !== 'string') url = format(url);\n this._enableHttp2 = Boolean(process.env.HTTP2_TEST); // internal only\n this._agent = false;\n this._formData = null;\n this.method = method;\n this.url = url;\n _initHeaders(this);\n this.writable = true;\n this._redirects = 0;\n this.redirects(method === 'HEAD' ? 0 : 5);\n this.cookies = '';\n this.qs = {};\n this._query = [];\n this.qsRaw = this._query; // Unused, for backwards compatibility only\n this._redirectList = [];\n this._streamRequest = false;\n this._lookup = undefined;\n this.once('end', this.clearTimeout.bind(this));\n}\n\n/**\n * Inherit from `Stream` (which inherits from `EventEmitter`).\n * Mixin `RequestBase`.\n */\nutil.inherits(Request, Stream);\nmixin(Request.prototype, RequestBase.prototype);\n\n/**\n * Enable or Disable http2.\n *\n * Enable http2.\n *\n * ``` js\n * request.get('http://localhost/')\n * .http2()\n * .end(callback);\n *\n * request.get('http://localhost/')\n * .http2(true)\n * .end(callback);\n * ```\n *\n * Disable http2.\n *\n * ``` js\n * request = request.http2();\n * request.get('http://localhost/')\n * .http2(false)\n * .end(callback);\n * ```\n *\n * @param {Boolean} enable\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.http2 = function (bool) {\n if (exports.protocols['http2:'] === undefined) {\n throw new Error('superagent: this version of Node.js does not support http2');\n }\n this._enableHttp2 = bool === undefined ? true : bool;\n return this;\n};\n\n/**\n * Queue the given `file` as an attachment to the specified `field`,\n * with optional `options` (or filename).\n *\n * ``` js\n * request.post('http://localhost/upload')\n * .attach('field', Buffer.from('<b>Hello world</b>'), 'hello.html')\n * .end(callback);\n * ```\n *\n * A filename may also be used:\n *\n * ``` js\n * request.post('http://localhost/upload')\n * .attach('files', 'image.jpg')\n * .end(callback);\n * ```\n *\n * @param {String} field\n * @param {String|fs.ReadStream|Buffer} file\n * @param {String|Object} options\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.attach = function (field, file, options) {\n if (file) {\n if (this._data) {\n throw new Error(\"superagent can't mix .send() and .attach()\");\n }\n let o = options || {};\n if (typeof options === 'string') {\n o = {\n filename: options\n };\n }\n if (typeof file === 'string') {\n if (!o.filename) o.filename = file;\n debug('creating `fs.ReadStream` instance for file: %s', file);\n file = fs.createReadStream(file);\n file.on('error', error => {\n const formData = this._getFormData();\n formData.emit('error', error);\n });\n } else if (!o.filename && file.path) {\n o.filename = file.path;\n }\n this._getFormData().append(field, file, o);\n }\n return this;\n};\nRequest.prototype._getFormData = function () {\n if (!this._formData) {\n this._formData = new FormData();\n this._formData.on('error', error => {\n debug('FormData error', error);\n if (this.called) {\n // The request has already finished and the callback was called.\n // Silently ignore the error.\n return;\n }\n this.callback(error);\n this.abort();\n });\n }\n return this._formData;\n};\n\n/**\n * Gets/sets the `Agent` to use for this HTTP request. The default (if this\n * function is not called) is to opt out of connection pooling (`agent: false`).\n *\n * @param {http.Agent} agent\n * @return {http.Agent}\n * @api public\n */\n\nRequest.prototype.agent = function (agent) {\n if (arguments.length === 0) return this._agent;\n this._agent = agent;\n return this;\n};\n\n/**\n * Gets/sets the `lookup` function to use custom DNS resolver.\n *\n * @param {Function} lookup\n * @return {Function}\n * @api public\n */\n\nRequest.prototype.lookup = function (lookup) {\n if (arguments.length === 0) return this._lookup;\n this._lookup = lookup;\n return this;\n};\n\n/**\n * Set _Content-Type_ response header passed through `mime.getType()`.\n *\n * Examples:\n *\n * request.post('/')\n * .type('xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * request.post('/')\n * .type('json')\n * .send(jsonstring)\n * .end(callback);\n *\n * request.post('/')\n * .type('application/json')\n * .send(jsonstring)\n * .end(callback);\n *\n * @param {String} type\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.type = function (type) {\n return this.set('Content-Type', type.includes('/') ? type : mime.getType(type));\n};\n\n/**\n * Set _Accept_ response header passed through `mime.getType()`.\n *\n * Examples:\n *\n * superagent.types.json = 'application/json';\n *\n * request.get('/agent')\n * .accept('json')\n * .end(callback);\n *\n * request.get('/agent')\n * .accept('application/json')\n * .end(callback);\n *\n * @param {String} accept\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.accept = function (type) {\n return this.set('Accept', type.includes('/') ? type : mime.getType(type));\n};\n\n/**\n * Add query-string `val`.\n *\n * Examples:\n *\n * request.get('/shoes')\n * .query('size=10')\n * .query({ color: 'blue' })\n *\n * @param {Object|String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.query = function (value) {\n if (typeof value === 'string') {\n this._query.push(value);\n } else {\n Object.assign(this.qs, value);\n }\n return this;\n};\n\n/**\n * Write raw `data` / `encoding` to the socket.\n *\n * @param {Buffer|String} data\n * @param {String} encoding\n * @return {Boolean}\n * @api public\n */\n\nRequest.prototype.write = function (data, encoding) {\n const request_ = this.request();\n if (!this._streamRequest) {\n this._streamRequest = true;\n }\n return request_.write(data, encoding);\n};\n\n/**\n * Pipe the request body to `stream`.\n *\n * @param {Stream} stream\n * @param {Object} options\n * @return {Stream}\n * @api public\n */\n\nRequest.prototype.pipe = function (stream, options) {\n this.piped = true; // HACK...\n this.buffer(false);\n this.end();\n return this._pipeContinue(stream, options);\n};\nRequest.prototype._pipeContinue = function (stream, options) {\n this.req.once('response', res => {\n // redirect\n if (isRedirect(res.statusCode) && this._redirects++ !== this._maxRedirects) {\n return this._redirect(res) === this ? this._pipeContinue(stream, options) : undefined;\n }\n this.res = res;\n this._emitResponse();\n if (this._aborted) return;\n if (this._shouldDecompress(res)) {\n let decompresser = chooseDecompresser(res);\n decompresser.on('error', error => {\n if (error && error.code === 'Z_BUF_ERROR') {\n // unexpected end of file is ignored by browsers and curl\n stream.emit('end');\n return;\n }\n stream.emit('error', error);\n });\n res.pipe(decompresser).pipe(stream, options);\n // don't emit 'end' until decompresser has completed writing all its data.\n decompresser.once('end', () => this.emit('end'));\n } else {\n res.pipe(stream, options);\n res.once('end', () => this.emit('end'));\n }\n });\n return stream;\n};\n\n/**\n * Enable / disable buffering.\n *\n * @return {Boolean} [val]\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.buffer = function (value) {\n this._buffer = value !== false;\n return this;\n};\n\n/**\n * Redirect to `url\n *\n * @param {IncomingMessage} res\n * @return {Request} for chaining\n * @api private\n */\n\nRequest.prototype._redirect = function (res) {\n let url = res.headers.location;\n if (!url) {\n return this.callback(new Error('No location header for redirect'), res);\n }\n debug('redirect %s -> %s', this.url, url);\n\n // location\n url = new URL(url, this.url).href;\n\n // ensure the response is being consumed\n // this is required for Node v0.10+\n res.resume();\n let headers = this.req.getHeaders ? this.req.getHeaders() : this.req._headers;\n const changesOrigin = new URL(url).host !== new URL(this.url).host;\n\n // implementation of 302 following defacto standard\n if (res.statusCode === 301 || res.statusCode === 302) {\n // strip Content-* related fields\n // in case of POST etc\n headers = utils.cleanHeader(headers, changesOrigin);\n\n // force GET\n this.method = this.method === 'HEAD' ? 'HEAD' : 'GET';\n\n // clear data\n this._data = null;\n }\n\n // 303 is always GET\n if (res.statusCode === 303) {\n // strip Content-* related fields\n // in case of POST etc\n headers = utils.cleanHeader(headers, changesOrigin);\n\n // force method\n this.method = 'GET';\n\n // clear data\n this._data = null;\n }\n\n // 307 preserves method\n // 308 preserves method\n delete headers.host;\n delete this.req;\n delete this._formData;\n\n // remove all add header except User-Agent\n _initHeaders(this);\n\n // redirect\n this.res = res;\n this._endCalled = false;\n this.url = url;\n this.qs = {};\n this._query.length = 0;\n this.set(headers);\n this._emitRedirect();\n this._redirectList.push(this.url);\n this.end(this._callback);\n return this;\n};\n\n/**\n * Set Authorization field value with `user` and `pass`.\n *\n * Examples:\n *\n * .auth('tobi', 'learnboost')\n * .auth('tobi:learnboost')\n * .auth('tobi')\n * .auth(accessToken, { type: 'bearer' })\n *\n * @param {String} user\n * @param {String} [pass]\n * @param {Object} [options] options with authorization type 'basic' or 'bearer' ('basic' is default)\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.auth = function (user, pass, options) {\n if (arguments.length === 1) pass = '';\n if (typeof pass === 'object' && pass !== null) {\n // pass is optional and can be replaced with options\n options = pass;\n pass = '';\n }\n if (!options) {\n options = {\n type: 'basic'\n };\n }\n const encoder = string => Buffer.from(string).toString('base64');\n return this._auth(user, pass, options, encoder);\n};\n\n/**\n * Set the certificate authority option for https request.\n *\n * @param {Buffer | Array} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.ca = function (cert) {\n this._ca = cert;\n return this;\n};\n\n/**\n * Set the client certificate key option for https request.\n *\n * @param {Buffer | String} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.key = function (cert) {\n this._key = cert;\n return this;\n};\n\n/**\n * Set the key, certificate, and CA certs of the client in PFX or PKCS12 format.\n *\n * @param {Buffer | String} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.pfx = function (cert) {\n if (typeof cert === 'object' && !Buffer.isBuffer(cert)) {\n this._pfx = cert.pfx;\n this._passphrase = cert.passphrase;\n } else {\n this._pfx = cert;\n }\n return this;\n};\n\n/**\n * Set the client certificate option for https request.\n *\n * @param {Buffer | String} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.cert = function (cert) {\n this._cert = cert;\n return this;\n};\n\n/**\n * Do not reject expired or invalid TLS certs.\n * sets `rejectUnauthorized=true`. Be warned that this allows MITM attacks.\n *\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.disableTLSCerts = function () {\n this._disableTLSCerts = true;\n return this;\n};\n\n/**\n * Return an http[s] request.\n *\n * @return {OutgoingMessage}\n * @api private\n */\n\n// eslint-disable-next-line complexity\nRequest.prototype.request = function () {\n if (this.req) return this.req;\n const options = {};\n try {\n const query = qs.stringify(this.qs, {\n indices: false,\n strictNullHandling: true\n });\n if (query) {\n this.qs = {};\n this._query.push(query);\n }\n this._finalizeQueryString();\n } catch (err) {\n return this.emit('error', err);\n }\n let {\n url: urlString\n } = this;\n const retries = this._retries;\n\n // default to http://\n if (urlString.indexOf('http') !== 0) urlString = `http://${urlString}`;\n const url = new URL(urlString);\n let {\n protocol\n } = url;\n let path = `${url.pathname}${url.search}`;\n\n // support unix sockets\n if (/^https?\\+unix:/.test(protocol) === true) {\n // get the protocol\n protocol = `${protocol.split('+')[0]}:`;\n\n // get the socket path\n options.socketPath = url.hostname.replace(/%2F/g, '/');\n url.host = '';\n url.hostname = '';\n }\n\n // Override IP address of a hostname\n if (this._connectOverride) {\n const {\n hostname\n } = url;\n const match = hostname in this._connectOverride ? this._connectOverride[hostname] : this._connectOverride['*'];\n if (match) {\n // backup the real host\n if (!this._header.host) {\n this.set('host', url.host);\n }\n let newHost;\n let newPort;\n if (typeof match === 'object') {\n newHost = match.host;\n newPort = match.port;\n } else {\n newHost = match;\n newPort = url.port;\n }\n\n // wrap [ipv6]\n url.host = /:/.test(newHost) ? `[${newHost}]` : newHost;\n if (newPort) {\n url.host += `:${newPort}`;\n url.port = newPort;\n }\n url.hostname = newHost;\n }\n }\n\n // options\n options.method = this.method;\n options.port = url.port;\n options.path = path;\n options.host = utils.normalizeHostname(url.hostname); // ex: [::1] -> ::1\n options.ca = this._ca;\n options.key = this._key;\n options.pfx = this._pfx;\n options.cert = this._cert;\n options.passphrase = this._passphrase;\n options.agent = this._agent;\n options.lookup = this._lookup;\n options.rejectUnauthorized = typeof this._disableTLSCerts === 'boolean' ? !this._disableTLSCerts : process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0';\n\n // Allows request.get('https://1.2.3.4/').set('Host', 'example.com')\n if (this._header.host) {\n options.servername = this._header.host.replace(/:\\d+$/, '');\n }\n if (this._trustLocalhost && /^(?:localhost|127\\.0\\.0\\.\\d+|(0*:)+:0*1)$/.test(url.hostname)) {\n options.rejectUnauthorized = false;\n }\n\n // initiate request\n const module_ = this._enableHttp2 ? exports.protocols['http2:'].setProtocol(protocol) : exports.protocols[protocol];\n\n // request\n this.req = module_.request(options);\n const {\n req\n } = this;\n\n // set tcp no delay\n req.setNoDelay(true);\n if (options.method !== 'HEAD') {\n req.setHeader('Accept-Encoding', 'gzip, deflate');\n }\n this.protocol = protocol;\n this.host = url.host;\n\n // expose events\n req.once('drain', () => {\n this.emit('drain');\n });\n req.on('error', error => {\n // flag abortion here for out timeouts\n // because node will emit a faux-error \"socket hang up\"\n // when request is aborted before a connection is made\n if (this._aborted) return;\n // if not the same, we are in the **old** (cancelled) request,\n // so need to continue (same as for above)\n if (this._retries !== retries) return;\n // if we've received a response then we don't want to let\n // an error in the request blow up the response\n if (this.response) return;\n this.callback(error);\n });\n\n // auth\n if (url.username || url.password) {\n this.auth(url.username, url.password);\n }\n if (this.username && this.password) {\n this.auth(this.username, this.password);\n }\n for (const key in this.header) {\n if (hasOwn(this.header, key)) req.setHeader(key, this.header[key]);\n }\n\n // add cookies\n if (this.cookies) {\n if (hasOwn(this._header, 'cookie')) {\n // merge\n const temporaryJar = new CookieJar.CookieJar();\n temporaryJar.setCookies(this._header.cookie.split('; '));\n temporaryJar.setCookies(this.cookies.split('; '));\n req.setHeader('Cookie', temporaryJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString());\n } else {\n req.setHeader('Cookie', this.cookies);\n }\n }\n return req;\n};\n\n/**\n * Invoke the callback with `err` and `res`\n * and handle arity check.\n *\n * @param {Error} err\n * @param {Response} res\n * @api private\n */\n\nRequest.prototype.callback = function (error, res) {\n if (this._shouldRetry(error, res)) {\n return this._retry();\n }\n\n // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime.\n const fn = this._callback || noop;\n this.clearTimeout();\n if (this.called) return console.warn('superagent: double callback bug');\n this.called = true;\n if (!error) {\n try {\n if (!this._isResponseOK(res)) {\n let message = 'Unsuccessful HTTP response';\n if (res) {\n message = http.STATUS_CODES[res.status] || message;\n }\n error = new Error(message);\n error.status = res ? res.status : undefined;\n }\n } catch (err) {\n error = err;\n error.status = error.status || (res ? res.status : undefined);\n }\n }\n\n // It's important that the callback is called outside try/catch\n // to avoid double callback\n if (!error) {\n return fn(null, res);\n }\n error.response = res;\n if (this._maxRetries) error.retries = this._retries - 1;\n\n // only emit error event if there is a listener\n // otherwise we assume the callback to `.end()` will get the error\n if (error && this.listeners('error').length > 0) {\n this.emit('error', error);\n }\n fn(error, res);\n};\n\n/**\n * Check if `obj` is a host object,\n *\n * @param {Object} obj host object\n * @return {Boolean} is a host object\n * @api private\n */\nRequest.prototype._isHost = function (object) {\n return Buffer.isBuffer(object) || object instanceof Stream || object instanceof FormData;\n};\n\n/**\n * Initiate request, invoking callback `fn(err, res)`\n * with an instanceof `Response`.\n *\n * @param {Function} fn\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype._emitResponse = function (body, files) {\n const response = new Response(this);\n this.response = response;\n response.redirects = this._redirectList;\n if (undefined !== body) {\n response.body = body;\n }\n response.files = files;\n if (this._endCalled) {\n response.pipe = function () {\n throw new Error(\"end() has already been called, so it's too late to start piping\");\n };\n }\n this.emit('response', response);\n return response;\n};\n\n/**\n * Emit `redirect` event, passing an instanceof `Response`.\n *\n * @api private\n */\n\nRequest.prototype._emitRedirect = function () {\n const response = new Response(this);\n response.redirects = this._redirectList;\n this.emit('redirect', response);\n};\nRequest.prototype.end = function (fn) {\n this.request();\n debug('%s %s', this.method, this.url);\n if (this._endCalled) {\n throw new Error('.end() was called twice. This is not supported in superagent');\n }\n this._endCalled = true;\n\n // store callback\n this._callback = fn || noop;\n this._end();\n};\nRequest.prototype._end = function () {\n if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called'));\n let data = this._data;\n const {\n req\n } = this;\n const {\n method\n } = this;\n this._setTimeouts();\n\n // body\n if (method !== 'HEAD' && !req._headerSent) {\n // serialize stuff\n if (typeof data !== 'string') {\n let contentType = req.getHeader('Content-Type');\n // Parse out just the content type from the header (ignore the charset)\n if (contentType) contentType = contentType.split(';')[0];\n let serialize = this._serializer || exports.serialize[contentType];\n if (!serialize && isJSON(contentType)) {\n serialize = exports.serialize['application/json'];\n }\n if (serialize) data = serialize(data);\n }\n\n // content-length\n if (data && !req.getHeader('Content-Length')) {\n req.setHeader('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data));\n }\n }\n\n // response\n // eslint-disable-next-line complexity\n req.once('response', res => {\n debug('%s %s -> %s', this.method, this.url, res.statusCode);\n if (this._responseTimeoutTimer) {\n clearTimeout(this._responseTimeoutTimer);\n }\n if (this.piped) {\n return;\n }\n const max = this._maxRedirects;\n const mime = utils.type(res.headers['content-type'] || '') || 'text/plain';\n let type = mime.split('/')[0];\n if (type) type = type.toLowerCase().trim();\n const multipart = type === 'multipart';\n const redirect = isRedirect(res.statusCode);\n const responseType = this._responseType;\n this.res = res;\n\n // redirect\n if (redirect && this._redirects++ !== max) {\n return this._redirect(res);\n }\n if (this.method === 'HEAD') {\n this.emit('end');\n this.callback(null, this._emitResponse());\n return;\n }\n\n // zlib support\n if (this._shouldDecompress(res)) {\n decompress(req, res);\n }\n let buffer = this._buffer;\n if (buffer === undefined && mime in exports.buffer) {\n buffer = Boolean(exports.buffer[mime]);\n }\n let parser = this._parser;\n if (undefined === buffer && parser) {\n console.warn(\"A custom superagent parser has been set, but buffering strategy for the parser hasn't been configured. Call `req.buffer(true or false)` or set `superagent.buffer[mime] = true or false`\");\n buffer = true;\n }\n if (!parser) {\n if (responseType) {\n parser = exports.parse.image; // It's actually a generic Buffer\n buffer = true;\n } else if (multipart) {\n const form = formidable.formidable();\n parser = (res, callback) => {\n // Create a PassThrough stream that acts as a proper HTTP request\n const bridgeStream = new Stream.PassThrough();\n\n // Add HTTP request properties from the current request context\n bridgeStream.method = this.method || 'POST';\n bridgeStream.url = this.url || '/';\n bridgeStream.httpVersion = res.httpVersion || '1.1';\n bridgeStream.headers = res.headers || {};\n bridgeStream.socket = res.socket || {\n readable: true\n };\n\n // Pipe the response data through the bridge stream\n res.pipe(bridgeStream);\n form.parse(bridgeStream, (err, fields, files) => {\n if (err) return callback(err);\n\n // Formidable v3 always returns arrays, but SuperAgent expects single values\n // Flatten single-item arrays to maintain backward compatibility\n const flattenedFields = {};\n if (fields) {\n for (const key in fields) {\n const value = fields[key];\n flattenedFields[key] = Array.isArray(value) && value.length === 1 ? value[0] : value;\n }\n }\n const flattenedFiles = {};\n if (files) {\n for (const key in files) {\n const value = files[key];\n flattenedFiles[key] = Array.isArray(value) && value.length === 1 ? value[0] : value;\n }\n }\n\n // Return flattened fields as the object parameter to match SuperAgent's expected format\n callback(null, flattenedFields, flattenedFiles);\n });\n };\n buffer = true;\n } else if (isBinary(mime)) {\n parser = exports.parse.image;\n buffer = true; // For backwards-compatibility buffering default is ad-hoc MIME-dependent\n } else if (exports.parse[mime]) {\n parser = exports.parse[mime];\n } else if (type === 'text') {\n parser = exports.parse.text;\n buffer = buffer !== false;\n // everyone wants their own white-labeled json\n } else if (isJSON(mime)) {\n parser = exports.parse['application/json'];\n buffer = buffer !== false;\n } else if (buffer) {\n parser = exports.parse.text;\n } else if (undefined === buffer) {\n parser = exports.parse.image; // It's actually a generic Buffer\n buffer = true;\n }\n }\n\n // by default only buffer text/*, json and messed up thing from hell\n if (undefined === buffer && isText(mime) || isJSON(mime)) {\n buffer = true;\n }\n this._resBuffered = buffer;\n let parserHandlesEnd = false;\n if (buffer) {\n // Protectiona against zip bombs and other nuisance\n let responseBytesLeft = this._maxResponseSize || 200000000;\n res.on('data', buf => {\n responseBytesLeft -= buf.byteLength || buf.length > 0 ? buf.length : 0;\n if (responseBytesLeft < 0) {\n // This will propagate through error event\n const error = new Error('Maximum response size reached');\n error.code = 'ETOOLARGE';\n // Parsers aren't required to observe error event,\n // so would incorrectly report success\n parserHandlesEnd = false;\n // Will not emit error event\n res.destroy(error);\n // so we do callback now\n this.callback(error, null);\n }\n });\n }\n if (parser) {\n try {\n // Unbuffered parsers are supposed to emit response early,\n // which is weird BTW, because response.body won't be there.\n parserHandlesEnd = buffer;\n parser(res, (error, object, files) => {\n if (this.timedout) {\n // Timeout has already handled all callbacks\n return;\n }\n\n // Intentional (non-timeout) abort is supposed to preserve partial response,\n // even if it doesn't parse.\n if (error && !this._aborted) {\n return this.callback(error);\n }\n if (parserHandlesEnd) {\n this.emit('end');\n this.callback(null, this._emitResponse(object, files));\n }\n });\n } catch (err) {\n this.callback(err);\n return;\n }\n }\n this.res = res;\n\n // unbuffered\n if (!buffer) {\n debug('unbuffered %s %s', this.method, this.url);\n this.callback(null, this._emitResponse());\n if (multipart) return; // allow multipart to handle end event\n res.once('end', () => {\n debug('end %s %s', this.method, this.url);\n this.emit('end');\n });\n return;\n }\n\n // terminating events\n res.once('error', error => {\n parserHandlesEnd = false;\n this.callback(error, null);\n });\n if (!parserHandlesEnd) res.once('end', () => {\n debug('end %s %s', this.method, this.url);\n // TODO: unless buffering emit earlier to stream\n this.emit('end');\n this.callback(null, this._emitResponse());\n });\n });\n this.emit('request', this);\n const getProgressMonitor = () => {\n const lengthComputable = true;\n const total = req.getHeader('Content-Length');\n let loaded = 0;\n const progress = new Stream.Transform();\n progress._transform = (chunk, encoding, callback) => {\n loaded += chunk.length;\n this.emit('progress', {\n direction: 'upload',\n lengthComputable,\n loaded,\n total\n });\n callback(null, chunk);\n };\n return progress;\n };\n const bufferToChunks = buffer => {\n const chunkSize = 16 * 1024; // default highWaterMark value\n const chunking = new Stream.Readable();\n const totalLength = buffer.length;\n const remainder = totalLength % chunkSize;\n const cutoff = totalLength - remainder;\n for (let i = 0; i < cutoff; i += chunkSize) {\n const chunk = buffer.slice(i, i + chunkSize);\n chunking.push(chunk);\n }\n if (remainder > 0) {\n const remainderBuffer = buffer.slice(-remainder);\n chunking.push(remainderBuffer);\n }\n chunking.push(null); // no more data\n\n return chunking;\n };\n\n // if a FormData instance got created, then we send that as the request body\n const formData = this._formData;\n if (formData) {\n // set headers\n const headers = formData.getHeaders();\n for (const i in headers) {\n if (hasOwn(headers, i)) {\n debug('setting FormData header: \"%s: %s\"', i, headers[i]);\n req.setHeader(i, headers[i]);\n }\n }\n\n // attempt to get \"Content-Length\" header\n formData.getLength((error, length) => {\n // TODO: Add chunked encoding when no length (if err)\n if (error) debug('formData.getLength had error', error, length);\n debug('got FormData Content-Length: %s', length);\n if (typeof length === 'number') {\n req.setHeader('Content-Length', length);\n }\n formData.pipe(getProgressMonitor()).pipe(req);\n });\n } else if (Buffer.isBuffer(data)) {\n bufferToChunks(data).pipe(getProgressMonitor()).pipe(req);\n } else {\n req.end(data);\n }\n};\n\n// Check whether response has a non-0-sized gzip-encoded body\nRequest.prototype._shouldDecompress = res => {\n return hasNonEmptyResponseContent(res) && (isGzipOrDeflateEncoding(res) || isBrotliEncoding(res));\n};\n\n/**\n * Overrides DNS for selected hostnames. Takes object mapping hostnames to IP addresses.\n *\n * When making a request to a URL with a hostname exactly matching a key in the object,\n * use the given IP address to connect, instead of using DNS to resolve the hostname.\n *\n * A special host `*` matches every hostname (keep redirects in mind!)\n *\n * request.connect({\n * 'test.example.com': '127.0.0.1',\n * 'ipv6.example.com': '::1',\n * })\n */\nRequest.prototype.connect = function (connectOverride) {\n if (typeof connectOverride === 'string') {\n this._connectOverride = {\n '*': connectOverride\n };\n } else if (typeof connectOverride === 'object') {\n this._connectOverride = connectOverride;\n } else {\n this._connectOverride = undefined;\n }\n return this;\n};\nRequest.prototype.trustLocalhost = function (toggle) {\n this._trustLocalhost = toggle === undefined ? true : toggle;\n return this;\n};\n\n// generate HTTP verb methods\nif (!methods.includes('del')) {\n // create a copy so we don't cause conflicts with\n // other packages using the methods package and\n // npm 3.x\n methods = [...methods];\n methods.push('del');\n}\nfor (let method of methods) {\n const name = method;\n method = method === 'del' ? 'delete' : method;\n method = method.toUpperCase();\n request[name] = (url, data, fn) => {\n const request_ = request(method, url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) {\n if (method === 'GET' || method === 'HEAD') {\n request_.query(data);\n } else {\n request_.send(data);\n }\n }\n if (fn) request_.end(fn);\n return request_;\n };\n}\n\n/**\n * Check if `mime` is text and should be buffered.\n *\n * @param {String} mime\n * @return {Boolean}\n * @api public\n */\n\nfunction isText(mime) {\n const parts = mime.split('/');\n let type = parts[0];\n if (type) type = type.toLowerCase().trim();\n let subtype = parts[1];\n if (subtype) subtype = subtype.toLowerCase().trim();\n return type === 'text' || subtype === 'x-www-form-urlencoded';\n}\n\n// This is not a catchall, but a start. It might be useful\n// in the long run to have file that includes all binary\n// content types from https://www.iana.org/assignments/media-types/media-types.xhtml\nfunction isBinary(mime) {\n let [registry, name] = mime.split('/');\n if (registry) registry = registry.toLowerCase().trim();\n if (name) name = name.toLowerCase().trim();\n return ['audio', 'font', 'image', 'video'].includes(registry) || ['gz', 'gzip'].includes(name);\n}\n\n/**\n * Check if `mime` is json or has +json structured syntax suffix.\n *\n * @param {String} mime\n * @return {Boolean}\n * @api private\n */\n\nfunction isJSON(mime) {\n // should match /json or +json\n // but not /json-seq\n return /[/+]json($|[^-\\w])/i.test(mime);\n}\n\n/**\n * Check if we should follow the redirect `code`.\n *\n * @param {Number} code\n * @return {Boolean}\n * @api private\n */\n\nfunction isRedirect(code) {\n return [301, 302, 303, 305, 307, 308].includes(code);\n}\nfunction hasNonEmptyResponseContent(res) {\n if (res.statusCode === 204 || res.statusCode === 304) {\n // These aren't supposed to have any body\n return false;\n }\n\n // header content is a string, and distinction between 0 and no information is crucial\n if (res.headers['content-length'] === '0') {\n // We know that the body is empty (unfortunately, this check does not cover chunked encoding)\n return false;\n }\n return true;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXQiLCJyZXF1aXJlIiwiU3RyZWFtIiwiaHR0cHMiLCJodHRwIiwiZnMiLCJ6bGliIiwidXRpbCIsInFzIiwibWltZSIsIm1ldGhvZHMiLCJGb3JtRGF0YSIsImZvcm1pZGFibGUiLCJkZWJ1ZyIsIkNvb2tpZUphciIsInNhZmVTdHJpbmdpZnkiLCJ1dGlscyIsIlJlcXVlc3RCYXNlIiwiaHR0cDIiLCJkZWNvbXByZXNzIiwiUmVzcG9uc2UiLCJtaXhpbiIsImhhc093biIsImlzQnJvdGxpRW5jb2RpbmciLCJpc0d6aXBPckRlZmxhdGVFbmNvZGluZyIsImNob29zZURlY29tcHJlc3NlciIsInJlcXVlc3QiLCJtZXRob2QiLCJ1cmwiLCJleHBvcnRzIiwiUmVxdWVzdCIsImVuZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm1vZHVsZSIsImFnZW50Iiwibm9vcCIsImRlZmluZSIsInByb3RvY29scyIsInNlcmlhbGl6ZSIsIm9iaiIsInN0cmluZ2lmeSIsImluZGljZXMiLCJzdHJpY3ROdWxsSGFuZGxpbmciLCJwYXJzZSIsImJ1ZmZlciIsIl9pbml0SGVhZGVycyIsInJlcXVlc3RfIiwiX2hlYWRlciIsImhlYWRlciIsImNhbGwiLCJfZW5hYmxlSHR0cDIiLCJCb29sZWFuIiwicHJvY2VzcyIsImVudiIsIkhUVFAyX1RFU1QiLCJfYWdlbnQiLCJfZm9ybURhdGEiLCJ3cml0YWJsZSIsIl9yZWRpcmVjdHMiLCJyZWRpcmVjdHMiLCJjb29raWVzIiwiX3F1ZXJ5IiwicXNSYXciLCJfcmVkaXJlY3RMaXN0IiwiX3N0cmVhbVJlcXVlc3QiLCJfbG9va3VwIiwidW5kZWZpbmVkIiwib25jZSIsImNsZWFyVGltZW91dCIsImJpbmQiLCJpbmhlcml0cyIsInByb3RvdHlwZSIsImJvb2wiLCJFcnJvciIsImF0dGFjaCIsImZpZWxkIiwiZmlsZSIsIm9wdGlvbnMiLCJfZGF0YSIsIm8iLCJmaWxlbmFtZSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJvbiIsImVycm9yIiwiZm9ybURhdGEiLCJfZ2V0Rm9ybURhdGEiLCJlbWl0IiwicGF0aCIsImFwcGVuZCIsImNhbGxlZCIsImNhbGxiYWNrIiwiYWJvcnQiLCJsb29rdXAiLCJ0eXBlIiwic2V0IiwiaW5jbHVkZXMiLCJnZXRUeXBlIiwiYWNjZXB0IiwicXVlcnkiLCJ2YWx1ZSIsInB1c2giLCJPYmplY3QiLCJhc3NpZ24iLCJ3cml0ZSIsImRhdGEiLCJlbmNvZGluZyIsInBpcGUiLCJzdHJlYW0iLCJwaXBlZCIsIl9waXBlQ29udGludWUiLCJyZXEiLCJyZXMiLCJpc1JlZGlyZWN0Iiwic3RhdHVzQ29kZSIsIl9tYXhSZWRpcmVjdHMiLCJfcmVkaXJlY3QiLCJfZW1pdFJlc3BvbnNlIiwiX2Fib3J0ZWQiLCJfc2hvdWxkRGVjb21wcmVzcyIsImRlY29tcHJlc3NlciIsImNvZGUiLCJfYnVmZmVyIiwiaGVhZGVycyIsImxvY2F0aW9uIiwiVVJMIiwiaHJlZiIsInJlc3VtZSIsImdldEhlYWRlcnMiLCJfaGVhZGVycyIsImNoYW5nZXNPcmlnaW4iLCJob3N0IiwiY2xlYW5IZWFkZXIiLCJfZW5kQ2FsbGVkIiwiX2VtaXRSZWRpcmVjdCIsIl9jYWxsYmFjayIsImF1dGgiLCJ1c2VyIiwicGFzcyIsImVuY29kZXIiLCJzdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJfYXV0aCIsImNhIiwiY2VydCIsIl9jYSIsImtleSIsIl9rZXkiLCJwZngiLCJpc0J1ZmZlciIsIl9wZngiLCJfcGFzc3BocmFzZSIsInBhc3NwaHJhc2UiLCJfY2VydCIsImRpc2FibGVUTFNDZXJ0cyIsIl9kaXNhYmxlVExTQ2VydHMiLCJfZmluYWxpemVRdWVyeVN0cmluZyIsImVyciIsInVybFN0cmluZyIsInJldHJpZXMiLCJfcmV0cmllcyIsImluZGV4T2YiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwic2VhcmNoIiwidGVzdCIsInNwbGl0Iiwic29ja2V0UGF0aCIsImhvc3RuYW1lIiwicmVwbGFjZSIsIl9jb25uZWN0T3ZlcnJpZGUiLCJtYXRjaCIsIm5ld0hvc3QiLCJuZXdQb3J0IiwicG9ydCIsIm5vcm1hbGl6ZUhvc3RuYW1lIiwicmVqZWN0VW5hdXRob3JpemVkIiwiTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCIsInNlcnZlcm5hbWUiLCJfdHJ1c3RMb2NhbGhvc3QiLCJtb2R1bGVfIiwic2V0UHJvdG9jb2wiLCJzZXROb0RlbGF5Iiwic2V0SGVhZGVyIiwicmVzcG9uc2UiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidGVtcG9yYXJ5SmFyIiwic2V0Q29va2llcyIsImNvb2tpZSIsImdldENvb2tpZXMiLCJDb29raWVBY2Nlc3NJbmZvIiwiQWxsIiwidG9WYWx1ZVN0cmluZyIsIl9zaG91bGRSZXRyeSIsIl9yZXRyeSIsImZuIiwiY29uc29sZSIsIndhcm4iLCJfaXNSZXNwb25zZU9LIiwibWVzc2FnZSIsIlNUQVRVU19DT0RFUyIsInN0YXR1cyIsIl9tYXhSZXRyaWVzIiwibGlzdGVuZXJzIiwiX2lzSG9zdCIsIm9iamVjdCIsImJvZHkiLCJmaWxlcyIsIl9lbmQiLCJfc2V0VGltZW91dHMiLCJfaGVhZGVyU2VudCIsImNvbnRlbnRUeXBlIiwiZ2V0SGVhZGVyIiwiX3NlcmlhbGl6ZXIiLCJpc0pTT04iLCJieXRlTGVuZ3RoIiwiX3Jlc3BvbnNlVGltZW91dFRpbWVyIiwibWF4IiwidG9Mb3dlckNhc2UiLCJ0cmltIiwibXVsdGlwYXJ0IiwicmVkaXJlY3QiLCJyZXNwb25zZVR5cGUiLCJfcmVzcG9uc2VUeXBlIiwicGFyc2VyIiwiX3BhcnNlciIsImltYWdlIiwiZm9ybSIsImJyaWRnZVN0cmVhbSIsIlBhc3NUaHJvdWdoIiwiaHR0cFZlcnNpb24iLCJzb2NrZXQiLCJyZWFkYWJsZSIsImZpZWxkcyIsImZsYXR0ZW5lZEZpZWxkcyIsIkFycmF5IiwiaXNBcnJheSIsImZsYXR0ZW5lZEZpbGVzIiwiaXNCaW5hcnkiLCJ0ZXh0IiwiaXNUZXh0IiwiX3Jlc0J1ZmZlcmVkIiwicGFyc2VySGFuZGxlc0VuZCIsInJlc3BvbnNlQnl0ZXNMZWZ0IiwiX21heFJlc3BvbnNlU2l6ZSIsImJ1ZiIsImRlc3Ryb3kiLCJ0aW1lZG91dCIsImdldFByb2dyZXNzTW9uaXRvciIsImxlbmd0aENvbXB1dGFibGUiLCJ0b3RhbCIsImxvYWRlZCIsInByb2dyZXNzIiwiVHJhbnNmb3JtIiwiX3RyYW5zZm9ybSIsImNodW5rIiwiZGlyZWN0aW9uIiwiYnVmZmVyVG9DaHVua3MiLCJjaHVua1NpemUiLCJjaHVua2luZyIsIlJlYWRhYmxlIiwidG90YWxMZW5ndGgiLCJyZW1haW5kZXIiLCJjdXRvZmYiLCJpIiwic2xpY2UiLCJyZW1haW5kZXJCdWZmZXIiLCJnZXRMZW5ndGgiLCJoYXNOb25FbXB0eVJlc3BvbnNlQ29udGVudCIsImNvbm5lY3QiLCJjb25uZWN0T3ZlcnJpZGUiLCJ0cnVzdExvY2FsaG9zdCIsInRvZ2dsZSIsIm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNlbmQiLCJwYXJ0cyIsInN1YnR5cGUiLCJyZWdpc3RyeSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB7IGZvcm1hdCB9ID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IHFzID0gcmVxdWlyZSgncXMnKTtcbmNvbnN0IG1pbWUgPSByZXF1aXJlKCdtaW1lJyk7XG5sZXQgbWV0aG9kcyA9IHJlcXVpcmUoJ21ldGhvZHMnKTtcbmNvbnN0IEZvcm1EYXRhID0gcmVxdWlyZSgnZm9ybS1kYXRhJyk7XG5jb25zdCBmb3JtaWRhYmxlID0gcmVxdWlyZSgnZm9ybWlkYWJsZScpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzdXBlcmFnZW50Jyk7XG5jb25zdCBDb29raWVKYXIgPSByZXF1aXJlKCdjb29raWVqYXInKTtcbmNvbnN0IHNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5Jyk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbmNvbnN0IFJlcXVlc3RCYXNlID0gcmVxdWlyZSgnLi4vcmVxdWVzdC1iYXNlJyk7XG5jb25zdCBodHRwMiA9IHJlcXVpcmUoJy4vaHR0cDJ3cmFwcGVyJyk7XG5jb25zdCB7IGRlY29tcHJlc3MgfSA9IHJlcXVpcmUoJy4vdW56aXAnKTtcbmNvbnN0IFJlc3BvbnNlID0gcmVxdWlyZSgnLi9yZXNwb25zZScpO1xuXG5jb25zdCB7IG1peGluLCBoYXNPd24sIGlzQnJvdGxpRW5jb2RpbmcsIGlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nIH0gPSB1dGlscztcbmNvbnN0IHsgY2hvb3NlRGVjb21wcmVzc2VyIH0gPSByZXF1aXJlKCcuL2RlY29tcHJlc3MnKTtcblxuZnVuY3Rpb24gcmVxdWVzdChtZXRob2QsIHVybCkge1xuICAvLyBjYWxsYmFja1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KCdHRVQnLCBtZXRob2QpLmVuZCh1cmwpO1xuICB9XG5cbiAgLy8gdXJsIGZpcnN0XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCk7XG4gIH1cblxuICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdChtZXRob2QsIHVybCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdDtcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RgLlxuICovXG5cbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogRXhwb3NlIHRoZSBhZ2VudCBmdW5jdGlvblxuICovXG5cbmV4cG9ydHMuYWdlbnQgPSByZXF1aXJlKCcuL2FnZW50Jyk7XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlYC5cbiAqL1xuXG5leHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG5cbi8qKlxuICogRGVmaW5lIFwiZm9ybVwiIG1pbWUgdHlwZS5cbiAqL1xuXG5taW1lLmRlZmluZShcbiAge1xuICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOiBbJ2Zvcm0nLCAndXJsZW5jb2RlZCcsICdmb3JtLWRhdGEnXVxuICB9LFxuICB0cnVlXG4pO1xuXG4vKipcbiAqIFByb3RvY29sIG1hcC5cbiAqL1xuXG5leHBvcnRzLnByb3RvY29scyA9IHtcbiAgJ2h0dHA6JzogaHR0cCxcbiAgJ2h0dHBzOic6IGh0dHBzLFxuICAnaHR0cDI6JzogaHR0cDJcbn07XG5cbi8qKlxuICogRGVmYXVsdCBzZXJpYWxpemF0aW9uIG1hcC5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL3htbCddID0gZnVuY3Rpb24ob2JqKXtcbiAqICAgICAgIHJldHVybiAnZ2VuZXJhdGVkIHhtbCBoZXJlJztcbiAqICAgICB9O1xuICpcbiAqL1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHtcbiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IChvYmopID0+IHtcbiAgICByZXR1cm4gcXMuc3RyaW5naWZ5KG9iaiwgeyBpbmRpY2VzOiBmYWxzZSwgc3RyaWN0TnVsbEhhbmRsaW5nOiB0cnVlIH0pO1xuICB9LFxuICAnYXBwbGljYXRpb24vanNvbic6IHNhZmVTdHJpbmdpZnlcbn07XG5cbi8qKlxuICogRGVmYXVsdCBwYXJzZXJzLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnBhcnNlWydhcHBsaWNhdGlvbi94bWwnXSA9IGZ1bmN0aW9uKHJlcywgZm4pe1xuICogICAgICAgZm4obnVsbCwgcmVzKTtcbiAqICAgICB9O1xuICpcbiAqL1xuXG5leHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZXJzJyk7XG5cbi8qKlxuICogRGVmYXVsdCBidWZmZXJpbmcgbWFwLiBDYW4gYmUgdXNlZCB0byBzZXQgY2VydGFpblxuICogcmVzcG9uc2UgdHlwZXMgdG8gYnVmZmVyL25vdCBidWZmZXIuXG4gKlxuICogICAgIHN1cGVyYWdlbnQuYnVmZmVyWydhcHBsaWNhdGlvbi94bWwnXSA9IHRydWU7XG4gKi9cbmV4cG9ydHMuYnVmZmVyID0ge307XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBoZWFkZXIgdHJhY2tpbmcgcHJvcGVydGllcyBvbiBhIHJlcXVlc3QgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcSB0aGUgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5pdEhlYWRlcnMocmVxdWVzdF8pIHtcbiAgcmVxdWVzdF8uX2hlYWRlciA9IHtcbiAgICAvLyBjb2VyY2VzIGhlYWRlciBuYW1lcyB0byBsb3dlcmNhc2VcbiAgfTtcbiAgcmVxdWVzdF8uaGVhZGVyID0ge1xuICAgIC8vIHByZXNlcnZlcyBoZWFkZXIgbmFtZSBjYXNlXG4gIH07XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVxdWVzdGAgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAgYW5kIGB1cmxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdXJsXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QobWV0aG9kLCB1cmwpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykgdXJsID0gZm9ybWF0KHVybCk7XG4gIHRoaXMuX2VuYWJsZUh0dHAyID0gQm9vbGVhbihwcm9jZXNzLmVudi5IVFRQMl9URVNUKTsgLy8gaW50ZXJuYWwgb25seVxuICB0aGlzLl9hZ2VudCA9IGZhbHNlO1xuICB0aGlzLl9mb3JtRGF0YSA9IG51bGw7XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnVybCA9IHVybDtcbiAgX2luaXRIZWFkZXJzKHRoaXMpO1xuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5fcmVkaXJlY3RzID0gMDtcbiAgdGhpcy5yZWRpcmVjdHMobWV0aG9kID09PSAnSEVBRCcgPyAwIDogNSk7XG4gIHRoaXMuY29va2llcyA9ICcnO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5ID0gW107XG4gIHRoaXMucXNSYXcgPSB0aGlzLl9xdWVyeTsgLy8gVW51c2VkLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seVxuICB0aGlzLl9yZWRpcmVjdExpc3QgPSBbXTtcbiAgdGhpcy5fc3RyZWFtUmVxdWVzdCA9IGZhbHNlO1xuICB0aGlzLl9sb29rdXAgPSB1bmRlZmluZWQ7XG4gIHRoaXMub25jZSgnZW5kJywgdGhpcy5jbGVhclRpbWVvdXQuYmluZCh0aGlzKSk7XG59XG5cbi8qKlxuICogSW5oZXJpdCBmcm9tIGBTdHJlYW1gICh3aGljaCBpbmhlcml0cyBmcm9tIGBFdmVudEVtaXR0ZXJgKS5cbiAqIE1peGluIGBSZXF1ZXN0QmFzZWAuXG4gKi9cbnV0aWwuaW5oZXJpdHMoUmVxdWVzdCwgU3RyZWFtKTtcblxubWl4aW4oUmVxdWVzdC5wcm90b3R5cGUsIFJlcXVlc3RCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogRW5hYmxlIG9yIERpc2FibGUgaHR0cDIuXG4gKlxuICogRW5hYmxlIGh0dHAyLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5nZXQoJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAqICAgLmh0dHAyKClcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogcmVxdWVzdC5nZXQoJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAqICAgLmh0dHAyKHRydWUpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogRGlzYWJsZSBodHRwMi5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QgPSByZXF1ZXN0Lmh0dHAyKCk7XG4gKiByZXF1ZXN0LmdldCgnaHR0cDovL2xvY2FsaG9zdC8nKVxuICogICAuaHR0cDIoZmFsc2UpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBlbmFibGVcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5odHRwMiA9IGZ1bmN0aW9uIChib29sKSB7XG4gIGlmIChleHBvcnRzLnByb3RvY29sc1snaHR0cDI6J10gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdzdXBlcmFnZW50OiB0aGlzIHZlcnNpb24gb2YgTm9kZS5qcyBkb2VzIG5vdCBzdXBwb3J0IGh0dHAyJ1xuICAgICk7XG4gIH1cblxuICB0aGlzLl9lbmFibGVIdHRwMiA9IGJvb2wgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBib29sO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUXVldWUgdGhlIGdpdmVuIGBmaWxlYCBhcyBhbiBhdHRhY2htZW50IHRvIHRoZSBzcGVjaWZpZWQgYGZpZWxkYCxcbiAqIHdpdGggb3B0aW9uYWwgYG9wdGlvbnNgIChvciBmaWxlbmFtZSkuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmllbGQnLCBCdWZmZXIuZnJvbSgnPGI+SGVsbG8gd29ybGQ8L2I+JyksICdoZWxsby5odG1sJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBBIGZpbGVuYW1lIG1heSBhbHNvIGJlIHVzZWQ6XG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmlsZXMnLCAnaW1hZ2UuanBnJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfGZzLlJlYWRTdHJlYW18QnVmZmVyfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAoZmllbGQsIGZpbGUsIG9wdGlvbnMpIHtcbiAgaWYgKGZpbGUpIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3VwZXJhZ2VudCBjYW4ndCBtaXggLnNlbmQoKSBhbmQgLmF0dGFjaCgpXCIpO1xuICAgIH1cblxuICAgIGxldCBvID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvID0geyBmaWxlbmFtZTogb3B0aW9ucyB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghby5maWxlbmFtZSkgby5maWxlbmFtZSA9IGZpbGU7XG4gICAgICBkZWJ1ZygnY3JlYXRpbmcgYGZzLlJlYWRTdHJlYW1gIGluc3RhbmNlIGZvciBmaWxlOiAlcycsIGZpbGUpO1xuICAgICAgZmlsZSA9IGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZSk7XG4gICAgICBmaWxlLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuX2dldEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghby5maWxlbmFtZSAmJiBmaWxlLnBhdGgpIHtcbiAgICAgIG8uZmlsZW5hbWUgPSBmaWxlLnBhdGg7XG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQoZmllbGQsIGZpbGUsIG8pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fZ2V0Rm9ybURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5fZm9ybURhdGEpIHtcbiAgICB0aGlzLl9mb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIHRoaXMuX2Zvcm1EYXRhLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgZGVidWcoJ0Zvcm1EYXRhIGVycm9yJywgZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuY2FsbGVkKSB7XG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkIGFuZCB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC5cbiAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIHRoZSBlcnJvci5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbiAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9mb3JtRGF0YTtcbn07XG5cbi8qKlxuICogR2V0cy9zZXRzIHRoZSBgQWdlbnRgIHRvIHVzZSBmb3IgdGhpcyBIVFRQIHJlcXVlc3QuIFRoZSBkZWZhdWx0IChpZiB0aGlzXG4gKiBmdW5jdGlvbiBpcyBub3QgY2FsbGVkKSBpcyB0byBvcHQgb3V0IG9mIGNvbm5lY3Rpb24gcG9vbGluZyAoYGFnZW50OiBmYWxzZWApLlxuICpcbiAqIEBwYXJhbSB7aHR0cC5BZ2VudH0gYWdlbnRcbiAqIEByZXR1cm4ge2h0dHAuQWdlbnR9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmFnZW50ID0gZnVuY3Rpb24gKGFnZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5fYWdlbnQ7XG4gIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBHZXRzL3NldHMgdGhlIGBsb29rdXBgIGZ1bmN0aW9uIHRvIHVzZSBjdXN0b20gRE5TIHJlc29sdmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxvb2t1cFxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uIChsb29rdXApIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLl9sb29rdXA7XG4gIHRoaXMuX2xvb2t1cCA9IGxvb2t1cDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBfQ29udGVudC1UeXBlXyByZXNwb25zZSBoZWFkZXIgcGFzc2VkIHRocm91Z2ggYG1pbWUuZ2V0VHlwZSgpYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnLycpXG4gKiAgICAgICAgLnR5cGUoJ3htbCcpXG4gKiAgICAgICAgLnNlbmQoeG1sc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgnanNvbicpXG4gKiAgICAgICAgLnNlbmQoanNvbnN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnLycpXG4gKiAgICAgICAgLnR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICogICAgICAgIC5zZW5kKGpzb25zdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS50eXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgcmV0dXJuIHRoaXMuc2V0KFxuICAgICdDb250ZW50LVR5cGUnLFxuICAgIHR5cGUuaW5jbHVkZXMoJy8nKSA/IHR5cGUgOiBtaW1lLmdldFR5cGUodHlwZSlcbiAgKTtcbn07XG5cbi8qKlxuICogU2V0IF9BY2NlcHRfIHJlc3BvbnNlIGhlYWRlciBwYXNzZWQgdGhyb3VnaCBgbWltZS5nZXRUeXBlKClgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgc3VwZXJhZ2VudC50eXBlcy5qc29uID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy9hZ2VudCcpXG4gKiAgICAgICAgLmFjY2VwdCgnanNvbicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWNjZXB0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgcmV0dXJuIHRoaXMuc2V0KCdBY2NlcHQnLCB0eXBlLmluY2x1ZGVzKCcvJykgPyB0eXBlIDogbWltZS5nZXRUeXBlKHR5cGUpKTtcbn07XG5cbi8qKlxuICogQWRkIHF1ZXJ5LXN0cmluZyBgdmFsYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIHJlcXVlc3QuZ2V0KCcvc2hvZXMnKVxuICogICAgIC5xdWVyeSgnc2l6ZT0xMCcpXG4gKiAgICAgLnF1ZXJ5KHsgY29sb3I6ICdibHVlJyB9KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLl9xdWVyeS5wdXNoKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucXMsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSByYXcgYGRhdGFgIC8gYGVuY29kaW5nYCB0byB0aGUgc29ja2V0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZ30gZGF0YVxuICogQHBhcmFtIHtTdHJpbmd9IGVuY29kaW5nXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCByZXF1ZXN0XyA9IHRoaXMucmVxdWVzdCgpO1xuICBpZiAoIXRoaXMuX3N0cmVhbVJlcXVlc3QpIHtcbiAgICB0aGlzLl9zdHJlYW1SZXF1ZXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZXF1ZXN0Xy53cml0ZShkYXRhLCBlbmNvZGluZyk7XG59O1xuXG4vKipcbiAqIFBpcGUgdGhlIHJlcXVlc3QgYm9keSB0byBgc3RyZWFtYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyZWFtfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKHN0cmVhbSwgb3B0aW9ucykge1xuICB0aGlzLnBpcGVkID0gdHJ1ZTsgLy8gSEFDSy4uLlxuICB0aGlzLmJ1ZmZlcihmYWxzZSk7XG4gIHRoaXMuZW5kKCk7XG4gIHJldHVybiB0aGlzLl9waXBlQ29udGludWUoc3RyZWFtLCBvcHRpb25zKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9waXBlQ29udGludWUgPSBmdW5jdGlvbiAoc3RyZWFtLCBvcHRpb25zKSB7XG4gIHRoaXMucmVxLm9uY2UoJ3Jlc3BvbnNlJywgKHJlcykgPT4ge1xuICAgIC8vIHJlZGlyZWN0XG4gICAgaWYgKFxuICAgICAgaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkgJiZcbiAgICAgIHRoaXMuX3JlZGlyZWN0cysrICE9PSB0aGlzLl9tYXhSZWRpcmVjdHNcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdChyZXMpID09PSB0aGlzXG4gICAgICAgID8gdGhpcy5fcGlwZUNvbnRpbnVlKHN0cmVhbSwgb3B0aW9ucylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG4gICAgdGhpcy5fZW1pdFJlc3BvbnNlKCk7XG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9zaG91bGREZWNvbXByZXNzKHJlcykpIHtcblxuICAgICAgbGV0IGRlY29tcHJlc3NlciA9IGNob29zZURlY29tcHJlc3NlcihyZXMpO1xuXG4gICAgICBkZWNvbXByZXNzZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSAnWl9CVUZfRVJST1InKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpcyBpZ25vcmVkIGJ5IGJyb3dzZXJzIGFuZCBjdXJsXG4gICAgICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLnBpcGUoZGVjb21wcmVzc2VyKS5waXBlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAvLyBkb24ndCBlbWl0ICdlbmQnIHVudGlsIGRlY29tcHJlc3NlciBoYXMgY29tcGxldGVkIHdyaXRpbmcgYWxsIGl0cyBkYXRhLlxuICAgICAgZGVjb21wcmVzc2VyLm9uY2UoJ2VuZCcsICgpID0+IHRoaXMuZW1pdCgnZW5kJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgcmVzLm9uY2UoJ2VuZCcsICgpID0+IHRoaXMuZW1pdCgnZW5kJykpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHJlYW07XG59O1xuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2FibGUgYnVmZmVyaW5nLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFt2YWxdXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYnVmZmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHRoaXMuX2J1ZmZlciA9IHZhbHVlICE9PSBmYWxzZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlZGlyZWN0IHRvIGB1cmxcbiAqXG4gKiBAcGFyYW0ge0luY29taW5nTWVzc2FnZX0gcmVzXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLl9yZWRpcmVjdCA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgbGV0IHVybCA9IHJlcy5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKG5ldyBFcnJvcignTm8gbG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdCcpLCByZXMpO1xuICB9XG5cbiAgZGVidWcoJ3JlZGlyZWN0ICVzIC0+ICVzJywgdGhpcy51cmwsIHVybCk7XG5cbiAgLy8gbG9jYXRpb25cbiAgdXJsID0gbmV3IFVSTCh1cmwsIHRoaXMudXJsKS5ocmVmO1xuXG4gIC8vIGVuc3VyZSB0aGUgcmVzcG9uc2UgaXMgYmVpbmcgY29uc3VtZWRcbiAgLy8gdGhpcyBpcyByZXF1aXJlZCBmb3IgTm9kZSB2MC4xMCtcbiAgcmVzLnJlc3VtZSgpO1xuXG4gIGxldCBoZWFkZXJzID0gdGhpcy5yZXEuZ2V0SGVhZGVycyA/IHRoaXMucmVxLmdldEhlYWRlcnMoKSA6IHRoaXMucmVxLl9oZWFkZXJzO1xuXG4gIGNvbnN0IGNoYW5nZXNPcmlnaW4gPSBuZXcgVVJMKHVybCkuaG9zdCAhPT0gbmV3IFVSTCh0aGlzLnVybCkuaG9zdDtcblxuICAvLyBpbXBsZW1lbnRhdGlvbiBvZiAzMDIgZm9sbG93aW5nIGRlZmFjdG8gc3RhbmRhcmRcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikge1xuICAgIC8vIHN0cmlwIENvbnRlbnQtKiByZWxhdGVkIGZpZWxkc1xuICAgIC8vIGluIGNhc2Ugb2YgUE9TVCBldGNcbiAgICBoZWFkZXJzID0gdXRpbHMuY2xlYW5IZWFkZXIoaGVhZGVycywgY2hhbmdlc09yaWdpbik7XG5cbiAgICAvLyBmb3JjZSBHRVRcbiAgICB0aGlzLm1ldGhvZCA9IHRoaXMubWV0aG9kID09PSAnSEVBRCcgPyAnSEVBRCcgOiAnR0VUJztcblxuICAgIC8vIGNsZWFyIGRhdGFcbiAgICB0aGlzLl9kYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8vIDMwMyBpcyBhbHdheXMgR0VUXG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMzAzKSB7XG4gICAgLy8gc3RyaXAgQ29udGVudC0qIHJlbGF0ZWQgZmllbGRzXG4gICAgLy8gaW4gY2FzZSBvZiBQT1NUIGV0Y1xuICAgIGhlYWRlcnMgPSB1dGlscy5jbGVhbkhlYWRlcihoZWFkZXJzLCBjaGFuZ2VzT3JpZ2luKTtcblxuICAgIC8vIGZvcmNlIG1ldGhvZFxuICAgIHRoaXMubWV0aG9kID0gJ0dFVCc7XG5cbiAgICAvLyBjbGVhciBkYXRhXG4gICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gIH1cblxuICAvLyAzMDcgcHJlc2VydmVzIG1ldGhvZFxuICAvLyAzMDggcHJlc2VydmVzIG1ldGhvZFxuICBkZWxldGUgaGVhZGVycy5ob3N0O1xuXG4gIGRlbGV0ZSB0aGlzLnJlcTtcbiAgZGVsZXRlIHRoaXMuX2Zvcm1EYXRhO1xuXG4gIC8vIHJlbW92ZSBhbGwgYWRkIGhlYWRlciBleGNlcHQgVXNlci1BZ2VudFxuICBfaW5pdEhlYWRlcnModGhpcyk7XG5cbiAgLy8gcmVkaXJlY3RcbiAgdGhpcy5yZXMgPSByZXM7XG4gIHRoaXMuX2VuZENhbGxlZCA9IGZhbHNlO1xuICB0aGlzLnVybCA9IHVybDtcbiAgdGhpcy5xcyA9IHt9O1xuICB0aGlzLl9xdWVyeS5sZW5ndGggPSAwO1xuICB0aGlzLnNldChoZWFkZXJzKTtcbiAgdGhpcy5fZW1pdFJlZGlyZWN0KCk7XG4gIHRoaXMuX3JlZGlyZWN0TGlzdC5wdXNoKHRoaXMudXJsKTtcbiAgdGhpcy5lbmQodGhpcy5fY2FsbGJhY2spO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IEF1dGhvcml6YXRpb24gZmllbGQgdmFsdWUgd2l0aCBgdXNlcmAgYW5kIGBwYXNzYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIC5hdXRoKCd0b2JpJywgJ2xlYXJuYm9vc3QnKVxuICogICAuYXV0aCgndG9iaTpsZWFybmJvb3N0JylcbiAqICAgLmF1dGgoJ3RvYmknKVxuICogICAuYXV0aChhY2Nlc3NUb2tlbiwgeyB0eXBlOiAnYmVhcmVyJyB9KVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gW3Bhc3NdXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgd2l0aCBhdXRob3JpemF0aW9uIHR5cGUgJ2Jhc2ljJyBvciAnYmVhcmVyJyAoJ2Jhc2ljJyBpcyBkZWZhdWx0KVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmF1dGggPSBmdW5jdGlvbiAodXNlciwgcGFzcywgb3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgcGFzcyA9ICcnO1xuICBpZiAodHlwZW9mIHBhc3MgPT09ICdvYmplY3QnICYmIHBhc3MgIT09IG51bGwpIHtcbiAgICAvLyBwYXNzIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHBhc3M7XG4gICAgcGFzcyA9ICcnO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHsgdHlwZTogJ2Jhc2ljJyB9O1xuICB9XG5cbiAgY29uc3QgZW5jb2RlciA9IChzdHJpbmcpID0+IEJ1ZmZlci5mcm9tKHN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIHJldHVybiB0aGlzLl9hdXRoKHVzZXIsIHBhc3MsIG9wdGlvbnMsIGVuY29kZXIpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eSBvcHRpb24gZm9yIGh0dHBzIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBBcnJheX0gY2VydFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNhID0gZnVuY3Rpb24gKGNlcnQpIHtcbiAgdGhpcy5fY2EgPSBjZXJ0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjbGllbnQgY2VydGlmaWNhdGUga2V5IG9wdGlvbiBmb3IgaHR0cHMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IFN0cmluZ30gY2VydFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uIChjZXJ0KSB7XG4gIHRoaXMuX2tleSA9IGNlcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGtleSwgY2VydGlmaWNhdGUsIGFuZCBDQSBjZXJ0cyBvZiB0aGUgY2xpZW50IGluIFBGWCBvciBQS0NTMTIgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucGZ4ID0gZnVuY3Rpb24gKGNlcnQpIHtcbiAgaWYgKHR5cGVvZiBjZXJ0ID09PSAnb2JqZWN0JyAmJiAhQnVmZmVyLmlzQnVmZmVyKGNlcnQpKSB7XG4gICAgdGhpcy5fcGZ4ID0gY2VydC5wZng7XG4gICAgdGhpcy5fcGFzc3BocmFzZSA9IGNlcnQucGFzc3BocmFzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9wZnggPSBjZXJ0O1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIG9wdGlvbiBmb3IgaHR0cHMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IFN0cmluZ30gY2VydFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNlcnQgPSBmdW5jdGlvbiAoY2VydCkge1xuICB0aGlzLl9jZXJ0ID0gY2VydDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERvIG5vdCByZWplY3QgZXhwaXJlZCBvciBpbnZhbGlkIFRMUyBjZXJ0cy5cbiAqIHNldHMgYHJlamVjdFVuYXV0aG9yaXplZD10cnVlYC4gQmUgd2FybmVkIHRoYXQgdGhpcyBhbGxvd3MgTUlUTSBhdHRhY2tzLlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5kaXNhYmxlVExTQ2VydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2Rpc2FibGVUTFNDZXJ0cyA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gaHR0cFtzXSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm4ge091dGdvaW5nTWVzc2FnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5SZXF1ZXN0LnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5yZXEpIHJldHVybiB0aGlzLnJlcTtcblxuICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBxdWVyeSA9IHFzLnN0cmluZ2lmeSh0aGlzLnFzLCB7XG4gICAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICAgIHN0cmljdE51bGxIYW5kbGluZzogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgdGhpcy5xcyA9IHt9O1xuICAgICAgdGhpcy5fcXVlcnkucHVzaChxdWVyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmluYWxpemVRdWVyeVN0cmluZygpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cblxuICBsZXQgeyB1cmw6IHVybFN0cmluZyB9ID0gdGhpcztcbiAgY29uc3QgcmV0cmllcyA9IHRoaXMuX3JldHJpZXM7XG5cbiAgLy8gZGVmYXVsdCB0byBodHRwOi8vXG4gIGlmICh1cmxTdHJpbmcuaW5kZXhPZignaHR0cCcpICE9PSAwKSB1cmxTdHJpbmcgPSBgaHR0cDovLyR7dXJsU3RyaW5nfWA7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTtcbiAgbGV0IHsgcHJvdG9jb2wgfSA9IHVybDtcbiAgbGV0IHBhdGggPSBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWA7XG5cbiAgLy8gc3VwcG9ydCB1bml4IHNvY2tldHNcbiAgaWYgKC9eaHR0cHM/XFwrdW5peDovLnRlc3QocHJvdG9jb2wpID09PSB0cnVlKSB7XG4gICAgLy8gZ2V0IHRoZSBwcm90b2NvbFxuICAgIHByb3RvY29sID0gYCR7cHJvdG9jb2wuc3BsaXQoJysnKVswXX06YDtcblxuICAgIC8vIGdldCB0aGUgc29ja2V0IHBhdGhcbiAgICBvcHRpb25zLnNvY2tldFBhdGggPSB1cmwuaG9zdG5hbWUucmVwbGFjZSgvJTJGL2csICcvJyk7XG4gICAgdXJsLmhvc3QgPSAnJztcbiAgICB1cmwuaG9zdG5hbWUgPSAnJztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIElQIGFkZHJlc3Mgb2YgYSBob3N0bmFtZVxuICBpZiAodGhpcy5fY29ubmVjdE92ZXJyaWRlKSB7XG4gICAgY29uc3QgeyBob3N0bmFtZSB9ID0gdXJsO1xuICAgIGNvbnN0IG1hdGNoID1cbiAgICAgIGhvc3RuYW1lIGluIHRoaXMuX2Nvbm5lY3RPdmVycmlkZVxuICAgICAgICA/IHRoaXMuX2Nvbm5lY3RPdmVycmlkZVtob3N0bmFtZV1cbiAgICAgICAgOiB0aGlzLl9jb25uZWN0T3ZlcnJpZGVbJyonXTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIGJhY2t1cCB0aGUgcmVhbCBob3N0XG4gICAgICBpZiAoIXRoaXMuX2hlYWRlci5ob3N0KSB7XG4gICAgICAgIHRoaXMuc2V0KCdob3N0JywgdXJsLmhvc3QpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3SG9zdDtcbiAgICAgIGxldCBuZXdQb3J0O1xuXG4gICAgICBpZiAodHlwZW9mIG1hdGNoID09PSAnb2JqZWN0Jykge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2guaG9zdDtcbiAgICAgICAgbmV3UG9ydCA9IG1hdGNoLnBvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2g7XG4gICAgICAgIG5ld1BvcnQgPSB1cmwucG9ydDtcbiAgICAgIH1cblxuICAgICAgLy8gd3JhcCBbaXB2Nl1cbiAgICAgIHVybC5ob3N0ID0gLzovLnRlc3QobmV3SG9zdCkgPyBgWyR7bmV3SG9zdH1dYCA6IG5ld0hvc3Q7XG4gICAgICBpZiAobmV3UG9ydCkge1xuICAgICAgICB1cmwuaG9zdCArPSBgOiR7bmV3UG9ydH1gO1xuICAgICAgICB1cmwucG9ydCA9IG5ld1BvcnQ7XG4gICAgICB9XG5cbiAgICAgIHVybC5ob3N0bmFtZSA9IG5ld0hvc3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gb3B0aW9uc1xuICBvcHRpb25zLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICBvcHRpb25zLnBvcnQgPSB1cmwucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gcGF0aDtcbiAgb3B0aW9ucy5ob3N0ID0gdXRpbHMubm9ybWFsaXplSG9zdG5hbWUodXJsLmhvc3RuYW1lKTsgLy8gZXg6IFs6OjFdIC0+IDo6MVxuICBvcHRpb25zLmNhID0gdGhpcy5fY2E7XG4gIG9wdGlvbnMua2V5ID0gdGhpcy5fa2V5O1xuICBvcHRpb25zLnBmeCA9IHRoaXMuX3BmeDtcbiAgb3B0aW9ucy5jZXJ0ID0gdGhpcy5fY2VydDtcbiAgb3B0aW9ucy5wYXNzcGhyYXNlID0gdGhpcy5fcGFzc3BocmFzZTtcbiAgb3B0aW9ucy5hZ2VudCA9IHRoaXMuX2FnZW50O1xuICBvcHRpb25zLmxvb2t1cCA9IHRoaXMuX2xvb2t1cDtcbiAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPVxuICAgIHR5cGVvZiB0aGlzLl9kaXNhYmxlVExTQ2VydHMgPT09ICdib29sZWFuJ1xuICAgICAgPyAhdGhpcy5fZGlzYWJsZVRMU0NlcnRzXG4gICAgICA6IHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgIT09ICcwJztcblxuICAvLyBBbGxvd3MgcmVxdWVzdC5nZXQoJ2h0dHBzOi8vMS4yLjMuNC8nKS5zZXQoJ0hvc3QnLCAnZXhhbXBsZS5jb20nKVxuICBpZiAodGhpcy5faGVhZGVyLmhvc3QpIHtcbiAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLl9oZWFkZXIuaG9zdC5yZXBsYWNlKC86XFxkKyQvLCAnJyk7XG4gIH1cblxuICBpZiAoXG4gICAgdGhpcy5fdHJ1c3RMb2NhbGhvc3QgJiZcbiAgICAvXig/OmxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLlxcZCt8KDAqOikrOjAqMSkkLy50ZXN0KHVybC5ob3N0bmFtZSlcbiAgKSB7XG4gICAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGluaXRpYXRlIHJlcXVlc3RcbiAgY29uc3QgbW9kdWxlXyA9IHRoaXMuX2VuYWJsZUh0dHAyXG4gICAgPyBleHBvcnRzLnByb3RvY29sc1snaHR0cDI6J10uc2V0UHJvdG9jb2wocHJvdG9jb2wpXG4gICAgOiBleHBvcnRzLnByb3RvY29sc1twcm90b2NvbF07XG5cbiAgLy8gcmVxdWVzdFxuICB0aGlzLnJlcSA9IG1vZHVsZV8ucmVxdWVzdChvcHRpb25zKTtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG5cbiAgLy8gc2V0IHRjcCBubyBkZWxheVxuICByZXEuc2V0Tm9EZWxheSh0cnVlKTtcblxuICBpZiAob3B0aW9ucy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIHJlcS5zZXRIZWFkZXIoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLCBkZWZsYXRlJyk7XG4gIH1cblxuICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gIHRoaXMuaG9zdCA9IHVybC5ob3N0O1xuXG4gIC8vIGV4cG9zZSBldmVudHNcbiAgcmVxLm9uY2UoJ2RyYWluJywgKCkgPT4ge1xuICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgfSk7XG5cbiAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgIC8vIGZsYWcgYWJvcnRpb24gaGVyZSBmb3Igb3V0IHRpbWVvdXRzXG4gICAgLy8gYmVjYXVzZSBub2RlIHdpbGwgZW1pdCBhIGZhdXgtZXJyb3IgXCJzb2NrZXQgaGFuZyB1cFwiXG4gICAgLy8gd2hlbiByZXF1ZXN0IGlzIGFib3J0ZWQgYmVmb3JlIGEgY29ubmVjdGlvbiBpcyBtYWRlXG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcbiAgICAvLyBpZiBub3QgdGhlIHNhbWUsIHdlIGFyZSBpbiB0aGUgKipvbGQqKiAoY2FuY2VsbGVkKSByZXF1ZXN0LFxuICAgIC8vIHNvIG5lZWQgdG8gY29udGludWUgKHNhbWUgYXMgZm9yIGFib3ZlKVxuICAgIGlmICh0aGlzLl9yZXRyaWVzICE9PSByZXRyaWVzKSByZXR1cm47XG4gICAgLy8gaWYgd2UndmUgcmVjZWl2ZWQgYSByZXNwb25zZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gbGV0XG4gICAgLy8gYW4gZXJyb3IgaW4gdGhlIHJlcXVlc3QgYmxvdyB1cCB0aGUgcmVzcG9uc2VcbiAgICBpZiAodGhpcy5yZXNwb25zZSkgcmV0dXJuO1xuICAgIHRoaXMuY2FsbGJhY2soZXJyb3IpO1xuICB9KTtcblxuICAvLyBhdXRoXG4gIGlmICh1cmwudXNlcm5hbWUgfHwgdXJsLnBhc3N3b3JkKSB7XG4gICAgdGhpcy5hdXRoKHVybC51c2VybmFtZSwgdXJsLnBhc3N3b3JkKTtcbiAgfVxuXG4gIGlmICh0aGlzLnVzZXJuYW1lICYmIHRoaXMucGFzc3dvcmQpIHtcbiAgICB0aGlzLmF1dGgodGhpcy51c2VybmFtZSwgdGhpcy5wYXNzd29yZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmhlYWRlcikge1xuICAgIGlmIChoYXNPd24odGhpcy5oZWFkZXIsIGtleSkpIHJlcS5zZXRIZWFkZXIoa2V5LCB0aGlzLmhlYWRlcltrZXldKTtcbiAgfVxuXG4gIC8vIGFkZCBjb29raWVzXG4gIGlmICh0aGlzLmNvb2tpZXMpIHtcbiAgICBpZiAoaGFzT3duKHRoaXMuX2hlYWRlciwgJ2Nvb2tpZScpKSB7XG4gICAgICAvLyBtZXJnZVxuICAgICAgY29uc3QgdGVtcG9yYXJ5SmFyID0gbmV3IENvb2tpZUphci5Db29raWVKYXIoKTtcbiAgICAgIHRlbXBvcmFyeUphci5zZXRDb29raWVzKHRoaXMuX2hlYWRlci5jb29raWUuc3BsaXQoJzsgJykpO1xuICAgICAgdGVtcG9yYXJ5SmFyLnNldENvb2tpZXModGhpcy5jb29raWVzLnNwbGl0KCc7ICcpKTtcbiAgICAgIHJlcS5zZXRIZWFkZXIoXG4gICAgICAgICdDb29raWUnLFxuICAgICAgICB0ZW1wb3JhcnlKYXIuZ2V0Q29va2llcyhDb29raWVKYXIuQ29va2llQWNjZXNzSW5mby5BbGwpLnRvVmFsdWVTdHJpbmcoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLnNldEhlYWRlcignQ29va2llJywgdGhpcy5jb29raWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVxO1xufTtcblxuLyoqXG4gKiBJbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggYGVycmAgYW5kIGByZXNgXG4gKiBhbmQgaGFuZGxlIGFyaXR5IGNoZWNrLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzKSB7XG4gIGlmICh0aGlzLl9zaG91bGRSZXRyeShlcnJvciwgcmVzKSkge1xuICAgIHJldHVybiB0aGlzLl9yZXRyeSgpO1xuICB9XG5cbiAgLy8gQXZvaWQgdGhlIGVycm9yIHdoaWNoIGlzIGVtaXR0ZWQgZnJvbSAnc29ja2V0IGhhbmcgdXAnIHRvIGNhdXNlIHRoZSBmbiB1bmRlZmluZWQgZXJyb3Igb24gSlMgcnVudGltZS5cbiAgY29uc3QgZm4gPSB0aGlzLl9jYWxsYmFjayB8fCBub29wO1xuICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICBpZiAodGhpcy5jYWxsZWQpIHJldHVybiBjb25zb2xlLndhcm4oJ3N1cGVyYWdlbnQ6IGRvdWJsZSBjYWxsYmFjayBidWcnKTtcbiAgdGhpcy5jYWxsZWQgPSB0cnVlO1xuXG4gIGlmICghZXJyb3IpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLl9pc1Jlc3BvbnNlT0socmVzKSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICdVbnN1Y2Nlc3NmdWwgSFRUUCByZXNwb25zZSc7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBtZXNzYWdlID0gaHR0cC5TVEFUVVNfQ09ERVNbcmVzLnN0YXR1c10gfHwgbWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICBlcnJvci5zdGF0dXMgPSByZXMgPyByZXMuc3RhdHVzIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICBlcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXMgfHwgKHJlcyA/IHJlcy5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBvdXRzaWRlIHRyeS9jYXRjaFxuICAvLyB0byBhdm9pZCBkb3VibGUgY2FsbGJhY2tcbiAgaWYgKCFlcnJvcikge1xuICAgIHJldHVybiBmbihudWxsLCByZXMpO1xuICB9XG5cbiAgZXJyb3IucmVzcG9uc2UgPSByZXM7XG4gIGlmICh0aGlzLl9tYXhSZXRyaWVzKSBlcnJvci5yZXRyaWVzID0gdGhpcy5fcmV0cmllcyAtIDE7XG5cbiAgLy8gb25seSBlbWl0IGVycm9yIGV2ZW50IGlmIHRoZXJlIGlzIGEgbGlzdGVuZXJcbiAgLy8gb3RoZXJ3aXNlIHdlIGFzc3VtZSB0aGUgY2FsbGJhY2sgdG8gYC5lbmQoKWAgd2lsbCBnZXQgdGhlIGVycm9yXG4gIGlmIChlcnJvciAmJiB0aGlzLmxpc3RlbmVycygnZXJyb3InKS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgfVxuXG4gIGZuKGVycm9yLCByZXMpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIGhvc3Qgb2JqZWN0LFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogaG9zdCBvYmplY3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGlzIGEgaG9zdCBvYmplY3RcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5SZXF1ZXN0LnByb3RvdHlwZS5faXNIb3N0ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIEJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgU3RyZWFtIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgRm9ybURhdGFcbiAgKTtcbn07XG5cbi8qKlxuICogSW5pdGlhdGUgcmVxdWVzdCwgaW52b2tpbmcgY2FsbGJhY2sgYGZuKGVyciwgcmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuX2VtaXRSZXNwb25zZSA9IGZ1bmN0aW9uIChib2R5LCBmaWxlcykge1xuICBjb25zdCByZXNwb25zZSA9IG5ldyBSZXNwb25zZSh0aGlzKTtcbiAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdExpc3Q7XG4gIGlmICh1bmRlZmluZWQgIT09IGJvZHkpIHtcbiAgICByZXNwb25zZS5ib2R5ID0gYm9keTtcbiAgfVxuXG4gIHJlc3BvbnNlLmZpbGVzID0gZmlsZXM7XG4gIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICByZXNwb25zZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImVuZCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLCBzbyBpdCdzIHRvbyBsYXRlIHRvIHN0YXJ0IHBpcGluZ1wiXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICB0aGlzLmVtaXQoJ3Jlc3BvbnNlJywgcmVzcG9uc2UpO1xuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG4vKipcbiAqIEVtaXQgYHJlZGlyZWN0YCBldmVudCwgcGFzc2luZyBhbiBpbnN0YW5jZW9mIGBSZXNwb25zZWAuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuX2VtaXRSZWRpcmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UodGhpcyk7XG4gIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0TGlzdDtcbiAgdGhpcy5lbWl0KCdyZWRpcmVjdCcsIHJlc3BvbnNlKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChmbikge1xuICB0aGlzLnJlcXVlc3QoKTtcbiAgZGVidWcoJyVzICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsKTtcblxuICBpZiAodGhpcy5fZW5kQ2FsbGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJy5lbmQoKSB3YXMgY2FsbGVkIHR3aWNlLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gc3VwZXJhZ2VudCdcbiAgICApO1xuICB9XG5cbiAgdGhpcy5fZW5kQ2FsbGVkID0gdHJ1ZTtcblxuICAvLyBzdG9yZSBjYWxsYmFja1xuICB0aGlzLl9jYWxsYmFjayA9IGZuIHx8IG5vb3A7XG5cbiAgdGhpcy5fZW5kKCk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fYWJvcnRlZClcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhcbiAgICAgIG5ldyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCBldmVuIGJlZm9yZSAuZW5kKCkgd2FzIGNhbGxlZCcpXG4gICAgKTtcblxuICBsZXQgZGF0YSA9IHRoaXMuX2RhdGE7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gdGhpcztcblxuICB0aGlzLl9zZXRUaW1lb3V0cygpO1xuXG4gIC8vIGJvZHlcbiAgaWYgKG1ldGhvZCAhPT0gJ0hFQUQnICYmICFyZXEuX2hlYWRlclNlbnQpIHtcbiAgICAvLyBzZXJpYWxpemUgc3R1ZmZcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICAgIC8vIFBhcnNlIG91dCBqdXN0IHRoZSBjb250ZW50IHR5cGUgZnJvbSB0aGUgaGVhZGVyIChpZ25vcmUgdGhlIGNoYXJzZXQpXG4gICAgICBpZiAoY29udGVudFR5cGUpIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXTtcbiAgICAgIGxldCBzZXJpYWxpemUgPSB0aGlzLl9zZXJpYWxpemVyIHx8IGV4cG9ydHMuc2VyaWFsaXplW2NvbnRlbnRUeXBlXTtcbiAgICAgIGlmICghc2VyaWFsaXplICYmIGlzSlNPTihjb250ZW50VHlwZSkpIHtcbiAgICAgICAgc2VyaWFsaXplID0gZXhwb3J0cy5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlcmlhbGl6ZSkgZGF0YSA9IHNlcmlhbGl6ZShkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBjb250ZW50LWxlbmd0aFxuICAgIGlmIChkYXRhICYmICFyZXEuZ2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSB7XG4gICAgICByZXEuc2V0SGVhZGVyKFxuICAgICAgICAnQ29udGVudC1MZW5ndGgnLFxuICAgICAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YSkgPyBkYXRhLmxlbmd0aCA6IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlc3BvbnNlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHJlcS5vbmNlKCdyZXNwb25zZScsIChyZXMpID0+IHtcbiAgICBkZWJ1ZygnJXMgJXMgLT4gJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwsIHJlcy5zdGF0dXNDb2RlKTtcblxuICAgIGlmICh0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waXBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heCA9IHRoaXMuX21heFJlZGlyZWN0cztcbiAgICBjb25zdCBtaW1lID0gdXRpbHMudHlwZShyZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10gfHwgJycpIHx8ICd0ZXh0L3BsYWluJztcbiAgICBsZXQgdHlwZSA9IG1pbWUuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAodHlwZSkgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlwYXJ0ID0gdHlwZSA9PT0gJ211bHRpcGFydCc7XG4gICAgY29uc3QgcmVkaXJlY3QgPSBpc1JlZGlyZWN0KHJlcy5zdGF0dXNDb2RlKTtcbiAgICBjb25zdCByZXNwb25zZVR5cGUgPSB0aGlzLl9yZXNwb25zZVR5cGU7XG5cbiAgICB0aGlzLnJlcyA9IHJlcztcblxuICAgIC8vIHJlZGlyZWN0XG4gICAgaWYgKHJlZGlyZWN0ICYmIHRoaXMuX3JlZGlyZWN0cysrICE9PSBtYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdChyZXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2UoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gemxpYiBzdXBwb3J0XG4gICAgaWYgKHRoaXMuX3Nob3VsZERlY29tcHJlc3MocmVzKSkge1xuICAgICAgZGVjb21wcmVzcyhyZXEsIHJlcyk7XG4gICAgfVxuXG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuX2J1ZmZlcjtcbiAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgJiYgbWltZSBpbiBleHBvcnRzLmJ1ZmZlcikge1xuICAgICAgYnVmZmVyID0gQm9vbGVhbihleHBvcnRzLmJ1ZmZlclttaW1lXSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlciA9IHRoaXMuX3BhcnNlcjtcbiAgICBpZiAodW5kZWZpbmVkID09PSBidWZmZXIgJiYgcGFyc2VyKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiQSBjdXN0b20gc3VwZXJhZ2VudCBwYXJzZXIgaGFzIGJlZW4gc2V0LCBidXQgYnVmZmVyaW5nIHN0cmF0ZWd5IGZvciB0aGUgcGFyc2VyIGhhc24ndCBiZWVuIGNvbmZpZ3VyZWQuIENhbGwgYHJlcS5idWZmZXIodHJ1ZSBvciBmYWxzZSlgIG9yIHNldCBgc3VwZXJhZ2VudC5idWZmZXJbbWltZV0gPSB0cnVlIG9yIGZhbHNlYFwiXG4gICAgICApO1xuICAgICAgYnVmZmVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlcikge1xuICAgICAgaWYgKHJlc3BvbnNlVHlwZSkge1xuICAgICAgICBwYXJzZXIgPSBleHBvcnRzLnBhcnNlLmltYWdlOyAvLyBJdCdzIGFjdHVhbGx5IGEgZ2VuZXJpYyBCdWZmZXJcbiAgICAgICAgYnVmZmVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobXVsdGlwYXJ0KSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBmb3JtaWRhYmxlLmZvcm1pZGFibGUoKTtcbiAgICAgICAgcGFyc2VyID0gKHJlcywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBQYXNzVGhyb3VnaCBzdHJlYW0gdGhhdCBhY3RzIGFzIGEgcHJvcGVyIEhUVFAgcmVxdWVzdFxuICAgICAgICAgIGNvbnN0IGJyaWRnZVN0cmVhbSA9IG5ldyBTdHJlYW0uUGFzc1Rocm91Z2goKTtcblxuICAgICAgICAgIC8vIEFkZCBIVFRQIHJlcXVlc3QgcHJvcGVydGllcyBmcm9tIHRoZSBjdXJyZW50IHJlcXVlc3QgY29udGV4dFxuICAgICAgICAgIGJyaWRnZVN0cmVhbS5tZXRob2QgPSB0aGlzLm1ldGhvZCB8fCAnUE9TVCc7XG4gICAgICAgICAgYnJpZGdlU3RyZWFtLnVybCA9IHRoaXMudXJsIHx8ICcvJztcbiAgICAgICAgICBicmlkZ2VTdHJlYW0uaHR0cFZlcnNpb24gPSByZXMuaHR0cFZlcnNpb24gfHwgJzEuMSc7XG4gICAgICAgICAgYnJpZGdlU3RyZWFtLmhlYWRlcnMgPSByZXMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgICBicmlkZ2VTdHJlYW0uc29ja2V0ID0gcmVzLnNvY2tldCB8fCB7IHJlYWRhYmxlOiB0cnVlIH07XG5cbiAgICAgICAgICAvLyBQaXBlIHRoZSByZXNwb25zZSBkYXRhIHRocm91Z2ggdGhlIGJyaWRnZSBzdHJlYW1cbiAgICAgICAgICByZXMucGlwZShicmlkZ2VTdHJlYW0pO1xuXG4gICAgICAgICAgZm9ybS5wYXJzZShicmlkZ2VTdHJlYW0sIChlcnIsIGZpZWxkcywgZmlsZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXG4gICAgICAgICAgICAvLyBGb3JtaWRhYmxlIHYzIGFsd2F5cyByZXR1cm5zIGFycmF5cywgYnV0IFN1cGVyQWdlbnQgZXhwZWN0cyBzaW5nbGUgdmFsdWVzXG4gICAgICAgICAgICAvLyBGbGF0dGVuIHNpbmdsZS1pdGVtIGFycmF5cyB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWRGaWVsZHMgPSB7fTtcbiAgICAgICAgICAgIGlmIChmaWVsZHMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZHNba2V5XTtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWRGaWVsZHNba2V5XSA9IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkRmlsZXMgPSB7fTtcbiAgICAgICAgICAgIGlmIChmaWxlcykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWRGaWxlc1trZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXR1cm4gZmxhdHRlbmVkIGZpZWxkcyBhcyB0aGUgb2JqZWN0IHBhcmFtZXRlciB0byBtYXRjaCBTdXBlckFnZW50J3MgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBmbGF0dGVuZWRGaWVsZHMsIGZsYXR0ZW5lZEZpbGVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgYnVmZmVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNCaW5hcnkobWltZSkpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTtcbiAgICAgICAgYnVmZmVyID0gdHJ1ZTsgLy8gRm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGJ1ZmZlcmluZyBkZWZhdWx0IGlzIGFkLWhvYyBNSU1FLWRlcGVuZGVudFxuICAgICAgfSBlbHNlIGlmIChleHBvcnRzLnBhcnNlW21pbWVdKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2VbbWltZV07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICBwYXJzZXIgPSBleHBvcnRzLnBhcnNlLnRleHQ7XG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlciAhPT0gZmFsc2U7XG4gICAgICAgIC8vIGV2ZXJ5b25lIHdhbnRzIHRoZWlyIG93biB3aGl0ZS1sYWJlbGVkIGpzb25cbiAgICAgIH0gZWxzZSBpZiAoaXNKU09OKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2VbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyICE9PSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UudGV4dDtcbiAgICAgIH0gZWxzZSBpZiAodW5kZWZpbmVkID09PSBidWZmZXIpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTsgLy8gSXQncyBhY3R1YWxseSBhIGdlbmVyaWMgQnVmZmVyXG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYnkgZGVmYXVsdCBvbmx5IGJ1ZmZlciB0ZXh0LyosIGpzb24gYW5kIG1lc3NlZCB1cCB0aGluZyBmcm9tIGhlbGxcbiAgICBpZiAoKHVuZGVmaW5lZCA9PT0gYnVmZmVyICYmIGlzVGV4dChtaW1lKSkgfHwgaXNKU09OKG1pbWUpKSB7XG4gICAgICBidWZmZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc0J1ZmZlcmVkID0gYnVmZmVyO1xuICAgIGxldCBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgaWYgKGJ1ZmZlcikge1xuICAgICAgLy8gUHJvdGVjdGlvbmEgYWdhaW5zdCB6aXAgYm9tYnMgYW5kIG90aGVyIG51aXNhbmNlXG4gICAgICBsZXQgcmVzcG9uc2VCeXRlc0xlZnQgPSB0aGlzLl9tYXhSZXNwb25zZVNpemUgfHwgMjAwMDAwMDAwO1xuICAgICAgcmVzLm9uKCdkYXRhJywgKGJ1ZikgPT4ge1xuICAgICAgICByZXNwb25zZUJ5dGVzTGVmdCAtPSBidWYuYnl0ZUxlbmd0aCB8fCBidWYubGVuZ3RoID4gMCA/IGJ1Zi5sZW5ndGggOiAwO1xuICAgICAgICBpZiAocmVzcG9uc2VCeXRlc0xlZnQgPCAwKSB7XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIHByb3BhZ2F0ZSB0aHJvdWdoIGVycm9yIGV2ZW50XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ01heGltdW0gcmVzcG9uc2Ugc2l6ZSByZWFjaGVkJyk7XG4gICAgICAgICAgZXJyb3IuY29kZSA9ICdFVE9PTEFSR0UnO1xuICAgICAgICAgIC8vIFBhcnNlcnMgYXJlbid0IHJlcXVpcmVkIHRvIG9ic2VydmUgZXJyb3IgZXZlbnQsXG4gICAgICAgICAgLy8gc28gd291bGQgaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3NcbiAgICAgICAgICBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgICAgICAgLy8gV2lsbCBub3QgZW1pdCBlcnJvciBldmVudFxuICAgICAgICAgIHJlcy5kZXN0cm95KGVycm9yKTtcbiAgICAgICAgICAvLyBzbyB3ZSBkbyBjYWxsYmFjayBub3dcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrKGVycm9yLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVW5idWZmZXJlZCBwYXJzZXJzIGFyZSBzdXBwb3NlZCB0byBlbWl0IHJlc3BvbnNlIGVhcmx5LFxuICAgICAgICAvLyB3aGljaCBpcyB3ZWlyZCBCVFcsIGJlY2F1c2UgcmVzcG9uc2UuYm9keSB3b24ndCBiZSB0aGVyZS5cbiAgICAgICAgcGFyc2VySGFuZGxlc0VuZCA9IGJ1ZmZlcjtcblxuICAgICAgICBwYXJzZXIocmVzLCAoZXJyb3IsIG9iamVjdCwgZmlsZXMpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy50aW1lZG91dCkge1xuICAgICAgICAgICAgLy8gVGltZW91dCBoYXMgYWxyZWFkeSBoYW5kbGVkIGFsbCBjYWxsYmFja3NcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJbnRlbnRpb25hbCAobm9uLXRpbWVvdXQpIGFib3J0IGlzIHN1cHBvc2VkIHRvIHByZXNlcnZlIHBhcnRpYWwgcmVzcG9uc2UsXG4gICAgICAgICAgLy8gZXZlbiBpZiBpdCBkb2Vzbid0IHBhcnNlLlxuICAgICAgICAgIGlmIChlcnJvciAmJiAhdGhpcy5fYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJzZXJIYW5kbGVzRW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2Uob2JqZWN0LCBmaWxlcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG5cbiAgICAvLyB1bmJ1ZmZlcmVkXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGRlYnVnKCd1bmJ1ZmZlcmVkICVzICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsKTtcbiAgICAgIHRoaXMuY2FsbGJhY2sobnVsbCwgdGhpcy5fZW1pdFJlc3BvbnNlKCkpO1xuICAgICAgaWYgKG11bHRpcGFydCkgcmV0dXJuOyAvLyBhbGxvdyBtdWx0aXBhcnQgdG8gaGFuZGxlIGVuZCBldmVudFxuICAgICAgcmVzLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZGVidWcoJ2VuZCAlcyAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCk7XG4gICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGluZyBldmVudHNcbiAgICByZXMub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIHBhcnNlckhhbmRsZXNFbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2FsbGJhY2soZXJyb3IsIG51bGwpO1xuICAgIH0pO1xuICAgIGlmICghcGFyc2VySGFuZGxlc0VuZClcbiAgICAgIHJlcy5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGRlYnVnKCdlbmQgJXMgJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwpO1xuICAgICAgICAvLyBUT0RPOiB1bmxlc3MgYnVmZmVyaW5nIGVtaXQgZWFybGllciB0byBzdHJlYW1cbiAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2UoKSk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdyZXF1ZXN0JywgdGhpcyk7XG5cbiAgY29uc3QgZ2V0UHJvZ3Jlc3NNb25pdG9yID0gKCkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0cnVlO1xuICAgIGNvbnN0IHRvdGFsID0gcmVxLmdldEhlYWRlcignQ29udGVudC1MZW5ndGgnKTtcbiAgICBsZXQgbG9hZGVkID0gMDtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFN0cmVhbS5UcmFuc2Zvcm0oKTtcbiAgICBwcm9ncmVzcy5fdHJhbnNmb3JtID0gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spID0+IHtcbiAgICAgIGxvYWRlZCArPSBjaHVuay5sZW5ndGg7XG4gICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywge1xuICAgICAgICBkaXJlY3Rpb246ICd1cGxvYWQnLFxuICAgICAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgICAgICBsb2FkZWQsXG4gICAgICAgIHRvdGFsXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9O1xuXG4gIGNvbnN0IGJ1ZmZlclRvQ2h1bmtzID0gKGJ1ZmZlcikgPT4ge1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IDE2ICogMTAyNDsgLy8gZGVmYXVsdCBoaWdoV2F0ZXJNYXJrIHZhbHVlXG4gICAgY29uc3QgY2h1bmtpbmcgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IHRvdGFsTGVuZ3RoICUgY2h1bmtTaXplO1xuICAgIGNvbnN0IGN1dG9mZiA9IHRvdGFsTGVuZ3RoIC0gcmVtYWluZGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXRvZmY7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGJ1ZmZlci5zbGljZShpLCBpICsgY2h1bmtTaXplKTtcbiAgICAgIGNodW5raW5nLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIGlmIChyZW1haW5kZXIgPiAwKSB7XG4gICAgICBjb25zdCByZW1haW5kZXJCdWZmZXIgPSBidWZmZXIuc2xpY2UoLXJlbWFpbmRlcik7XG4gICAgICBjaHVua2luZy5wdXNoKHJlbWFpbmRlckJ1ZmZlcik7XG4gICAgfVxuXG4gICAgY2h1bmtpbmcucHVzaChudWxsKTsgLy8gbm8gbW9yZSBkYXRhXG5cbiAgICByZXR1cm4gY2h1bmtpbmc7XG4gIH07XG5cbiAgLy8gaWYgYSBGb3JtRGF0YSBpbnN0YW5jZSBnb3QgY3JlYXRlZCwgdGhlbiB3ZSBzZW5kIHRoYXQgYXMgdGhlIHJlcXVlc3QgYm9keVxuICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuX2Zvcm1EYXRhO1xuICBpZiAoZm9ybURhdGEpIHtcbiAgICAvLyBzZXQgaGVhZGVyc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBmb3JtRGF0YS5nZXRIZWFkZXJzKCk7XG4gICAgZm9yIChjb25zdCBpIGluIGhlYWRlcnMpIHtcbiAgICAgIGlmIChoYXNPd24oaGVhZGVycywgaSkpIHtcbiAgICAgICAgZGVidWcoJ3NldHRpbmcgRm9ybURhdGEgaGVhZGVyOiBcIiVzOiAlc1wiJywgaSwgaGVhZGVyc1tpXSk7XG4gICAgICAgIHJlcS5zZXRIZWFkZXIoaSwgaGVhZGVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXR0ZW1wdCB0byBnZXQgXCJDb250ZW50LUxlbmd0aFwiIGhlYWRlclxuICAgIGZvcm1EYXRhLmdldExlbmd0aCgoZXJyb3IsIGxlbmd0aCkgPT4ge1xuICAgICAgLy8gVE9ETzogQWRkIGNodW5rZWQgZW5jb2Rpbmcgd2hlbiBubyBsZW5ndGggKGlmIGVycilcbiAgICAgIGlmIChlcnJvcikgZGVidWcoJ2Zvcm1EYXRhLmdldExlbmd0aCBoYWQgZXJyb3InLCBlcnJvciwgbGVuZ3RoKTtcblxuICAgICAgZGVidWcoJ2dvdCBGb3JtRGF0YSBDb250ZW50LUxlbmd0aDogJXMnLCBsZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJlcS5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgZm9ybURhdGEucGlwZShnZXRQcm9ncmVzc01vbml0b3IoKSkucGlwZShyZXEpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIGJ1ZmZlclRvQ2h1bmtzKGRhdGEpLnBpcGUoZ2V0UHJvZ3Jlc3NNb25pdG9yKCkpLnBpcGUocmVxKTtcbiAgfSBlbHNlIHtcbiAgICByZXEuZW5kKGRhdGEpO1xuICB9XG59O1xuXG4vLyBDaGVjayB3aGV0aGVyIHJlc3BvbnNlIGhhcyBhIG5vbi0wLXNpemVkIGd6aXAtZW5jb2RlZCBib2R5XG5SZXF1ZXN0LnByb3RvdHlwZS5fc2hvdWxkRGVjb21wcmVzcyA9IChyZXMpID0+IHtcbiAgcmV0dXJuIGhhc05vbkVtcHR5UmVzcG9uc2VDb250ZW50KHJlcykgJiYgKGlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nKHJlcykgfHwgaXNCcm90bGlFbmNvZGluZyhyZXMpKTtcbn07XG5cblxuLyoqXG4gKiBPdmVycmlkZXMgRE5TIGZvciBzZWxlY3RlZCBob3N0bmFtZXMuIFRha2VzIG9iamVjdCBtYXBwaW5nIGhvc3RuYW1lcyB0byBJUCBhZGRyZXNzZXMuXG4gKlxuICogV2hlbiBtYWtpbmcgYSByZXF1ZXN0IHRvIGEgVVJMIHdpdGggYSBob3N0bmFtZSBleGFjdGx5IG1hdGNoaW5nIGEga2V5IGluIHRoZSBvYmplY3QsXG4gKiB1c2UgdGhlIGdpdmVuIElQIGFkZHJlc3MgdG8gY29ubmVjdCwgaW5zdGVhZCBvZiB1c2luZyBETlMgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUuXG4gKlxuICogQSBzcGVjaWFsIGhvc3QgYCpgIG1hdGNoZXMgZXZlcnkgaG9zdG5hbWUgKGtlZXAgcmVkaXJlY3RzIGluIG1pbmQhKVxuICpcbiAqICAgICAgcmVxdWVzdC5jb25uZWN0KHtcbiAqICAgICAgICAndGVzdC5leGFtcGxlLmNvbSc6ICcxMjcuMC4wLjEnLFxuICogICAgICAgICdpcHY2LmV4YW1wbGUuY29tJzogJzo6MScsXG4gKiAgICAgIH0pXG4gKi9cblJlcXVlc3QucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoY29ubmVjdE92ZXJyaWRlKSB7XG4gIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IHsgJyonOiBjb25uZWN0T3ZlcnJpZGUgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IGNvbm5lY3RPdmVycmlkZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jb25uZWN0T3ZlcnJpZGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnRydXN0TG9jYWxob3N0ID0gZnVuY3Rpb24gKHRvZ2dsZSkge1xuICB0aGlzLl90cnVzdExvY2FsaG9zdCA9IHRvZ2dsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRvZ2dsZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBnZW5lcmF0ZSBIVFRQIHZlcmIgbWV0aG9kc1xuaWYgKCFtZXRob2RzLmluY2x1ZGVzKCdkZWwnKSkge1xuICAvLyBjcmVhdGUgYSBjb3B5IHNvIHdlIGRvbid0IGNhdXNlIGNvbmZsaWN0cyB3aXRoXG4gIC8vIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBtZXRob2RzIHBhY2thZ2UgYW5kXG4gIC8vIG5wbSAzLnhcbiAgbWV0aG9kcyA9IFsuLi5tZXRob2RzXTtcbiAgbWV0aG9kcy5wdXNoKCdkZWwnKTtcbn1cblxuZm9yIChsZXQgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbmFtZSA9IG1ldGhvZDtcbiAgbWV0aG9kID0gbWV0aG9kID09PSAnZGVsJyA/ICdkZWxldGUnIDogbWV0aG9kO1xuXG4gIG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICByZXF1ZXN0W25hbWVdID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QobWV0aG9kLCB1cmwpO1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm4gPSBkYXRhO1xuICAgICAgZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICAgIHJlcXVlc3RfLnF1ZXJ5KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyB0ZXh0IGFuZCBzaG91bGQgYmUgYnVmZmVyZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGlzVGV4dChtaW1lKSB7XG4gIGNvbnN0IHBhcnRzID0gbWltZS5zcGxpdCgnLycpO1xuICBsZXQgdHlwZSA9IHBhcnRzWzBdO1xuICBpZiAodHlwZSkgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGxldCBzdWJ0eXBlID0gcGFydHNbMV07XG4gIGlmIChzdWJ0eXBlKSBzdWJ0eXBlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICByZXR1cm4gdHlwZSA9PT0gJ3RleHQnIHx8IHN1YnR5cGUgPT09ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnO1xufVxuXG4vLyBUaGlzIGlzIG5vdCBhIGNhdGNoYWxsLCBidXQgYSBzdGFydC4gSXQgbWlnaHQgYmUgdXNlZnVsXG4vLyBpbiB0aGUgbG9uZyBydW4gdG8gaGF2ZSBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIGJpbmFyeVxuLy8gY29udGVudCB0eXBlcyBmcm9tIGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL21lZGlhLXR5cGVzLnhodG1sXG5mdW5jdGlvbiBpc0JpbmFyeShtaW1lKSB7XG4gIGxldCBbcmVnaXN0cnksIG5hbWVdID0gbWltZS5zcGxpdCgnLycpO1xuICBpZiAocmVnaXN0cnkpIHJlZ2lzdHJ5ID0gcmVnaXN0cnkudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChuYW1lKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIChcbiAgICBbJ2F1ZGlvJywgJ2ZvbnQnLCAnaW1hZ2UnLCAndmlkZW8nXS5pbmNsdWRlcyhyZWdpc3RyeSkgfHxcbiAgICBbJ2d6JywgJ2d6aXAnXS5pbmNsdWRlcyhuYW1lKVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyBqc29uIG9yIGhhcyAranNvbiBzdHJ1Y3R1cmVkIHN5bnRheCBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0pTT04obWltZSkge1xuICAvLyBzaG91bGQgbWF0Y2ggL2pzb24gb3IgK2pzb25cbiAgLy8gYnV0IG5vdCAvanNvbi1zZXFcbiAgcmV0dXJuIC9bLytdanNvbigkfFteLVxcd10pL2kudGVzdChtaW1lKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB3ZSBzaG91bGQgZm9sbG93IHRoZSByZWRpcmVjdCBgY29kZWAuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc1JlZGlyZWN0KGNvZGUpIHtcbiAgcmV0dXJuIFszMDEsIDMwMiwgMzAzLCAzMDUsIDMwNywgMzA4XS5pbmNsdWRlcyhjb2RlKTtcbn1cblxuZnVuY3Rpb24gaGFzTm9uRW1wdHlSZXNwb25zZUNvbnRlbnQocmVzKSB7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3Qgc3VwcG9zZWQgdG8gaGF2ZSBhbnkgYm9keVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGhlYWRlciBjb250ZW50IGlzIGEgc3RyaW5nLCBhbmQgZGlzdGluY3Rpb24gYmV0d2VlbiAwIGFuZCBubyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsXG4gIGlmIChyZXMuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSA9PT0gJzAnKSB7XG4gICAgLy8gV2Uga25vdyB0aGF0IHRoZSBib2R5IGlzIGVtcHR5ICh1bmZvcnR1bmF0ZWx5LCB0aGlzIGNoZWNrIGRvZXMgbm90IGNvdmVyIGNodW5rZWQgZW5jb2RpbmcpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBOztBQUVBLE1BQU07RUFBRUE7QUFBTyxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDakMsTUFBTUMsTUFBTSxHQUFHRCxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ2hDLE1BQU1FLEtBQUssR0FBR0YsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QixNQUFNRyxJQUFJLEdBQUdILE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUksRUFBRSxHQUFHSixPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1LLElBQUksR0FBR0wsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNTSxJQUFJLEdBQUdOLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTU8sRUFBRSxHQUFHUCxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1RLElBQUksR0FBR1IsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QixJQUFJUyxPQUFPLEdBQUdULE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDaEMsTUFBTVUsUUFBUSxHQUFHVixPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3JDLE1BQU1X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","module.exports = function(size) {\n return new LruCache(size)\n}\n\nfunction LruCache(size) {\n this.capacity = size | 0\n this.map = Object.create(null)\n this.list = new DoublyLinkedList()\n}\n\nLruCache.prototype.get = function(key) {\n var node = this.map[key]\n if (node == null) return undefined\n this.used(node)\n return node.val\n}\n\nLruCache.prototype.set = function(key, val) {\n var node = this.map[key]\n if (node != null) {\n node.val = val\n } else {\n if (!this.capacity) this.prune()\n if (!this.capacity) return false\n node = new DoublyLinkedNode(key, val)\n this.map[key] = node\n this.capacity--\n }\n this.used(node)\n return true\n}\n\nLruCache.prototype.used = function(node) {\n this.list.moveToFront(node)\n}\n\nLruCache.prototype.prune = function() {\n var node = this.list.pop()\n if (node != null) {\n delete this.map[node.key]\n this.capacity++\n }\n}\n\n\nfunction DoublyLinkedList() {\n this.firstNode = null\n this.lastNode = null\n}\n\nDoublyLinkedList.prototype.moveToFront = function(node) {\n if (this.firstNode == node) return\n\n this.remove(node)\n\n if (this.firstNode == null) {\n this.firstNode = node\n this.lastNode = node\n node.prev = null\n node.next = null\n } else {\n node.prev = null\n node.next = this.firstNode\n node.next.prev = node\n this.firstNode = node\n }\n}\n\nDoublyLinkedList.prototype.pop = function() {\n var lastNode = this.lastNode\n if (lastNode != null) {\n this.remove(lastNode)\n }\n return lastNode\n}\n\nDoublyLinkedList.prototype.remove = function(node) {\n if (this.firstNode == node) {\n this.firstNode = node.next\n } else if (node.prev != null) {\n node.prev.next = node.next\n }\n if (this.lastNode == node) {\n this.lastNode = node.prev\n } else if (node.next != null) {\n node.next.prev = node.prev\n }\n}\n\n\nfunction DoublyLinkedNode(key, val) {\n this.key = key\n this.val = val\n this.prev = null\n this.next = null\n}\n","var aws4 = exports,\n url = require('url'),\n querystring = require('querystring'),\n crypto = require('crypto'),\n lru = require('./lru'),\n credentialsCache = lru(1000)\n\n// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html\n\nfunction hmac(key, string, encoding) {\n return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding)\n}\n\nfunction hash(string, encoding) {\n return crypto.createHash('sha256').update(string, 'utf8').digest(encoding)\n}\n\n// This function assumes the string has already been percent encoded\nfunction encodeRfc3986(urlEncodedString) {\n return urlEncodedString.replace(/[!'()*]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\nfunction encodeRfc3986Full(str) {\n return encodeRfc3986(encodeURIComponent(str))\n}\n\n// A bit of a combination of:\n// https://github.com/aws/aws-sdk-java-v2/blob/dc695de6ab49ad03934e1b02e7263abbd2354be0/core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java#L59\n// https://github.com/aws/aws-sdk-js/blob/18cb7e5b463b46239f9fdd4a65e2ff8c81831e8f/lib/signers/v4.js#L191-L199\n// https://github.com/mhart/aws4fetch/blob/b3aed16b6f17384cf36ea33bcba3c1e9f3bdfefd/src/main.js#L25-L34\nvar HEADERS_TO_IGNORE = {\n 'authorization': true,\n 'connection': true,\n 'x-amzn-trace-id': true,\n 'user-agent': true,\n 'expect': true,\n 'presigned-expires': true,\n 'range': true,\n}\n\n// request: { path | body, [host], [method], [headers], [service], [region] }\n// credentials: { accessKeyId, secretAccessKey, [sessionToken] }\nfunction RequestSigner(request, credentials) {\n\n if (typeof request === 'string') request = url.parse(request)\n\n var headers = request.headers = Object.assign({}, (request.headers || {})),\n hostParts = (!this.service || !this.region) && this.matchHost(request.hostname || request.host || headers.Host || headers.host)\n\n this.request = request\n this.credentials = credentials || this.defaultCredentials()\n\n this.service = request.service || hostParts[0] || ''\n this.region = request.region || hostParts[1] || 'us-east-1'\n\n // SES uses a different domain from the service name\n if (this.service === 'email') this.service = 'ses'\n\n if (!request.method && request.body)\n request.method = 'POST'\n\n if (!headers.Host && !headers.host) {\n headers.Host = request.hostname || request.host || this.createHost()\n\n // If a port is specified explicitly, use it as is\n if (request.port)\n headers.Host += ':' + request.port\n }\n if (!request.hostname && !request.host)\n request.hostname = headers.Host || headers.host\n\n this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT'\n\n this.extraHeadersToIgnore = request.extraHeadersToIgnore || Object.create(null)\n this.extraHeadersToInclude = request.extraHeadersToInclude || Object.create(null)\n}\n\nRequestSigner.prototype.matchHost = function(host) {\n var match = (host || '').match(/([^\\.]{1,63})\\.(?:([^\\.]{0,63})\\.)?amazonaws\\.com(\\.cn)?$/)\n var hostParts = (match || []).slice(1, 3)\n\n // ES's hostParts are sometimes the other way round, if the value that is expected\n // to be region equals ‘es’ switch them back\n // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com\n if (hostParts[1] === 'es' || hostParts[1] === 'aoss')\n hostParts = hostParts.reverse()\n\n if (hostParts[1] == 's3') {\n hostParts[0] = 's3'\n hostParts[1] = 'us-east-1'\n } else {\n for (var i = 0; i < 2; i++) {\n if (/^s3-/.test(hostParts[i])) {\n hostParts[1] = hostParts[i].slice(3)\n hostParts[0] = 's3'\n break\n }\n }\n }\n\n return hostParts\n}\n\n// http://docs.aws.amazon.com/general/latest/gr/rande.html\nRequestSigner.prototype.isSingleRegion = function() {\n // Special case for S3 and SimpleDB in us-east-1\n if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true\n\n return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts']\n .indexOf(this.service) >= 0\n}\n\nRequestSigner.prototype.createHost = function() {\n var region = this.isSingleRegion() ? '' : '.' + this.region,\n subdomain = this.service === 'ses' ? 'email' : this.service\n return subdomain + region + '.amazonaws.com'\n}\n\nRequestSigner.prototype.prepareRequest = function() {\n this.parsePath()\n\n var request = this.request, headers = request.headers, query\n\n if (request.signQuery) {\n\n this.parsedPath.query = query = this.parsedPath.query || {}\n\n if (this.credentials.sessionToken)\n query['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !query['X-Amz-Expires'])\n query['X-Amz-Expires'] = 86400\n\n if (query['X-Amz-Date'])\n this.datetime = query['X-Amz-Date']\n else\n query['X-Amz-Date'] = this.getDateTime()\n\n query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'\n query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString()\n query['X-Amz-SignedHeaders'] = this.signedHeaders()\n\n } else {\n\n if (!request.doNotModifyHeaders && !this.isCodeCommitGit) {\n if (request.body && !headers['Content-Type'] && !headers['content-type'])\n headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\n\n if (request.body && !headers['Content-Length'] && !headers['content-length'])\n headers['Content-Length'] = Buffer.byteLength(request.body)\n\n if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token'])\n headers['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256'])\n headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex')\n\n if (headers['X-Amz-Date'] || headers['x-amz-date'])\n this.datetime = headers['X-Amz-Date'] || headers['x-amz-date']\n else\n headers['X-Amz-Date'] = this.getDateTime()\n }\n\n delete headers.Authorization\n delete headers.authorization\n }\n}\n\nRequestSigner.prototype.sign = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n if (this.request.signQuery) {\n this.parsedPath.query['X-Amz-Signature'] = this.signature()\n } else {\n this.request.headers.Authorization = this.authHeader()\n }\n\n this.request.path = this.formatPath()\n\n return this.request\n}\n\nRequestSigner.prototype.getDateTime = function() {\n if (!this.datetime) {\n var headers = this.request.headers,\n date = new Date(headers.Date || headers.date || new Date)\n\n this.datetime = date.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '')\n\n // Remove the trailing 'Z' on the timestamp string for CodeCommit git access\n if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1)\n }\n return this.datetime\n}\n\nRequestSigner.prototype.getDate = function() {\n return this.getDateTime().substr(0, 8)\n}\n\nRequestSigner.prototype.authHeader = function() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(),\n 'SignedHeaders=' + this.signedHeaders(),\n 'Signature=' + this.signature(),\n ].join(', ')\n}\n\nRequestSigner.prototype.signature = function() {\n var date = this.getDate(),\n cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(),\n kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey)\n if (!kCredentials) {\n kDate = hmac('AWS4' + this.credentials.secretAccessKey, date)\n kRegion = hmac(kDate, this.region)\n kService = hmac(kRegion, this.service)\n kCredentials = hmac(kService, 'aws4_request')\n credentialsCache.set(cacheKey, kCredentials)\n }\n return hmac(kCredentials, this.stringToSign(), 'hex')\n}\n\nRequestSigner.prototype.stringToSign = function() {\n return [\n 'AWS4-HMAC-SHA256',\n this.getDateTime(),\n this.credentialString(),\n hash(this.canonicalString(), 'hex'),\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalString = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n var pathStr = this.parsedPath.path,\n query = this.parsedPath.query,\n headers = this.request.headers,\n queryStr = '',\n normalizePath = this.service !== 's3',\n decodePath = this.service === 's3' || this.request.doNotEncodePath,\n decodeSlashesInPath = this.service === 's3',\n firstValOnly = this.service === 's3',\n bodyHash\n\n if (this.service === 's3' && this.request.signQuery) {\n bodyHash = 'UNSIGNED-PAYLOAD'\n } else if (this.isCodeCommitGit) {\n bodyHash = ''\n } else {\n bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] ||\n hash(this.request.body || '', 'hex')\n }\n\n if (query) {\n var reducedQuery = Object.keys(query).reduce(function(obj, key) {\n if (!key) return obj\n obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] :\n (firstValOnly ? query[key][0] : query[key])\n return obj\n }, {})\n var encodedQueryPieces = []\n Object.keys(reducedQuery).sort().forEach(function(key) {\n if (!Array.isArray(reducedQuery[key])) {\n encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key]))\n } else {\n reducedQuery[key].map(encodeRfc3986Full).sort()\n .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) })\n }\n })\n queryStr = encodedQueryPieces.join('&')\n }\n if (pathStr !== '/') {\n if (normalizePath) pathStr = pathStr.replace(/\\/{2,}/g, '/')\n pathStr = pathStr.split('/').reduce(function(path, piece) {\n if (normalizePath && piece === '..') {\n path.pop()\n } else if (!normalizePath || piece !== '.') {\n if (decodePath) piece = decodeURIComponent(piece.replace(/\\+/g, ' '))\n path.push(encodeRfc3986Full(piece))\n }\n return path\n }, []).join('/')\n if (pathStr[0] !== '/') pathStr = '/' + pathStr\n if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/')\n }\n\n return [\n this.request.method || 'GET',\n pathStr,\n queryStr,\n this.canonicalHeaders() + '\\n',\n this.signedHeaders(),\n bodyHash,\n ].join('\\n')\n}\n\nRequestSigner.prototype.filterHeaders = function() {\n var headers = this.request.headers,\n extraHeadersToInclude = this.extraHeadersToInclude,\n extraHeadersToIgnore = this.extraHeadersToIgnore\n this.filteredHeaders = Object.keys(headers)\n .map(function(key) { return [key.toLowerCase(), headers[key]] })\n .filter(function(entry) {\n return extraHeadersToInclude[entry[0]] ||\n (HEADERS_TO_IGNORE[entry[0]] == null && !extraHeadersToIgnore[entry[0]])\n })\n .sort(function(a, b) { return a[0] < b[0] ? -1 : 1 })\n}\n\nRequestSigner.prototype.canonicalHeaders = function() {\n if (!this.filteredHeaders) this.filterHeaders()\n\n return this.filteredHeaders.map(function(entry) {\n return entry[0] + ':' + entry[1].toString().trim().replace(/\\s+/g, ' ')\n }).join('\\n')\n}\n\nRequestSigner.prototype.signedHeaders = function() {\n if (!this.filteredHeaders) this.filterHeaders()\n\n return this.filteredHeaders.map(function(entry) { return entry[0] }).join(';')\n}\n\nRequestSigner.prototype.credentialString = function() {\n return [\n this.getDate(),\n this.region,\n this.service,\n 'aws4_request',\n ].join('/')\n}\n\nRequestSigner.prototype.defaultCredentials = function() {\n var env = process.env\n return {\n accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY,\n secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY,\n sessionToken: env.AWS_SESSION_TOKEN,\n }\n}\n\nRequestSigner.prototype.parsePath = function() {\n var path = this.request.path || '/'\n\n // S3 doesn't always encode characters > 127 correctly and\n // all services don't encode characters > 255 correctly\n // So if there are non-reserved chars (and it's not already all % encoded), just encode them all\n if (/[^0-9A-Za-z;,/?:@&=+$\\-_.!~*'()#%]/.test(path)) {\n path = encodeURI(decodeURI(path))\n }\n\n var queryIx = path.indexOf('?'),\n query = null\n\n if (queryIx >= 0) {\n query = querystring.parse(path.slice(queryIx + 1))\n path = path.slice(0, queryIx)\n }\n\n this.parsedPath = {\n path: path,\n query: query,\n }\n}\n\nRequestSigner.prototype.formatPath = function() {\n var path = this.parsedPath.path,\n query = this.parsedPath.query\n\n if (!query) return path\n\n // Services don't support empty query string keys\n if (query[''] != null) delete query['']\n\n return path + '?' + encodeRfc3986(querystring.stringify(query))\n}\n\naws4.RequestSigner = RequestSigner\n\naws4.sign = function(request, credentials) {\n return new RequestSigner(request, credentials).sign()\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n/* global encodeURIComponent */\n\n'use strict';\n\nexport default class ParaObject {\n constructor(id, type) {\n this.id = id || null;\n this.type = type || 'sysprop';\n this.name = 'ParaObject';\n this.stored = true;\n this.indexed = true;\n this.cached = true;\n this.version = 0;\n }\n /**\n * The id of an object. Usually an autogenerated unique string of numbers.\n *\n * @return the id\n */\n getId() {\n return this.id;\n }\n /**\n * Sets a new id. Must not be null or empty.\n *\n * @param {String} id the new id\n */\n setId(id) {\n this.id = id;\n }\n /**\n * The name of the object. Can be anything.\n *\n * @return {String} the name. default: [type id]\n */\n getName() {\n return this.name;\n }\n /**\n * Sets a new name. Must not be null or empty.\n *\n * @param {String} name the new name\n */\n setName(name) {\n this.name = name;\n }\n /**\n * The application name. Added to support multiple separate apps.\n * Every object must belong to an app.\n *\n * @return {String} the app id (name). default: para\n */\n getAppid() {\n return this.appid;\n }\n /**\n * Sets a new app name. Must not be null or empty.\n *\n * @param {String} appid the new app id (name)\n */\n setAppid(appid) {\n this.appid = appid;\n }\n /**\n * The id of the parent object.\n *\n * @return {String} the id of the parent or null\n */\n getParentid() {\n return this.parentid;\n }\n /**\n * Sets a new parent id. Must not be null or empty.\n *\n * @param {String} parentid a new id\n */\n setParentid(parentid) {\n this.parentid = parentid;\n }\n /**\n * The name of the object's class. This is equivalent to {@link Class#getSimpleName()}.toLowerCase().\n *\n * @return {String} the simple name of the class\n */\n getType() {\n return this.type;\n }\n /**\n * Sets a new object type. Must not be null or empty.\n *\n * @param {String} type a new type\n */\n setType(type) {\n this.type = type;\n }\n /**\n * The id of the user who created this. Should point to a {@link User} id.\n *\n * @return {String} the id or null\n */\n getCreatorid() {\n return this.creatorid;\n }\n /**\n * Sets a new creator id. Must not be null or empty.\n *\n * @param {String} creatorid a new id\n */\n setCreatorid(creatorid) {\n this.creatorid = creatorid;\n }\n /**\n * The URI of this object. For example: /user/123.\n *\n * @return {String} the URI\n */\n getObjectURI() {\n var def = '/' + urlEncode(this.getType());\n return this.id ? def + '/' + urlEncode(this.id) : def;\n }\n /**\n * The time when the object was created, in milliseconds.\n *\n * @return {Number} the timestamp of creation\n */\n getTimestamp() {\n return this.timestamp;\n }\n /**\n * Sets the timestamp.\n *\n * @param {Number} timestamp a new timestamp in milliseconds.\n */\n setTimestamp(timestamp) {\n this.timestamp = timestamp;\n }\n /**\n * The last time this object was updated. Timestamp in ms.\n *\n * @return {Number} timestamp in milliseconds\n */\n getUpdated() {\n return this.updated;\n }\n /**\n * Sets the last updated timestamp.\n *\n * @param {Number} updated a new timestamp\n */\n setUpdated(updated) {\n this.updated = updated;\n }\n /**\n * The tags associated with this object. Tags must not be null or empty.\n *\n * @return {Array} a set of tags, or an empty set\n */\n getTags() {\n return this.id;\n }\n /**\n * Merges the given tags with existing tags.\n *\n * @param {Array} tags the additional tags, or clears all tags if set to null\n */\n setTags(tags) {\n this.tags = tags;\n }\n /**\n * The votes associated with this object.\n *\n * @return {Number} votes or 0\n */\n getVotes() {\n return this.votes;\n }\n /**\n * Sets the votes.\n *\n * @param {Number} votes\n */\n setVotes(votes) {\n this.votes = votes;\n }\n /**\n * The version of this object.\n *\n * @return {Number} version\n */\n getVersion() {\n return this.version;\n }\n /**\n * Sets the version.\n *\n * @param {Number} version\n */\n setVersion(version) {\n this.version = version;\n }\n /**\n * Boolean flag which controls whether this object is stored\n * in the database or not. Default is true.\n *\n * @return {Boolean} true if this object is stored in DB.\n */\n getStored() {\n return this.stored;\n }\n /**\n * Sets the \"isStored\" flag.\n *\n * @param {Boolean} isStored when set to true, object is stored in DB.\n */\n setStored(isStored) {\n this.stored = isStored;\n }\n /**\n * Boolean flat which controls whether this object is indexed\n * by the search engine. Default is true.\n *\n * @return {Boolean} true if this object is indexed\n */\n getIndexed() {\n return this.indexed;\n }\n /**\n * Sets the \"isIndexed\" flag.\n *\n * @param {Boolean} isIndexed when set to true, object is indexed.\n */\n setIndexed(isIndexed) {\n this.indexed = isIndexed;\n }\n /**\n * Boolean flat which controls whether this object is cached.\n * Default is true.\n *\n * @return {Boolean} true if this object is cached on update() and create().\n */\n getCached() {\n return this.cached;\n }\n /**\n * Sets the \"isCached\" flag.\n *\n * @param {Boolean} isCached when set to true, object is cached.\n */\n setCached(isCached) {\n this.cached = isCached;\n }\n /**\n * Populates this object with data from a map.\n * @param {Object} map\n * @return {ParaObject} this\n */\n setFields(map) {\n if (map && map instanceof Object) {\n for (var key in map) {\n this[key] = map[key];\n }\n }\n return this;\n }\n}\n\nfunction urlEncode(path) {\n return encodeURIComponent(path).replace(/[!'()*]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n'use strict';\n\n/**\n * This class stores pagination data. It limits the results for queries in the DAO\n * and Search objects and also counts the total number of results that are returned.\n * @author Alex Bogdanovski <alex@erudika.com>\n * @param {Number} page page number to start from\n * @param {String} sortby sort by field\n * @param {Boolean} desc sort in descending or ascending order\n * @param {Number} limit limits the results\n *\n * @property {Number} count the total number of results\n * @property {String} lastKey reserved use\n * @property {Array} select selected fields filter for returning only part of an object\n * @returns {Pager} a pager\n */\nexport default class Pager {\n constructor(page, sortby, desc, limit) {\n this.page = page || 1;\n this.count = 0;\n this.sortby = sortby || null;\n this.desc = desc || true;\n this.limit = limit || 30;\n this.name = '';\n this.lastKey = null;\n this.select = null; // [field1,field2]\n }\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n'use strict';\n\n/**\n * Represents a validation constraint.\n * @author Alex Bogdanovski <alex@erudika.com>\n * @param {String} constraintName name\n * @param {Object} constraintPayload payload\n * @returns {Constraint}\n */\nexport default class Constraint {\n constructor(constraintName, constraintPayload) {\n var name = constraintName;\n var payload = constraintPayload;\n\n /**\n * The constraint name.\n * @returns {String} a name\n */\n this.getName = function () {\n return name;\n };\n\n /**\n * Sets the name of the constraint.\n * @param {String} n name\n */\n this.setName = function (n) {\n name = n;\n };\n\n /**\n * The payload (a map)\n * @returns {Object} an object\n */\n this.getPayload = function () {\n return payload;\n };\n\n /**\n * Sets the payload.\n * @param {Object} p the payload object\n */\n this.setPayload = function (p) {\n payload = p;\n };\n }\n /**\n * The 'required' constraint - marks a field as required.\n * @returns {Constraint}\n */\n static required() {\n return new Constraint('required', { message: 'messages.required' });\n }\n /**\n * The 'min' constraint - field must contain a number larger than or equal to min.\n * @param {Number} min the minimum value\n * @returns {Constraint}\n */\n static min(min) {\n return new Constraint('min', {\n value: min || 0,\n message: 'messages.min'\n });\n }\n /**\n * The 'max' constraint - field must contain a number smaller than or equal to max.\n * @param {Number} max the maximum value\n * @returns {Constraint}\n */\n static max(max) {\n return new Constraint('max', {\n value: max || 0,\n message: 'messages.max'\n });\n }\n /**\n * The 'size' constraint - field must be a String, Object or Array\n * with a given minimum and maximum length.\n * @param {Number} min the minimum length\n * @param {Number} max the maximum length\n * @returns {Constraint}\n */\n static size(min, max) {\n return new Constraint('size', {\n min: min || 0,\n max: max || 0,\n message: 'messages.size'\n });\n }\n /**\n * The 'digits' constraint - field must be a Number or String containing digits where the\n * number of digits in the integral part is limited by 'integer', and the\n * number of digits for the fractional part is limited\n * by 'fraction'.\n * @param {Number} i the max number of digits for the integral part\n * @param {Number} f the max number of digits for the fractional part\n * @returns {Constraint}\n */\n static digits(i, f) {\n return new Constraint('digits', {\n integer: i || 0,\n fraction: f || 0,\n message: 'messages.digits'\n });\n }\n /**\n * The 'pattern' constraint - field must contain a value matching a regular expression.\n * @param {String} regex a regular expression\n * @returns {Constraint}\n */\n static pattern(regex) {\n return new Constraint('pattern', {\n value: regex || '',\n message: 'messages.pattern'\n });\n }\n /**\n * The 'email' constraint - field must contain a valid email.\n * @returns {Constraint}\n */\n static email() {\n return new Constraint('email', { message: 'messages.email' });\n }\n /**\n * The 'falsy' constraint - field value must not be equal to 'true'.\n * @returns {Constraint}\n */\n static falsy() {\n return new Constraint('false', { message: 'messages.false' });\n }\n /**\n * The 'truthy' constraint - field value must be equal to 'true'.\n * @returns {Constraint}\n */\n static truthy() {\n return new Constraint('true', { message: 'messages.true' });\n }\n /**\n * The 'future' constraint - field value must be a Date or a timestamp in the future.\n * @returns {Constraint}\n */\n static future() {\n return new Constraint('future', { message: 'messages.future' });\n }\n /**\n * The 'past' constraint - field value must be a Date or a timestamp in the past.\n * @returns {Constraint}\n */\n static past() {\n return new Constraint('past', { message: 'messages.past' });\n }\n /**\n * The 'url' constraint - field value must be a valid URL.\n * @returns {Constraint}\n */\n static url() {\n return new Constraint('url', { message: 'messages.url' });\n }\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n/* global encodeURIComponent */\n\n'use strict';\n\nvar err = console.error;\nimport assert from 'assert';\nimport apiClient from 'superagent';\nimport aws4 from 'aws4';\nimport ParaObject from './ParaObject.js';\nimport Pager from './Pager.js';\nimport Constraint from './Constraint.js';\n\nconst DEFAULT_ENDPOINT = 'https://paraio.com';\nconst DEFAULT_PATH = '/v1/';\nconst JWT_PATH = '/jwt_auth';\nconst SEPARATOR = ':';\nconst { sign } = aws4;\n\n/**\n * JavaScript client for communicating with a Para API server.\n * @param {String} accessKey Para access key\n * @param {String} secretKey Para access key\n * @param {Object} options\n * @property {String} endpoint the API endpoint (default: paraio.com)\n * @property {String} apiPath the request path (default: /v1/)\n * @author Alex Bogdanovski <alex@erudika.com>\n */\nexport default class ParaClient {\n constructor(accessKey, secretKey, options) {\n if (!secretKey || isEmpty(secretKey.trim())) {\n console.warn(\"Secret key not provided. Make sure you call 'signIn()' first.\");\n }\n options = options || {};\n this.accessKey = accessKey;\n this.endpoint = options.endpoint || DEFAULT_ENDPOINT;\n this.apiPath = options.apiPath || DEFAULT_PATH;\n this.apiRequestTimeout = options.apiRequestTimeout || 120 * 1000;\n this.tokenKey = null;\n this.tokenKeyExpires = null;\n this.tokenKeyNextRefresh = null;\n if (!endsWith(this.apiPath, '/')) {\n this.apiPath += '/';\n }\n\n var that = this;\n var secret = secretKey;\n\n this.getFullPath = function (resourcePath) {\n if (resourcePath && startsWith(resourcePath, JWT_PATH)) {\n if ((that.apiPath.match(/\\//g) || []).length > 2) {\n return that.apiPath.substring(0, that.apiPath.indexOf('/', 1)) + resourcePath;\n }\n return resourcePath;\n }\n if (!resourcePath) {\n resourcePath = '';\n } else if (resourcePath[0] === '/') {\n resourcePath = resourcePath.substring(1);\n }\n return that.apiPath + resourcePath;\n };\n\n this.setSecret = function (sec) {\n secret = sec;\n };\n\n /**\n * Clears the JWT token from memory, if such exists.\n */\n this.clearAccessToken = function () {\n that.tokenKey = null;\n that.tokenKeyExpires = null;\n that.tokenKeyNextRefresh = null;\n };\n\n /**\n * @returns the JWT access token, or null if not signed in\n */\n this.getAccessToken = function () {\n return that.tokenKey;\n };\n\n /**\n * Sets the JWT access token.\n * @param {String} token a valid token\n */\n this.setAccessToken = function (token) {\n if (token && token.length > 1) {\n try {\n var parts = token.split('.');\n var decoded = JSON.parse(decode(parts[1]));\n if (decoded && decoded['exp']) {\n that.tokenKeyExpires = decoded['exp'];\n that.tokenKeyNextRefresh = decoded['refresh'];\n }\n } catch (e) {\n that.tokenKeyExpires = null;\n that.tokenKeyNextRefresh = null;\n }\n }\n that.tokenKey = token;\n };\n\n /**\n * @param {Function} fn callback (optional)\n * @returns {Promise} the version of Para server\n */\n this.getServerVersion = async function (fn) {\n fn = fn || noop;\n return that.getEntity(that.invokeGet('')).then(function (result) {\n var ver = result.version || 'unknown';\n fn(ver);\n return ver;\n });\n };\n\n /**\n * Invoke a GET request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} params query parameters\n * @returns {Object} response\n */\n this.invokeGet = async function (resourcePath, params) {\n return that.invokeSignedRequest(\n 'GET',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n params\n );\n };\n\n /**\n * Invoke a POST request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} entity request body\n * @returns {Object} response\n */\n this.invokePost = async function (resourcePath, entity) {\n return that.invokeSignedRequest(\n 'POST',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n null,\n entity\n );\n };\n\n /**\n * Invoke a PUT request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} entity request body\n * @returns {Object} response\n */\n this.invokePut = async function (resourcePath, entity) {\n return that.invokeSignedRequest(\n 'PUT',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n null,\n entity\n );\n };\n\n /**\n * Invoke a PATCH request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} entity request body\n * @returns {Object} response\n */\n this.invokePatch = async function (resourcePath, entity) {\n return that.invokeSignedRequest(\n 'PATCH',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n null,\n entity\n );\n };\n\n /**\n * Invoke a DELETE request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} params query parameters\n * @returns {Object} response\n */\n this.invokeDelete = async function (resourcePath, params) {\n return that.invokeSignedRequest(\n 'DELETE',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n params\n );\n };\n\n this.invokeSignedRequest = async function (\n httpMethod,\n endpointURL,\n reqPath,\n headers,\n params,\n jsonEntity\n ) {\n if (!accessKey || isEmpty(accessKey.trim())) {\n throw new Error('Blank access key: ' + httpMethod + ' ' + reqPath);\n }\n var doSign = true;\n if (!secret && !that.tokenKey && isEmpty(headers)) {\n headers = { Authorization: 'Anonymous ' + accessKey };\n doSign = false;\n }\n var host = endpointURL;\n if (startsWith(endpointURL, 'http://')) {\n host = endpointURL.substring(7);\n } else if (startsWith(endpointURL, 'https://')) {\n host = endpointURL.substring(8);\n }\n\n var opts = {\n service: 'para',\n method: httpMethod,\n host: host,\n path: uriEncodeAWSV4(reqPath),\n headers: headers || {}\n };\n\n // make sure that only the first parameter value is used for generating the signature\n // multi-valued parameters are reduced to single value\n // there's no spec for this case, so choose first param in array\n if (params && params instanceof Object && !isEmpty(params)) {\n opts.path += '?';\n var paramsObj = {};\n for (var key in params) {\n var value = params[key];\n if (isArray(value)) {\n if (!isEmpty(value)) {\n paramsObj[key] = value[0] !== null ? value[0] : '';\n }\n } else {\n paramsObj[key] = value !== null ? value : '';\n }\n }\n opts.path += new URLSearchParams(paramsObj).toString();\n }\n\n if (jsonEntity) {\n opts.body = JSON.stringify(jsonEntity);\n opts.headers['Content-Type'] = 'application/json; charset=UTF-8';\n }\n\n if (that.tokenKey !== null) {\n // make sure you don't create an infinite loop!\n if (!(httpMethod === 'GET' && reqPath === JWT_PATH)) {\n await that.refreshToken();\n }\n opts.headers['Authorization'] = 'Bearer ' + that.tokenKey;\n } else if (doSign) {\n opts.doNotEncodePath = true;\n sign(opts, { accessKeyId: accessKey, secretAccessKey: secret });\n }\n\n if (typeof window !== 'undefined') {\n // don't set the 'Host' header, the browser does that.\n delete opts.headers['Host'];\n }\n opts.headers['User-Agent'] = 'Para client for JavaScript';\n try {\n return apiClient(opts.method, endpointURL + reqPath)\n .query(params)\n .set(opts.headers)\n .timeout({ response: that.apiRequestTimeout, deadline: that.apiRequestTimeout })\n .send(opts.body);\n } catch (e) {\n err('ParaClient request failed: ' + e);\n return Promise.reject(e);\n }\n };\n\n /**\n * Parses a search query response and extracts the objects from it.\n * @param {String} queryType type of search query\n * @param {Object} params query params\n * @param {Function} fn callback\n * @returns {Object} response\n */\n this.find = async function (queryType, params, fn) {\n if (params && params instanceof Object && !isEmpty(params)) {\n var qType = queryType ? '/' + queryType : '/default';\n if (!params['type']) {\n return that.getEntity(that.invokeGet('search' + qType, params), fn);\n } else {\n return that.getEntity(that.invokeGet(params['type'] + '/search' + qType, params), fn);\n }\n } else {\n var res = {\n items: [],\n totalHits: 0\n };\n fn(res);\n return resolve(res);\n }\n };\n\n /**\n * Deserializes a Response object to POJO of some type.\n * @param {Object} req request\n * @param {Function} callback callback\n * @param {Boolean} returnRawJSON true if raw JSON should be returned as string\n * @returns {Object} a ParaObject\n */\n this.getEntity = async function (req, callback, returnRawJSON) {\n callback = callback || noop;\n var rawJSON = isUndefined(returnRawJSON) ? true : returnRawJSON;\n return req.then(function (res) {\n //console.log(\"DEBUG \", req.method, req.url, res.status);\n var code = res.status;\n if (code === 200 || code === 201 || code === 304) {\n if (rawJSON) {\n var result;\n try {\n if (!isEmpty(res.body) || res.text === '{ }' || res.text === '{}') {\n result = res.body;\n } else {\n result = res.text;\n }\n } catch (exc) {\n result = res.text;\n }\n callback(result);\n return resolve(result);\n } else {\n var obj = new ParaObject();\n obj.setFields(res.body);\n callback(obj);\n return resolve(obj);\n }\n } else if (code !== 404 || code !== 304 || code !== 204) {\n var error = res.body || new Error('ParaClient request failed.');\n if (error && error['code']) {\n var msg = error['message'] ? error['message'] : 'error';\n err(msg + ' - ' + error['code']);\n } else {\n err(code + ' - ' + res.text);\n }\n callback(null, error);\n return Promise.reject(error);\n } else {\n var error1 = new Error('ParaClient request failed.');\n callback(null, error1);\n reject(error1);\n }\n });\n };\n\n /**\n * Deserializes ParaObjects from a JSON array (the \"items:[]\" field in search results).\n * @param {Array} items a list of deserialized maps\n * @returns {Array} a list of ParaObjects\n */\n this.getItemsFromList = function (items) {\n if (items && items instanceof Array && !isEmpty(items)) {\n var objects = [];\n for (var item of items) {\n if (item) {\n var p = new ParaObject();\n p.setFields(item);\n objects.push(p);\n }\n }\n return objects;\n }\n return [];\n };\n\n /**\n * Converts a list of Maps to a List of ParaObjects, at a given path within the JSON tree structure.\n * @param {Object} result the response body for an API request\n * @param {String} at the path (field) where the array of objects is located\n * @param {Pager} pager a pager\n * @returns {Array} a list of ParaObjects\n */\n this.getItemsAt = function (result, at, pager) {\n if (result && at && result[at]) {\n if (pager && result.totalHits) {\n pager.count = result.totalHits;\n }\n if (pager && result.lastKey) {\n pager.lastKey = result.lastKey;\n }\n return that.getItemsFromList(result[at]);\n }\n return [];\n };\n\n /**\n * Converts a list of Maps to a List of ParaObjects.\n * @param {Object} result the response body for an API request\n * @param {Pager} pager a pager\n * @returns {Array} a list of ParaObjects\n */\n this.getItems = function (result, pager) {\n return that.getItemsAt(result, 'items', pager);\n };\n\n /**\n * Converts a {Pager} object to query parameters.\n * @param {Pager} pager a pager\n * @returns {Object} parameters map\n */\n this.pagerToParams = function (pager) {\n var map = {};\n if (pager) {\n map['page'] = pager.page;\n map['desc'] = pager.desc;\n map['limit'] = pager.limit;\n if (pager.lastKey) {\n map['lastKey'] = pager.lastKey;\n }\n if (pager.sortby) {\n map['sort'] = pager.sortby;\n }\n if (pager.select && pager.select.length) {\n map['select'] = pager.select;\n }\n }\n return map;\n };\n }\n /**\n * Returns the App for the current access key (appid).\n * @param {Function} fn callback (optional)\n * @returns {Promise} a promise\n */\n async getApp(fn) {\n return this.me(fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\t PERSISTENCE\n /////////////////////////////////////////////\n /**\n * Persists an object to the data store. If the object's type and id are given,\n * then the request will be a PUT request and any existing object will be\n * overwritten.\n * @param {ParaObject} obj the object to create\n * @param {Function} fn callback (optional)\n * @returns {Promise} the same object with assigned id or null if not created.\n */\n async create(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj) {\n fn(null);\n return resolve(null);\n }\n if (!obj.getId() || !obj.getType()) {\n return this.getEntity(this.invokePost(urlEncode(obj.getType()), obj), fn, false);\n } else {\n return this.getEntity(this.invokePut(obj.getObjectURI(), obj), fn, false);\n }\n }\n /**\n * Retrieves an object from the data store.\n * @param {String} type the type of the object\n * @param {String} id the id of the object\n * @param {Function} fn callback (optional)\n * @returns {Promise} the retrieved object or null if not found\n */\n async read(type, id, fn) {\n fn = fn || noop;\n if (!id) {\n fn(null);\n return resolve(null);\n }\n if (!type) {\n return this.getEntity(this.invokeGet('_id/' + urlEncode(id)), fn, false);\n } else {\n return this.getEntity(this.invokeGet(urlEncode(type) + '/' + urlEncode(id)), fn, false);\n }\n }\n /**\n * Updates an object permanently. Supports partial updates.\n * @param {ParaObject} obj the object to update\n * @param {Function} fn callback (optional)\n * @returns {Promise} the updated object\n */\n async update(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj) {\n fn(null);\n return resolve(null);\n }\n return this.getEntity(this.invokePatch(obj.getObjectURI(), obj), fn, false);\n }\n /**\n * Deletes an object permanently.\n * @param {ParaObject} obj object to delete\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async delete(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (obj) {\n return this.getEntity(this.invokeDelete(obj.getObjectURI()), fn);\n } else {\n fn(null);\n return resolve(null);\n }\n }\n /**\n * Saves multiple objects to the data store.\n * @param {Array} objects a list of ParaObjects to create\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async createAll(objects, fn) {\n fn = fn || noop;\n checkParaObjects(objects);\n if (!objects || !isArray(objects) || !objects[0]) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokePost('_batch', objects)).then(function (result) {\n var res = that.getItemsFromList(result);\n fn(res);\n return res;\n });\n }\n /**\n * Retrieves multiple objects from the data store.\n * @param {Array} keys a list of object ids\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async readAll(keys, fn) {\n fn = fn || noop;\n if (!keys || !isArray(keys) || isEmpty(keys)) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokeGet('_batch', { ids: keys })).then(function (result) {\n var res = that.getItemsFromList(result);\n fn(res);\n return res;\n });\n }\n /**\n * Updates multiple objects.\n * @param {Array} objects a list of ParaObjects to update\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async updateAll(objects, fn) {\n fn = fn || noop;\n checkParaObjects(objects);\n if (!objects || !isArray(objects) || isEmpty(objects)) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokePatch('_batch', objects)).then(function (result) {\n var res = that.getItemsFromList(result);\n fn(res);\n return res;\n });\n }\n /**\n * Deletes multiple objects.\n * @param {Function} fn callback (optional)\n * @param {Array} keys the ids of the objects to delete\n * @returns {Promise} promise\n */\n async deleteAll(keys, fn) {\n fn = fn || noop;\n if (keys && isArray(keys)) {\n return this.getEntity(this.invokeDelete('_batch', { ids: keys }), fn);\n } else {\n fn(null);\n return resolve(null);\n }\n }\n /**\n * Returns a list all objects found for the given type.\n * The result is paginated so only one page of items is returned, at a time.\n * @param {String} type the type of objects to search for\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async list(type, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n if (!type) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokeGet(urlEncode(type), this.pagerToParams(pager))).then(\n function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n }\n );\n }\n /////////////////////////////////////////////\n //\t\t\t\t SEARCH\n /////////////////////////////////////////////\n /**\n * Simple id search.\n * @param {String} id the id\n * @param {Function} fn callback (optional)\n * @returns {Promise} the object if found or null\n */\n async findById(id, fn) {\n fn = fn || noop;\n var that = this;\n return this.find('id', { id: id }).then(function (results) {\n var list = that.getItems(results);\n var res = isEmpty(list) ? null : list;\n fn(res);\n return res;\n });\n }\n /**\n * Simple multi id search.\n * @param {Array} ids a list of ids to search for\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects if found or []\n */\n async findByIds(ids, fn) {\n fn = fn || noop;\n var that = this;\n return this.find('ids', { ids: ids }).then(function (results) {\n var res = that.getItems(results);\n fn(res);\n return res;\n });\n }\n /**\n * Search for address objects in a radius of X km from a given point.\n * @param {String} type the type of object to search for\n * @param {String} query the query string\n * @param {Number} radius the radius of the search circle\n * @param {Number} lat latitude\n * @param {Number} lng longitude\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findNearby(type, query, radius, lat, lng, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n latlng: lat + ',' + lng,\n radius: radius,\n q: query,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('nearby', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have a property which value starts with a given prefix.\n * @param {String} type the type of object to search for\n * @param {String} field the property name of an object\n * @param {String} prefix the prefix\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findPrefix(type, field, prefix, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n field: field,\n prefix: prefix,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('prefix', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Simple query string search. This is the basic search method.\n * @param {String} type the type of object to search for\n * @param {String} query the query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findQuery(type, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n q: query,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches within a nested field. The objects of the given type must contain a nested field \"nstd\".\n * @param {String} type the type of object to search for\n * @param {String} field the name of the field to target (within a nested field \"nstd\")\n * @param {String} query the query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findNestedQuery(type, field, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n q: query,\n field: field,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('nested', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have similar property values to a given text. A \"find like this\" query.\n * @param {String} type the type of object to search for\n * @param {String} filterKey exclude an object with this key from the results (optional)\n * @param {Array} fields a list of property names\n * @param {String} liketext text to compare to\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findSimilar(type, filterKey, fields, liketext, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n fields: fields || null,\n filterid: filterKey,\n like: liketext,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('similar', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects tagged with one or more tags.\n * @param {String} type the type of object to search for\n * @param {Array} tags the list of tags\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTagged(type, tags, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n tags: tags || null,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('tagged', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for Tag objects.\n * This method might be deprecated in the future.\n * @param {String} keyword the tag keyword to search for\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTags(keyword, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n keyword = keyword ? keyword + '*' : '*';\n return this.findWildcard('tag', 'tag', keyword, pager, fn);\n }\n /**\n * Searches for objects having a property value that is in list of possible values.\n * @param {String} type the type of object to search for\n * @param {String} field the property name of an object\n * @param {Object} terms a map of terms (property values)\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTermInList(type, field, terms, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n field: field,\n terms: terms,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('in', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have properties matching some given values. A terms query.\n * @param {String} type the type of object to search for\n * @param {Object} terms a map of fields (property names) to terms (property values)\n * @param {Boolean} matchAll match all terms. If true - AND search, if false - OR search\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTerms(type, terms, matchAll, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n terms = terms || {};\n matchAll = matchAll || true;\n var params = {\n matchall: matchAll\n };\n var list = [];\n for (var key in terms) {\n if (terms[key]) {\n list.push(key + SEPARATOR + terms[key]);\n }\n }\n if (!isEmpty(terms)) {\n params['terms'] = list;\n }\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('terms', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have a property with a value matching a wildcard query.\n * @param {String} type the type of object to search for\n * @param {String} field the property name of an object\n * @param {String} wildcard wildcard query string. For example \"cat*\".\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findWildcard(type, field, wildcard, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n field: field,\n q: wildcard,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('wildcard', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Counts indexed objects matching a set of terms/values.\n * @param {String} type the type of object to search for\n * @param {Object} terms a map of fields (property names) to terms (property values)\n * @param {Function} fn callback (optional)\n * @returns {Promise} the number of results found\n */\n async getCount(type, terms, fn) {\n fn = fn || noop;\n if (type === null && terms === null) {\n fn(0);\n return resolve(0);\n }\n terms = terms || {};\n var params = {};\n var pager = new Pager();\n var that = this;\n params['type'] = type;\n if (isEmpty(terms)) {\n return this.find('count', params).then(function (results) {\n that.getItems(results, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n } else {\n var list = [];\n for (var key in terms) {\n if (terms[key]) {\n list.push(key + SEPARATOR + terms[key]);\n }\n }\n if (!isEmpty(terms)) {\n params['terms'] = list;\n }\n params['count'] = 'true';\n return this.find('terms', params).then(function (results) {\n that.getItems(results, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n }\n }\n /////////////////////////////////////////////\n //\t\t\t\t LINKS\n /////////////////////////////////////////////\n /**\n * Count the total number of links between this object and another type of object.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Function} fn callback (optional)\n * @returns {Promise} the number of links for the given object\n */\n async countLinks(obj, type2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn(0);\n return resolve(0);\n }\n var params = {};\n params['count'] = 'true';\n var pager = new Pager();\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n that.getItems(result, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n }\n /**\n * Returns all objects linked to the given one. Only applicable to many-to-many relationships.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of linked objects\n */\n async getLinkedObjects(obj, type2, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, this.pagerToParams(pager))).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches through all linked objects in many-to-many relationships.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} field the name of the field to target (within a nested field \"nstd\")\n * @param {String} query a query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of linked objects\n */\n async findLinkedObjects(obj, type2, field, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var params = {\n field: field,\n q: query || '*'\n };\n params = merge(params, this.pagerToParams(pager));\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Checks if this object is linked to another.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} id2 the other id\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if the two are linked\n */\n async isLinked(obj, type2, id2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2 || !id2) {\n fn(false);\n return resolve(false);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2) + '/' + urlEncode(id2);\n return this.getEntity(this.invokeGet(url)).then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n });\n }\n /**\n * Checks if a given object is linked to this one.\n * @param {ParaObject} obj the object to execute this method on\n * @param {ParaObject} toObj the other object\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if linked\n */\n async isLinkedToObject(obj, toObj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n checkParaObject(toObj);\n if (!obj || !obj.getId() || !toObj || !toObj.getId()) {\n fn(false);\n return resolve(false);\n }\n return this.isLinked(obj, toObj.getType(), toObj.getId(), fn);\n }\n /**\n * Links an object to this one in a many-to-many relationship.\n * Only a link is created. Objects are left untouched.\n * The type of the second object is automatically determined on read.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} id2 the other id\n * @param {Function} fn callback (optional)\n * @returns {Promise} the id of the Linker object that is created\n */\n async link(obj, id2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !id2) {\n fn(null);\n return resolve(null);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(id2);\n return this.getEntity(this.invokePost(url), fn);\n }\n /**\n * Unlinks an object from this one.\n * Only a link is deleted. Objects are left untouched.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} id2 the other id\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async unlink(obj, type2, id2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2 || !id2) {\n fn(null);\n return resolve(null);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2) + '/' + urlEncode(id2);\n return this.getEntity(this.invokeDelete(url), fn);\n }\n /**\n * Unlinks all objects that are linked to this one.\n * Deletes all Linker objects.\n * Only the links are deleted. Objects are left untouched.\n * @param {ParaObject} obj the object to execute this method on\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async unlinkAll(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId()) {\n fn(null);\n return resolve(null);\n }\n var url = obj.getObjectURI() + '/links';\n return this.getEntity(this.invokeDelete(url), fn);\n }\n /**\n * Count the total number of child objects for this object.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Function} fn callback (optional)\n * @returns {Promise} the number of links\n */\n async countChildren(obj, type2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn(0);\n return resolve(0);\n }\n var params = {};\n params['count'] = 'true';\n params['childrenonly'] = 'true';\n var pager = new Pager();\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n that.getItems(result, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n }\n /**\n * Returns all child objects linked to this object.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} field the field name to use as filter\n * @param {String} term the field value to use as filter\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of ParaObject in a one-to-many relationship with this object\n */\n async getChildren(obj, type2, field, term, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var params = {};\n params['childrenonly'] = 'true';\n if (field) {\n params['field'] = field;\n }\n if (term) {\n params['term'] = term;\n }\n params = merge(params, this.pagerToParams(pager));\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Search through all child objects. Only searches child objects directly\n * connected to this parent via the `parentid` field.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} query a query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of ParaObject in a one-to-many relationship with this object\n */\n async findChildren(obj, type2, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var params = {\n childrenonly: 'true',\n q: query || '*'\n };\n params = merge(params, this.pagerToParams(pager));\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Deletes all child objects permanently.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async deleteChildren(obj, type2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn(null);\n return resolve(null);\n }\n var params = {};\n params['childrenonly'] = 'true';\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n return this.getEntity(this.invokeDelete(url, params), fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\t UTILS\n /////////////////////////////////////////////\n /**\n * Generates a new unique id.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a new id\n */\n async newId(fn) {\n fn = fn || noop;\n return this.getEntity(this.invokeGet('utils/newid')).then(function (result) {\n var res = result ? result : '';\n fn(res);\n return res;\n });\n }\n /**\n * Returns the current timestamp.\n * @param {Function} fn callback (optional)\n * @returns {Promise} timestamp in milliseconds\n */\n async getTimestamp(fn) {\n fn = fn || noop;\n return this.getEntity(this.invokeGet('utils/timestamp')).then(function (result) {\n var res = result ? result : 0;\n fn(res);\n return res;\n });\n }\n /**\n * Formats a date in a specific format.\n * @param {String} format the date format\n * @param {String} locale the locale instance\n * @param {Function} fn callback (optional)\n * @returns {Promise} a formatted date\n */\n async formatDate(format, locale, fn) {\n var params = { format: format || '', locale: locale || 'US' };\n return this.getEntity(this.invokeGet('utils/formatdate', params), fn);\n }\n /**\n * Converts spaces to dashes.\n * @param {String} str a string with spaces\n * @param {String} replaceWith a string to replace spaces with\n * @param {Function} fn callback (optional)\n * @returns {Promise} a string with no whitespace\n */\n async noSpaces(str, replaceWith, fn) {\n var params = { string: str || '', replacement: replaceWith || '' };\n return this.getEntity(this.invokeGet('utils/nospaces', params), fn);\n }\n /**\n * Strips all symbols, punctuation, whitespace and control chars from a string.\n * @param {String} str a dirty string\n * @param {Function} fn callback (optional)\n * @returns {Promise} a clean string\n */\n async stripAndTrim(str, fn) {\n var params = { string: str || '' };\n return this.getEntity(this.invokeGet('utils/nosymbols', params), fn);\n }\n /**\n * Converts Markdown to HTML\n * @param {String} markdownString some Markdown\n * @param {Function} fn callback (optional)\n * @returns {Promise} HTML\n */\n async markdownToHtml(markdownString, fn) {\n var params = { md: markdownString || '' };\n return this.getEntity(this.invokeGet('utils/md2html', params), fn);\n }\n /**\n * Returns the number of minutes, hours, months elapsed for a time delta (milliseconds).\n * @param {Number} delta the time delta between two events, in milliseconds\n * @param {Function} fn callback (optional)\n * @returns {Promise} a string like \"5m\", \"1h\"\n */\n async approximately(delta, fn) {\n var params = { delta: delta || 0 };\n return this.getEntity(this.invokeGet('utils/timeago', params), fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\t MISC\n /////////////////////////////////////////////\n /**\n * Generates a new set of access/secret keys.\n * Old keys are discarded and invalid after this.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of new credentials\n */\n async newKeys(fn) {\n fn = fn || noop;\n var that = this;\n return this.getEntity(this.invokePost('_newkeys')).then(function (result) {\n var res = result || {};\n if (res.secretKey && !isEmpty(res.secretKey.trim())) {\n that.setSecret(res.secretKey);\n }\n fn(res);\n return res;\n });\n }\n /**\n * Returns all registered types for this App.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of plural-singular form of all the registered types.\n */\n async types(fn) {\n return this.getEntity(this.invokeGet('_types'), fn);\n }\n /**\n * Returns the number of objects for each existing type in this App.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of singular object type to object count.\n */\n async typesCount(fn) {\n return this.getEntity(this.invokeGet('_types', { count: 'true' }), fn);\n }\n /**\n * Returns a User or an App that is currently authenticated.\n * @param {String} accessToken a valid JWT access token (optional)\n * @param {Function} fn callback (optional)\n * @returns {Promise} a ParaObject\n */\n async me(accessToken, fn) {\n fn = isFunction(accessToken) ? accessToken : fn || noop;\n if (accessToken && isString(accessToken)) {\n var auth = startsWith(accessToken, 'Bearer') ? accessToken : 'Bearer ' + accessToken;\n var headers = { Authorization: auth };\n return this.getEntity(\n this.invokeSignedRequest('GET', this.endpoint, this.getFullPath('_me'), headers),\n fn,\n false\n );\n } else {\n return this.getEntity(this.invokeGet('_me'), fn, false);\n }\n }\n /**\n * Upvote an object and register the vote in DB.\n * @param {ParaObject} obj the object to receive +1 votes\n * @param {String} voterid the userid of the voter\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if vote was successful\n */\n async voteUp(obj, voterid, expiresAfter, lockedAfter, fn) {\n fn = isFunction(expiresAfter) ? expiresAfter : fn || noop;\n if (!obj || isEmpty(voterid)) {\n fn(false);\n return resolve(false);\n }\n var body = { _voteup: voterid };\n if (isInteger(expiresAfter) && isInteger(lockedAfter)) {\n body['_vote_expires_after'] = expiresAfter;\n body['_vote_locked_after'] = lockedAfter;\n }\n return this.getEntity(this.invokePatch(obj.getObjectURI(), body)).then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n });\n }\n /**\n * Downvote an object and register the vote in DB.\n * @param {ParaObject} obj the object to receive +1 votes\n * @param {String} voterid the userid of the voter\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if vote was successful\n */\n async voteDown(obj, voterid, expiresAfter, lockedAfter, fn) {\n fn = isFunction(expiresAfter) ? expiresAfter : fn || noop;\n fn = fn || noop;\n if (!obj || isEmpty(voterid)) {\n fn(false);\n return resolve(false);\n }\n var body = { _votedown: voterid };\n if (isInteger(expiresAfter) && isInteger(lockedAfter)) {\n body['_vote_expires_after'] = expiresAfter;\n body['_vote_locked_after'] = lockedAfter;\n }\n return this.getEntity(this.invokePatch(obj.getObjectURI(), body)).then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n });\n }\n /**\n * Rebuilds the entire search index.\n * @param {String} destinationIndex an existing index as destination\n * @param {Function} fn callback (optional)\n * @returns {Promise} a response object with properties \"tookMillis\" and \"reindexed\"\n */\n async rebuildIndex(destinationIndex, fn) {\n fn = fn || noop;\n if (!destinationIndex) {\n return this.getEntity(this.invokePost('_reindex'), fn);\n } else {\n return this.getEntity(\n this.invokeSignedRequest(\n 'POST',\n this.endpoint,\n this.getFullPath('_reindex'),\n {},\n { destinationIndex: destinationIndex }\n ),\n fn\n );\n }\n }\n /////////////////////////////////////////////\n //\t\t\tValidation Constraints\n /////////////////////////////////////////////\n /**\n * Returns the validation constraints map.\n * @param {String} type a type\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map containing all validation constraints.\n */\n async validationConstraints(type, fn) {\n return this.getEntity(this.invokeGet('_constraints' + (type ? '/' + urlEncode(type) : '')), fn);\n }\n /**\n * Add a new constraint for a given field.\n * @param {String} type a type\n * @param {String} field a field name\n * @param {Constraint} cons the constraint\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map containing all validation constraints for this type.\n */\n async addValidationConstraint(type, field, cons, fn) {\n fn = fn || noop;\n checkConstraint(cons);\n if (!type || !field || !cons) {\n fn({});\n return resolve({});\n }\n return this.getEntity(\n this.invokePut(\n '_constraints/' + urlEncode(type) + '/' + field + '/' + cons.getName(),\n cons.getPayload()\n ),\n fn\n );\n }\n /**\n * Removes a validation constraint for a given field.\n * @param {String} type a type\n * @param {String} field a field name\n * @param {String} constraintName the name of the constraint to remove\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map containing all validation constraints for this type.\n */\n async removeValidationConstraint(type, field, constraintName, fn) {\n fn = fn || noop;\n if (!type || !field || !constraintName) {\n fn({});\n return resolve({});\n }\n return this.getEntity(\n this.invokeDelete('_constraints/' + urlEncode(type) + '/' + field + '/' + constraintName),\n fn\n );\n }\n /////////////////////////////////////////////\n //\t\t\tResource Permissions\n /////////////////////////////////////////////\n /**\n * Returns only the permissions for a given subject (user) of the current app.\n * If subject is not given returns the permissions for all subjects and resources for current app.\n * @param {String} subjectid the subject id (user id)\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of subject ids to resource names to a list of allowed methods\n */\n async resourcePermissions(subjectid, fn) {\n if (!subjectid) {\n return this.getEntity(this.invokeGet('_permissions'), fn);\n } else {\n return this.getEntity(this.invokeGet('_permissions/' + urlEncode(subjectid)), fn);\n }\n }\n /**\n * Grants a permission to a subject that allows them to call the specified HTTP methods on a given resource.\n * @param {String} subjectid subject id (user id)\n * @param {String} resourcePath resource path or object type\n * @param {Array} permission a set of HTTP methods\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async grantResourcePermission(subjectid, resourcePath, permission, fn) {\n return this.grantResourcePermissions(subjectid, resourcePath, permission, false, fn);\n }\n /**\n * Grants a permission to a subject that allows them to call the specified HTTP methods on a given resource.\n * @param {String} subjectid subject id (user id)\n * @param {String} resourcePath resource path or object type\n * @param {Array} permission a set of HTTP methods\n * @param {Boolean} allowGuestAccess if true - all unauthenticated requests will go through, 'false' by default.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async grantResourcePermissions(subjectid, resourcePath, permission, allowGuestAccess, fn) {\n fn = fn || noop;\n if (!subjectid || !resourcePath || !permission || !isArray(permission)) {\n fn({});\n return resolve({});\n }\n if (allowGuestAccess && subjectid === '*') {\n permission.push('?');\n }\n resourcePath = base64Url(resourcePath);\n return this.getEntity(\n this.invokePut('_permissions/' + urlEncode(subjectid) + '/' + resourcePath, permission),\n fn\n );\n }\n /**\n * Revokes a permission for a subject, meaning they no longer will be able to access the given resource.\n * @param {String} subjectid subject id (user id)\n * @param {String} resourcePath resource path or object type\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async revokeResourcePermission(subjectid, resourcePath, fn) {\n fn = fn || noop;\n if (!subjectid || !resourcePath) {\n fn({});\n return resolve({});\n }\n resourcePath = base64Url(resourcePath);\n return this.getEntity(\n this.invokeDelete('_permissions/' + urlEncode(subjectid) + '/' + resourcePath),\n fn\n );\n }\n /**\n * Revokes all permission for a subject.\n * @param {String} subjectid subject id (user id)\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async revokeAllResourcePermissions(subjectid, fn) {\n fn = fn || noop;\n if (!subjectid) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokeDelete('_permissions/' + urlEncode(subjectid)), fn);\n }\n /**\n * Checks if a subject is allowed to call method X on resource Y.\n * @param {String} subjectid subject id\n * @param {String} resourcePath resource path or object type\n * @param {String} httpMethod HTTP method name\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if allowed\n */\n async isAllowedTo(subjectid, resourcePath, httpMethod, fn) {\n fn = fn || noop;\n if (!subjectid || !resourcePath || !httpMethod) {\n fn(false);\n return resolve(false);\n }\n resourcePath = base64Url(resourcePath);\n var url = '_permissions/' + urlEncode(subjectid) + '/' + resourcePath + '/' + httpMethod;\n return this.getEntity(this.invokeGet(url))\n .then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n })\n .catch(function () {\n fn(false);\n return false;\n });\n }\n /////////////////////////////////////////////\n //\t\t\tResource Permissions\n /////////////////////////////////////////////\n /**\n * Returns the value of a specific app setting (property) or all settings if key is blank.\n * @param {String} key a key\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map\n */\n async appSettings(key, fn) {\n fn = fn || noop;\n if (!key || isEmpty(key.trim())) {\n return this.getEntity(this.invokeGet('_settings'), fn);\n } else {\n return this.getEntity(this.invokeGet('_settings/' + key.trim()), fn);\n }\n }\n /**\n * Adds or overwrites an app-specific setting.\n * @param {String} key a key\n * @param {Object} value a value\n * @param {Function} fn callback (optional)\n * @returns {Promise} void\n */\n async addAppSetting(key, value, fn) {\n fn = fn || noop;\n if (!key || isEmpty(key.trim()) || !value || isEmpty(value)) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokePut('_settings/' + key.trim(), { value: value }), fn);\n }\n /**\n * Overwrites all app-specific settings.\n * @param {Object} settings a key-value map of properties\n * @param {Function} fn callback (optional)\n * @returns {Promise} void\n */\n async setAppSettings(settings, fn) {\n fn = fn || noop;\n if (!settings) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokePut('_settings', settings), fn);\n }\n /**\n * Removes an app-specific setting.\n * @param {String} key a key\n * @param {Function} fn callback (optional)\n * @returns {Promise} void\n */\n async removeAppSetting(key, fn) {\n fn = fn || noop;\n if (!key || isEmpty(key)) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokeDelete('_settings/' + key.trim()), fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\tAccess Tokens\n /////////////////////////////////////////////\n /**\n * Takes an identity provider access token and fetches the user data from that provider.\n * A new User object is created if that user doesn't exist.\n * Access tokens are returned upon successful authentication using one of the SDKs from\n * Facebook, Google, Twitter, etc.\n * <b>Note:</b> Twitter uses OAuth 1 and gives you a token and a token secret.\n * <b>You must concatenate them like this: <code>{oauth_token}:{oauth_token_secret}</code> and\n * use that as the provider access token.</b>\n * @param {String} provider identity provider, e.g. 'facebook', 'google'...\n * @param {String} providerToken access token from a provider like Facebook, Google, Twitter\n * @param {Boolean} rememberJWT if true, the access token returned by Para will be saved and available via getAccessToken()\n * @param {Function} fn callback (optional)\n * @returns {Promise} a User object or null if something failed\n */\n async signIn(provider, providerToken, rememberJWT, fn) {\n var rememberToken = isBoolean(rememberJWT) ? rememberJWT : true;\n fn = isFunction(rememberJWT) ? rememberJWT : fn || noop;\n\n if (provider && providerToken) {\n var credentials = {};\n var that = this;\n credentials['appid'] = that.accessKey;\n credentials['provider'] = provider;\n credentials['token'] = providerToken;\n return this.getEntity(this.invokePost(JWT_PATH, credentials))\n .then(function (result) {\n if (result !== null && result['user'] && result['jwt']) {\n var jwtData = result['jwt'];\n if (jwtData && rememberToken) {\n that.tokenKey = jwtData['access_token'];\n that.tokenKeyExpires = jwtData['expires'];\n that.tokenKeyNextRefresh = jwtData['refresh'];\n }\n var user = new ParaObject();\n user.setFields(result['user']);\n fn(user);\n return user;\n } else {\n that.clearAccessToken();\n }\n fn(null);\n return null;\n })\n .catch(function () {\n fn(null);\n return null;\n });\n }\n fn(null);\n return Promise.reject(new Error('Provider and provider token are required.'));\n }\n /**\n * Clears the JWT access token but token is not revoked.\n * Tokens can be revoked globally per user with revokeAllTokens().\n */\n signOut() {\n this.clearAccessToken();\n }\n /**\n * Refreshes the JWT access token. This requires a valid existing token.\n * Call link signIn() first.\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if token was refreshed\n */\n async refreshToken(fn) {\n fn = fn || noop;\n var that = this;\n var now = new Date().getTime();\n var notExpired = that.tokenKeyExpires !== null && that.tokenKeyExpires > now;\n var canRefresh =\n that.tokenKeyNextRefresh !== null &&\n (that.tokenKeyNextRefresh < now || that.tokenKeyNextRefresh > that.tokenKeyExpires);\n // token present and NOT expired\n if (that.tokenKey !== null && notExpired && canRefresh) {\n return this.getEntity(this.invokeGet(JWT_PATH))\n .then(function (result) {\n if (result !== null && result['user'] && result['jwt']) {\n var jwtData = result['jwt'];\n that.tokenKey = jwtData['access_token'];\n that.tokenKeyExpires = jwtData['expires'];\n that.tokenKeyNextRefresh = jwtData['refresh'];\n fn(true);\n return true;\n } else {\n that.clearAccessToken();\n }\n fn(false);\n return false;\n })\n .catch(function () {\n fn(false);\n return false;\n });\n }\n fn(false);\n return Promise.resolve(false);\n }\n /**\n * Revokes all user tokens for a given user id.\n * This would be equivalent to \"logout everywhere\".\n * <b>Note:</b> Generating a new API secret on the server will also invalidate all client tokens.\n * Requires a valid existing token.\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if successful\n */\n async revokeAllTokens(fn) {\n fn = fn || noop;\n return this.getEntity(this.invokeDelete(JWT_PATH))\n .then(function (result) {\n var res = result !== null;\n fn(res);\n return res;\n })\n .catch(function () {\n fn(false);\n return false;\n });\n }\n}\n\n/////////////////////////////////////////////\n//\t\t\t\tUtilities\n/////////////////////////////////////////////\n\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\nfunction isString(value) {\n return typeof value === 'string' || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nfunction isBoolean(value) {\n return typeof value === 'boolean' || value instanceof Boolean;\n}\n\nfunction isInteger(value) {\n return typeof value == 'number';\n}\n\nfunction startsWith(value, prefix) {\n if (value == null) {\n return false;\n }\n return String(value).startsWith(prefix);\n}\n\nfunction endsWith(value, suffix) {\n if (value == null) {\n return false;\n }\n return String(value).endsWith(suffix);\n}\n\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArray(value) || isString(value)) {\n return value.length === 0;\n }\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n if (typeof value === 'object') {\n for (var key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n }\n return true;\n}\n\nfunction noop() { }\n\nfunction merge(target) {\n var output = target;\n if (output == null || typeof output !== 'object') {\n output = {};\n }\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (source == null) {\n continue;\n }\n for (var key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue;\n }\n var sourceValue = source[key];\n var targetValue = output[key];\n if (\n sourceValue &&\n typeof sourceValue === 'object' &&\n !isArray(sourceValue) &&\n !(sourceValue instanceof Date)\n ) {\n if (!targetValue || typeof targetValue !== 'object' || isArray(targetValue)) {\n targetValue = {};\n }\n output[key] = merge(targetValue, sourceValue);\n } else {\n output[key] = sourceValue;\n }\n }\n }\n return output;\n}\n\nfunction urlEncode(path) {\n return encodeURIComponent(path).replace(/[!'()*]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\nfunction uriEncodeAWSV4(path) {\n if (!path || !isString(path)) {\n return '';\n }\n return urlEncode(path).replace(/%2F/g, '/');\n}\n\nfunction unescape(str) {\n return (str + '==='.slice((str.length + 3) % 4)).replace(/-/g, '+').replace(/_/g, '/');\n}\n\nfunction decode(str, encoding) {\n return Buffer.from(unescape(str), 'base64').toString(encoding || 'utf8');\n}\n\nfunction base64Url(str) {\n return Buffer.from(str).toString('base64url');\n}\n\nfunction resolve(obj) {\n return Promise.resolve(obj);\n}\n\nfunction checkParaObject(obj) {\n if (obj) {\n assert(obj instanceof ParaObject, 'Parameter must be a ParaObject.');\n }\n}\n\nfunction checkParaObjects(obj) {\n if (obj && isArray(obj) && !isEmpty(obj)) {\n assert(obj[0] instanceof ParaObject, 'Parameter must be an array of ParaObjects.');\n }\n}\n\nfunction checkPager(obj, fn) {\n if (obj) {\n if (isFunction(obj)) {\n return obj;\n } else {\n assert(obj instanceof Pager, 'Parameter must be a Pager object.');\n return fn || noop;\n }\n }\n return noop;\n}\n\nfunction checkConstraint(obj) {\n if (obj) {\n assert(obj instanceof Constraint, 'Parameter must be a Constraint object.');\n }\n}\n\nexport { ParaClient, ParaObject, Pager, Constraint };\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108],"mappings":"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"}
1
+ {"version":3,"file":"para-client-js.global.iife.js","names":["http","Stream","util","util","Stream","util","path","http","https","fs","Stream","crypto","fs","crypto","os","tty","util","Stream","Stream","util","Stream","aws4","urlEncode","aws4","unescape"],"sources":["../../shims/assert.js","../../node_modules/es-errors/type.js","../../node_modules/object-inspect/util.inspect.js","../../node_modules/object-inspect/index.js","../../node_modules/side-channel-list/index.js","../../node_modules/es-object-atoms/index.js","../../node_modules/es-errors/index.js","../../node_modules/es-errors/eval.js","../../node_modules/es-errors/range.js","../../node_modules/es-errors/ref.js","../../node_modules/es-errors/syntax.js","../../node_modules/es-errors/uri.js","../../node_modules/math-intrinsics/abs.js","../../node_modules/math-intrinsics/floor.js","../../node_modules/math-intrinsics/max.js","../../node_modules/math-intrinsics/min.js","../../node_modules/math-intrinsics/pow.js","../../node_modules/math-intrinsics/round.js","../../node_modules/math-intrinsics/isNaN.js","../../node_modules/math-intrinsics/sign.js","../../node_modules/gopd/gOPD.js","../../node_modules/gopd/index.js","../../node_modules/es-define-property/index.js","../../node_modules/has-symbols/shams.js","../../node_modules/has-symbols/index.js","../../node_modules/get-proto/Reflect.getPrototypeOf.js","../../node_modules/get-proto/Object.getPrototypeOf.js","../../node_modules/function-bind/implementation.js","../../node_modules/function-bind/index.js","../../node_modules/call-bind-apply-helpers/functionCall.js","../../node_modules/call-bind-apply-helpers/functionApply.js","../../node_modules/call-bind-apply-helpers/reflectApply.js","../../node_modules/call-bind-apply-helpers/actualApply.js","../../node_modules/call-bind-apply-helpers/index.js","../../node_modules/dunder-proto/get.js","../../node_modules/get-proto/index.js","../../node_modules/hasown/index.js","../../node_modules/get-intrinsic/index.js","../../node_modules/call-bound/index.js","../../node_modules/side-channel-map/index.js","../../node_modules/side-channel-weakmap/index.js","../../node_modules/side-channel/index.js","../../node_modules/qs/lib/formats.js","../../node_modules/qs/lib/utils.js","../../node_modules/qs/lib/stringify.js","../../node_modules/qs/lib/parse.js","../../node_modules/qs/lib/index.js","../../node_modules/mime/Mime.js","../../node_modules/mime/types/standard.js","../../node_modules/mime/types/other.js","../../node_modules/mime/index.js","../../node_modules/methods/index.js","../../node_modules/delayed-stream/lib/delayed_stream.js","../../node_modules/combined-stream/lib/combined_stream.js","../../node_modules/form-data/node_modules/mime-db/db.json","../../node_modules/form-data/node_modules/mime-db/index.js","../../node_modules/form-data/node_modules/mime-types/index.js","../../node_modules/asynckit/lib/defer.js","../../node_modules/asynckit/lib/async.js","../../node_modules/asynckit/lib/abort.js","../../node_modules/asynckit/lib/iterate.js","../../node_modules/asynckit/lib/state.js","../../node_modules/asynckit/lib/terminator.js","../../node_modules/asynckit/parallel.js","../../node_modules/asynckit/serialOrdered.js","../../node_modules/asynckit/serial.js","../../node_modules/asynckit/index.js","../../node_modules/has-tostringtag/shams.js","../../node_modules/es-set-tostringtag/index.js","../../node_modules/form-data/lib/populate.js","../../node_modules/form-data/lib/form_data.js","../../node_modules/@noble/hashes/_u64.js","../../node_modules/@noble/hashes/cryptoNode.js","../../node_modules/@noble/hashes/utils.js","../../node_modules/@noble/hashes/sha3.js","../../node_modules/@paralleldrive/cuid2/src/index.js","../../node_modules/@paralleldrive/cuid2/index.js","../../node_modules/wrappy/wrappy.js","../../node_modules/asap/raw.js","../../node_modules/asap/asap.js","../../node_modules/dezalgo/dezalgo.js","../../node_modules/once/once.js","../../node_modules/formidable/dist/index.cjs","../../node_modules/ms/index.js","../../node_modules/debug/src/common.js","../../node_modules/debug/src/browser.js","../../node_modules/has-flag/index.js","../../node_modules/supports-color/index.js","../../node_modules/debug/src/node.js","../../node_modules/debug/src/index.js","../../node_modules/cookiejar/cookiejar.js","../../node_modules/fast-safe-stringify/index.js","../../node_modules/superagent/lib/utils.js","../../node_modules/superagent/lib/request-base.js","../../node_modules/superagent/lib/node/http2wrapper.js","../../node_modules/superagent/lib/node/decompress.js","../../node_modules/superagent/lib/node/unzip.js","../../node_modules/superagent/lib/response-base.js","../../node_modules/superagent/lib/node/response.js","../../node_modules/superagent/lib/agent-base.js","../../node_modules/superagent/lib/node/agent.js","../../node_modules/superagent/lib/node/parsers/urlencoded.js","../../node_modules/superagent/lib/node/parsers/json.js","../../node_modules/superagent/lib/node/parsers/text.js","../../node_modules/superagent/lib/node/parsers/image.js","../../node_modules/superagent/lib/node/parsers/index.js","../../node_modules/superagent/lib/node/index.js","../../node_modules/aws4/lru.js","../../node_modules/aws4/aws4.js","../../lib/ParaObject.js","../../lib/Pager.js","../../lib/Constraint.js","../../lib/index.js"],"sourcesContent":["export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n\nassert.ok = assert;\nassert.fail = function fail(message) {\n throw new Error(message || 'Assertion failed');\n};\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n throw new Error(message || `Expected ${actual} to equal ${expected}`);\n }\n};\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","module.exports = require('util').inspect;\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n __proto__: null,\n 'double': '\"',\n single: \"'\"\n};\nvar quoteREs = {\n __proto__: null,\n 'double': /([\"\\\\])/g,\n single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n /* eslint-env browser */\n if (typeof window !== 'undefined' && obj === window) {\n return '{ [object Window] }';\n }\n if (\n (typeof globalThis !== 'undefined' && obj === globalThis)\n || (typeof global !== 'undefined' && obj === global)\n ) {\n return '{ [object globalThis] }';\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var style = opts.quoteStyle || defaultStyle;\n var quoteChar = quotes[style];\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction canTrustToString(obj) {\n return !toStringTag || !(typeof obj === 'object' && (toStringTag in obj || typeof obj[toStringTag] !== 'undefined'));\n}\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && canTrustToString(obj); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && canTrustToString(obj); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && canTrustToString(obj); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && canTrustToString(obj); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && canTrustToString(obj); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && canTrustToString(obj); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && canTrustToString(obj); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n quoteRE.lastIndex = 0;\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n","'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && $o && !$o.next) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);\n\t\t}\n\t};\n\treturn channel;\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n","'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n","'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n","'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n","'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n","'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n","'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {Map<K, V> | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude<import('.'), false>} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n\t\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t\t/** @type {WeakMap<K & object, V> | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable<typeof $m>} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n","'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar formats = require('./formats');\nvar getSideChannel = require('side-channel');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\n// Track objects created from arrayLimit overflow using side-channel\n// Stores the current max numeric index for O(1) lookup\nvar overflowChannel = getSideChannel();\n\nvar markOverflow = function markOverflow(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex);\n return obj;\n};\n\nvar isOverflow = function isOverflow(obj) {\n return overflowChannel.has(obj);\n};\n\nvar getMaxIndex = function getMaxIndex(obj) {\n return overflowChannel.get(obj);\n};\n\nvar setMaxIndex = function setMaxIndex(obj, maxIndex) {\n overflowChannel.set(obj, maxIndex);\n};\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array[array.length] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted[compacted.length] = obj[j];\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? { __proto__: null } : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object' && typeof source !== 'function') {\n if (isArray(target)) {\n var nextIndex = target.length;\n if (options && typeof options.arrayLimit === 'number' && nextIndex > options.arrayLimit) {\n return markOverflow(arrayToObject(target.concat(source), options), nextIndex);\n }\n target[nextIndex] = source;\n } else if (target && typeof target === 'object') {\n if (isOverflow(target)) {\n // Add at next numeric index for overflow objects\n var newIndex = getMaxIndex(target) + 1;\n target[newIndex] = source;\n setMaxIndex(target, newIndex);\n } else if (options && options.strictMerge) {\n return [target, source];\n } else if (\n (options && (options.plainObjects || options.allowPrototypes))\n || !has.call(Object.prototype, source)\n ) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n if (isOverflow(source)) {\n // Create new object with target at 0, source values shifted by 1\n var sourceKeys = Object.keys(source);\n var result = options && options.plainObjects\n ? { __proto__: null, 0: target }\n : { 0: target };\n for (var m = 0; m < sourceKeys.length; m++) {\n var oldKey = parseInt(sourceKeys[m], 10);\n result[oldKey + 1] = source[sourceKeys[m]];\n }\n return markOverflow(result, getMaxIndex(source) + 1);\n }\n var combined = [target].concat(source);\n if (options && typeof options.arrayLimit === 'number' && combined.length > options.arrayLimit) {\n return markOverflow(arrayToObject(combined, options), combined.length - 1);\n }\n return combined;\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target[target.length] = item;\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n\n if (isOverflow(source) && !isOverflow(acc)) {\n markOverflow(acc, getMaxIndex(source));\n }\n if (isOverflow(acc)) {\n var keyNum = parseInt(key, 10);\n if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) {\n setMaxIndex(acc, keyNum);\n }\n }\n\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, defaultDecoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var j = 0; j < string.length; j += limit) {\n var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n var arr = [];\n\n for (var i = 0; i < segment.length; ++i) {\n var c = segment.charCodeAt(i);\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n arr[arr.length] = hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n out += arr.join('');\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue[queue.length] = { obj: obj, prop: key };\n refs[refs.length] = val;\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b, arrayLimit, plainObjects) {\n // If 'a' is already an overflow object, add to it\n if (isOverflow(a)) {\n var newIndex = getMaxIndex(a) + 1;\n a[newIndex] = b;\n setMaxIndex(a, newIndex);\n return a;\n }\n\n var result = [].concat(a, b);\n if (result.length > arrayLimit) {\n return markOverflow(arrayToObject(result, { plainObjects: plainObjects }), result.length - 1);\n }\n return result;\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped[mapped.length] = fn(val[i]);\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isOverflow: isOverflow,\n isRegExp: isRegExp,\n markOverflow: markOverflow,\n maybeMap: maybeMap,\n merge: merge\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n commaRoundTrip: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: utils.encode,\n encodeValuesOnly: false,\n filter: void undefined,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = utils.maybeMap(obj, encoder);\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjustedPrefix + '[]';\n }\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && key && typeof key.value !== 'undefined'\n ? key.value\n : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\\./g, '%2E') : String(key);\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n allowEmptyArrays,\n strictNullHandling,\n skipNulls,\n encodeDotInKeys,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n var arrayFormat;\n if (opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = defaults.arrayFormat;\n }\n\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n var value = obj[key];\n\n if (options.skipNulls && value === null) {\n continue;\n }\n pushToArray(keys, stringify(\n value,\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.allowEmptyArrays,\n options.strictNullHandling,\n options.skipNulls,\n options.encodeDotInKeys,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowEmptyArrays: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decodeDotInKeys: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n duplicates: 'combine',\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictDepth: false,\n strictMerge: true,\n strictNullHandling: false,\n throwOnLimitExceeded: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options, currentArrayLength) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = { __proto__: null };\n\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n\n var limit = options.parameterLimit === Infinity ? void undefined : options.parameterLimit;\n var parts = cleanStr.split(\n options.delimiter,\n options.throwOnLimitExceeded && typeof limit !== 'undefined' ? limit + 1 : limit\n );\n\n if (options.throwOnLimitExceeded && typeof limit !== 'undefined' && parts.length > limit) {\n throw new RangeError('Parameter limit exceeded. Only ' + limit + ' parameter' + (limit === 1 ? '' : 's') + ' allowed.');\n }\n\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key;\n var val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n\n if (key !== null) {\n val = utils.maybeMap(\n parseArrayValue(\n part.slice(pos + 1),\n options,\n isArray(obj[key]) ? obj[key].length : 0\n ),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(String(val));\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (options.comma && isArray(val) && val.length > options.arrayLimit) {\n if (options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n }\n val = utils.combine([], val, options.arrayLimit, options.plainObjects);\n }\n\n if (key !== null) {\n var existing = has.call(obj, key);\n if (existing && (options.duplicates === 'combine' || part.indexOf('[]=') > -1)) {\n obj[key] = utils.combine(\n obj[key],\n val,\n options.arrayLimit,\n options.plainObjects\n );\n } else if (!existing || options.duplicates === 'last') {\n obj[key] = val;\n }\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var currentArrayLength = 0;\n if (chain.length > 0 && chain[chain.length - 1] === '[]') {\n var parentKey = chain.slice(0, -1).join('');\n currentArrayLength = Array.isArray(val) && val[parentKey] ? val[parentKey].length : 0;\n }\n\n var leaf = valuesParsed ? val : parseArrayValue(val, options, currentArrayLength);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n if (utils.isOverflow(leaf)) {\n // leaf is already an overflow object, preserve it\n obj = leaf;\n } else {\n obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n ? []\n : utils.combine(\n [],\n leaf,\n options.arrayLimit,\n options.plainObjects\n );\n }\n } else {\n obj = options.plainObjects ? { __proto__: null } : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n var index = parseInt(decodedRoot, 10);\n var isValidArrayIndex = !isNaN(index)\n && root !== decodedRoot\n && String(index) === decodedRoot\n && index >= 0\n && options.parseArrays;\n if (!options.parseArrays && decodedRoot === '') {\n obj = { 0: leaf };\n } else if (isValidArrayIndex && index < options.arrayLimit) {\n obj = [];\n obj[index] = leaf;\n } else if (isValidArrayIndex && options.throwOnLimitExceeded) {\n throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.');\n } else if (isValidArrayIndex) {\n obj[index] = leaf;\n utils.markOverflow(obj, index);\n } else if (decodedRoot !== '__proto__') {\n obj[decodedRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) {\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n if (options.depth <= 0) {\n if (!options.plainObjects && has.call(Object.prototype, key)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n return [key];\n }\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n var segment = brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n var keys = [];\n\n if (parent) {\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys[keys.length] = parent;\n }\n\n var i = 0;\n while ((segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n\n var segmentContent = segment[1].slice(1, -1);\n if (!options.plainObjects && has.call(Object.prototype, segmentContent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys[keys.length] = segment[1];\n }\n\n if (segment) {\n if (options.strictDepth === true) {\n throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n }\n\n keys[keys.length] = '[' + key.slice(segment.index) + ']';\n }\n\n return keys;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n var keys = splitKeyIntoSegments(givenKey, options);\n\n if (!keys) {\n return;\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n\n if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n\n if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n if (typeof opts.throwOnLimitExceeded !== 'undefined' && typeof opts.throwOnLimitExceeded !== 'boolean') {\n throw new TypeError('`throwOnLimitExceeded` option must be a boolean');\n }\n\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n throw new TypeError('The duplicates option must be either combine, first, or last');\n }\n\n var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n return {\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n duplicates: duplicates,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n strictMerge: typeof opts.strictMerge === 'boolean' ? !!opts.strictMerge : defaults.strictMerge,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === 'boolean' ? opts.throwOnLimitExceeded : false\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? { __proto__: null } : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? { __proto__: null } : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\n/**\n * @param typeMap [Object] Map of MIME type -> Array[extensions]\n * @param ...\n */\nfunction Mime() {\n this._types = Object.create(null);\n this._extensions = Object.create(null);\n\n for (let i = 0; i < arguments.length; i++) {\n this.define(arguments[i]);\n }\n\n this.define = this.define.bind(this);\n this.getType = this.getType.bind(this);\n this.getExtension = this.getExtension.bind(this);\n}\n\n/**\n * Define mimetype -> extension mappings. Each key is a mime-type that maps\n * to an array of extensions associated with the type. The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * If a type declares an extension that has already been defined, an error will\n * be thrown. To suppress this error and force the extension to be associated\n * with the new type, pass `force`=true. Alternatively, you may prefix the\n * extension with \"*\" to map the type to extension, without mapping the\n * extension to the type.\n *\n * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});\n *\n *\n * @param map (Object) type definitions\n * @param force (Boolean) if true, force overriding of existing definitions\n */\nMime.prototype.define = function(typeMap, force) {\n for (let type in typeMap) {\n let extensions = typeMap[type].map(function(t) {\n return t.toLowerCase();\n });\n type = type.toLowerCase();\n\n for (let i = 0; i < extensions.length; i++) {\n const ext = extensions[i];\n\n // '*' prefix = not the preferred type for this extension. So fixup the\n // extension, and skip it.\n if (ext[0] === '*') {\n continue;\n }\n\n if (!force && (ext in this._types)) {\n throw new Error(\n 'Attempt to change mapping for \"' + ext +\n '\" extension from \"' + this._types[ext] + '\" to \"' + type +\n '\". Pass `force=true` to allow this, otherwise remove \"' + ext +\n '\" from the list of extensions for \"' + type + '\".'\n );\n }\n\n this._types[ext] = type;\n }\n\n // Use first extension as default\n if (force || !this._extensions[type]) {\n const ext = extensions[0];\n this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);\n }\n }\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.getType = function(path) {\n path = String(path);\n let last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n let ext = last.replace(/^.*\\./, '').toLowerCase();\n\n let hasPath = last.length < path.length;\n let hasDot = ext.length < last.length - 1;\n\n return (hasDot || !hasPath) && this._types[ext] || null;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.getExtension = function(type) {\n type = /^\\s*([^;\\s]*)/.test(type) && RegExp.$1;\n return type && this._extensions[type.toLowerCase()] || null;\n};\n\nmodule.exports = Mime;\n","module.exports = {\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"es\",\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/express\":[\"exp\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/trig\":[\"trig\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/adpcm\":[\"adp\"],\"audio/amr\":[\"amr\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\",\"opus\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/hsj2\":[\"hsj2\"],\"image/ief\":[\"ief\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/step+xml\":[\"stpx\"],\"model/step+zip\":[\"stpz\"],\"model/step-xml+zip\":[\"stpxz\"],\"model/stl\":[\"stl\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/iso.segment\":[\"m4s\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};","module.exports = {\"application/prs.cww\":[\"cww\"],\"application/vnd.1000minds.decision-model+xml\":[\"1km\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.keynote\":[\"key\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.numbers\":[\"numbers\"],\"application/vnd.apple.pages\":[\"pages\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.balsamiq.bmml+xml\":[\"bmml\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.citationstyles.style+xml\":[\"csl\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dbf\":[\"dbf\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mapbox-vector-tile\":[\"mvt\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"*stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.ac+xml\":[\"*ac\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openblox.game+xml\":[\"obgx\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openstreetmap.data+xml\":[\"osm\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.rar\":[\"rar\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.software602.filler.form+xml\":[\"fo\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.syncml.dmddf+xml\":[\"ddf\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[\"*dmg\"],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[\"*bdoc\"],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"*deb\",\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[\"*iso\"],\"application/x-iwork-keynote-sffkey\":[\"*key\"],\"application/x-iwork-numbers-sffnumbers\":[\"*numbers\"],\"application/x-iwork-pages-sffpages\":[\"*pages\"],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-keepass2\":[\"kdbx\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[\"*exe\"],\"application/x-msdownload\":[\"*exe\",\"*dll\",\"com\",\"bat\",\"*msi\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"*wmf\",\"*wmz\",\"*emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[\"*prc\",\"*pdb\"],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"*rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"*obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"*xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[\"*m4a\"],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[\"*ra\"],\"audio/x-wav\":[\"*wav\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"image/prs.btif\":[\"btif\"],\"image/prs.pti\":[\"pti\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.airzip.accelerator.azv\":[\"azv\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[\"*sub\"],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.microsoft.icon\":[\"ico\"],\"image/vnd.ms-dds\":[\"dds\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.pco.b16\":[\"b16\"],\"image/vnd.tencent.tap\":[\"tap\"],\"image/vnd.valve.source.texture\":[\"vtf\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/vnd.zbrush.pcx\":[\"pcx\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"*ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[\"*bmp\"],\"image/x-pcx\":[\"*pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/vnd.wfa.wsc\":[\"wsc\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.opengex\":[\"ogex\"],\"model/vnd.parasolid.transmit.binary\":[\"x_b\"],\"model/vnd.parasolid.transmit.text\":[\"x_t\"],\"model/vnd.sap.vds\":[\"vds\"],\"model/vnd.usdz+zip\":[\"usdz\"],\"model/vnd.valve.source.compiled-map\":[\"bsp\"],\"model/vnd.vtu\":[\"vtu\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[\"*org\"],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]};","'use strict';\n\nlet Mime = require('./Mime');\nmodule.exports = new Mime(require('./types/standard'), require('./types/other'));\n","/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n return method.toLowerCase();\n });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n return [\n 'get',\n 'post',\n 'put',\n 'head',\n 'delete',\n 'options',\n 'trace',\n 'copy',\n 'lock',\n 'mkcol',\n 'move',\n 'purge',\n 'propfind',\n 'proppatch',\n 'unlock',\n 'report',\n 'mkactivity',\n 'checkout',\n 'merge',\n 'm-search',\n 'notify',\n 'subscribe',\n 'unsubscribe',\n 'patch',\n 'search',\n 'connect'\n ];\n}\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n","var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n","var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n","module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar $TypeError = require('es-errors/type');\n\nvar toStringTag = hasToStringTag ? Symbol.toStringTag : null;\n\n/** @type {import('.')} */\nmodule.exports = function setToStringTag(object, value) {\n\tvar overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;\n\tvar nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;\n\tif (\n\t\t(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')\n\t\t|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')\n\t) {\n\t\tthrow new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');\n\t}\n\tif (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(object, toStringTag, {\n\t\t\t\tconfigurable: !nonConfigurable,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: value,\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tobject[toStringTag] = value; // eslint-disable-line no-param-reassign\n\t\t}\n\t}\n};\n","'use strict';\n\n// populates missing values\nmodule.exports = function (dst, src) {\n Object.keys(src).forEach(function (prop) {\n dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign\n });\n\n return dst;\n};\n","'use strict';\n\nvar CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar crypto = require('crypto');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar setToStringTag = require('es-set-tostringtag');\nvar hasOwn = require('hasown');\nvar populate = require('./populate.js');\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {}; // eslint-disable-line no-param-reassign\n for (var option in options) { // eslint-disable-line no-restricted-syntax\n this[option] = options[option];\n }\n}\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function (field, value, options) {\n options = options || {}; // eslint-disable-line no-param-reassign\n\n // allow filename as single option\n if (typeof options === 'string') {\n options = { filename: options }; // eslint-disable-line no-param-reassign\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value === 'number' || value == null) {\n value = String(value); // eslint-disable-line no-param-reassign\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (Array.isArray(value)) {\n /*\n * Please convert your array into string\n * the way web server expects it\n */\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function (header, value, options) {\n var valueLength = 0;\n\n /*\n * used w/ getLengthSync(), when length is known.\n * e.g. for streaming directly from a remote server,\n * w/ a known file a size, and not wanting to wait for\n * incoming file to finish to get its size.\n */\n if (options.knownLength != null) {\n valueLength += Number(options.knownLength);\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function (value, callback) {\n if (hasOwn(value, 'fd')) {\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function (err, stat) {\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n var fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (hasOwn(value, 'httpVersion')) {\n callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return\n\n // or request stream http://github.com/mikeal/request\n } else if (hasOwn(value, 'httpModule')) {\n // wait till response come back\n value.on('response', function (response) {\n value.pause();\n callback(null, Number(response.headers['content-length']));\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream'); // eslint-disable-line callback-return\n }\n};\n\nFormData.prototype._multiPartHeader = function (field, value, options) {\n /*\n * custom header specified (as string)?\n * it becomes responsible for boundary\n * (e.g. to handle extra CRLFs on .NET servers)\n */\n if (typeof options.header === 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header === 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) { // eslint-disable-line no-restricted-syntax\n if (hasOwn(headers, prop)) {\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return\n var filename;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || (value && (value.name || value.path))) {\n /*\n * custom filename take precedence\n * formidable and the browser add a name property\n * fs- and request- streams have path property\n */\n filename = path.basename(options.filename || (value && (value.name || value.path)));\n } else if (value && value.readable && hasOwn(value, 'httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n return 'filename=\"' + filename + '\"';\n }\n};\n\nFormData.prototype._getContentType = function (value, options) {\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && value && typeof value === 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function () {\n return function (next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = this._streams.length === 0;\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function () {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function (userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) { // eslint-disable-line no-restricted-syntax\n if (hasOwn(userHeaders, header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function (boundary) {\n if (typeof boundary !== 'string') {\n throw new TypeError('FormData boundary must be a string');\n }\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function () {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function () {\n var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n // Add content to the buffer.\n if (Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);\n } else {\n dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) {\n dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]);\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);\n};\n\nFormData.prototype._generateBoundary = function () {\n // This generates a 50 character boundary similar to those used by Firefox.\n\n // They are optimized for boyer-moore parsing.\n this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex');\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually and add it as knownLength option\nFormData.prototype.getLengthSync = function () {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n /*\n * Some async length retrievers are present\n * therefore synchronous length calculation is false.\n * Please use getLength(callback) to get proper length\n */\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function () {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function (cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function (length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function (params, cb) {\n var request;\n var options;\n var defaults = { method: 'post' };\n\n // parse provided url if it's string or treat it as options object\n if (typeof params === 'string') {\n params = parseUrl(params); // eslint-disable-line no-param-reassign\n /* eslint sort-keys: 0 */\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n } else { // use custom params\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol === 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol === 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function (err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function (err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\nsetToStringTag(FormData.prototype, 'FormData');\n\n// Public API\nmodule.exports = FormData;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\n/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nconst nc = require(\"node:crypto\");\nexports.crypto = nc && typeof nc === 'object' && 'webcrypto' in nc\n ? nc.webcrypto\n : nc && typeof nc === 'object' && 'randomBytes' in nc\n ? nc\n : undefined;\n//# sourceMappingURL=cryptoNode.js.map","\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shake256 = exports.shake128 = exports.keccak_512 = exports.keccak_384 = exports.keccak_256 = exports.keccak_224 = exports.sha3_512 = exports.sha3_384 = exports.sha3_256 = exports.sha3_224 = exports.Keccak = void 0;\nexports.keccakP = keccakP;\n/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nconst _u64_ts_1 = require(\"./_u64.js\");\n// prettier-ignore\nconst utils_ts_1 = require(\"./utils.js\");\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = (0, _u64_ts_1.split)(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? (0, _u64_ts_1.rotlBH)(h, l, s) : (0, _u64_ts_1.rotlSH)(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? (0, _u64_ts_1.rotlBL)(h, l, s) : (0, _u64_ts_1.rotlSL)(h, l, s));\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n (0, utils_ts_1.clean)(B);\n}\n/** Keccak sponge function. */\nclass Keccak extends utils_ts_1.Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n (0, utils_ts_1.anumber)(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = (0, utils_ts_1.u32)(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n (0, utils_ts_1.swap32IfBE)(this.state32);\n keccakP(this.state32, this.rounds);\n (0, utils_ts_1.swap32IfBE)(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n (0, utils_ts_1.aexists)(this, false);\n (0, utils_ts_1.abytes)(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n (0, utils_ts_1.anumber)(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n (0, utils_ts_1.aoutput)(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n (0, utils_ts_1.clean)(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nexports.Keccak = Keccak;\nconst gen = (suffix, blockLen, outputLen) => (0, utils_ts_1.createHasher)(() => new Keccak(blockLen, suffix, outputLen));\n/** SHA3-224 hash function. */\nexports.sha3_224 = (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexports.sha3_256 = (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexports.sha3_384 = (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexports.sha3_512 = (() => gen(0x06, 72, 512 / 8))();\n/** keccak-224 hash function. */\nexports.keccak_224 = (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexports.keccak_256 = (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexports.keccak_384 = (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexports.keccak_512 = (() => gen(0x01, 72, 512 / 8))();\nconst genShake = (suffix, blockLen, outputLen) => (0, utils_ts_1.createXOFer)((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\n/** SHAKE128 XOF with 128-bit security. */\nexports.shake128 = (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexports.shake256 = (() => genShake(0x1f, 136, 256 / 8))();\n//# sourceMappingURL=sha3.js.map","/* global global, window, module */\nconst { sha3_512: sha3 } = require(\"@noble/hashes/sha3\");\n\nconst defaultLength = 24;\nconst bigLength = 32;\n\nconst createEntropy = (length = 4, random = Math.random) => {\n let entropy = \"\";\n\n while (entropy.length < length) {\n entropy = entropy + Math.floor(random() * 36).toString(36);\n }\n return entropy;\n};\n\n/*\n * Adapted from https://github.com/juanelas/bigint-conversion\n * MIT License Copyright (c) 2018 Juan Hernández Serrano\n */\nfunction bufToBigInt(buf) {\n let bits = 8n;\n\n let value = 0n;\n for (const i of buf.values()) {\n const bi = BigInt(i);\n value = (value << bits) + bi;\n }\n return value;\n}\n\nconst hash = (input = \"\") => {\n // Drop the first character because it will bias the histogram\n // to the left.\n return bufToBigInt(sha3(input)).toString(36).slice(1);\n};\n\nconst alphabet = Array.from({ length: 26 }, (x, i) =>\n String.fromCharCode(i + 97)\n);\n\nconst randomLetter = (random) =>\n alphabet[Math.floor(random() * alphabet.length)];\n\n/*\nThis is a fingerprint of the host environment. It is used to help\nprevent collisions when generating ids in a distributed system.\nIf no global object is available, you can pass in your own, or fall back\non a random string.\n*/\nconst createFingerprint = ({\n globalObj = typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : {},\n random = Math.random,\n} = {}) => {\n const globals = Object.keys(globalObj).toString();\n const sourceString = globals.length\n ? globals + createEntropy(bigLength, random)\n : createEntropy(bigLength, random);\n\n return hash(sourceString).substring(0, bigLength);\n};\n\nconst createCounter = (count) => () => {\n return count++;\n};\n\n// ~22k hosts before 50% chance of initial counter collision\n// with a remaining counter range of 9.0e+15 in JavaScript.\nconst initialCountMax = 476782367;\n\nconst init = ({\n // Fallback if the user does not pass in a CSPRNG. This should be OK\n // because we don't rely solely on the random number generator for entropy.\n // We also use the host fingerprint, current time, and a session counter.\n random = Math.random,\n counter = createCounter(Math.floor(random() * initialCountMax)),\n length = defaultLength,\n fingerprint = createFingerprint({ random }),\n} = {}) => {\n return function cuid2() {\n const firstLetter = randomLetter(random);\n\n // If we're lucky, the `.toString(36)` calls may reduce hashing rounds\n // by shortening the input to the hash function a little.\n const time = Date.now().toString(36);\n const count = counter().toString(36);\n\n // The salt should be long enough to be globally unique across the full\n // length of the hash. For simplicity, we use the same length as the\n // intended id output.\n const salt = createEntropy(length, random);\n const hashInput = `${time + salt + count + fingerprint}`;\n\n return `${firstLetter + hash(hashInput).substring(1, length)}`;\n };\n};\n\nconst createId = init();\n\nconst isCuid = (id, { minLength = 2, maxLength = bigLength } = {}) => {\n const length = id.length;\n const regex = /^[0-9a-z]+$/;\n\n try {\n if (\n typeof id === \"string\" &&\n length >= minLength &&\n length <= maxLength &&\n regex.test(id)\n )\n return true;\n } finally {\n }\n\n return false;\n};\n\nmodule.exports.getConstants = () => ({ defaultLength, bigLength });\nmodule.exports.init = init;\nmodule.exports.createId = createId;\nmodule.exports.bufToBigInt = bufToBigInt;\nmodule.exports.createCounter = createCounter;\nmodule.exports.createFingerprint = createFingerprint;\nmodule.exports.isCuid = isCuid;\n","const { createId, init, getConstants, isCuid } = require(\"./src/index\");\n\nmodule.exports.createId = createId;\nmodule.exports.init = init;\nmodule.exports.getConstants = getConstants;\nmodule.exports.isCuid = isCuid;\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","\"use strict\";\n\nvar domain; // The domain module is executed on demand\nvar hasSetImmediate = typeof setImmediate === \"function\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including network IO events in Node.js.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Avoids a function call\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory excaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\nrawAsap.requestFlush = requestFlush;\nfunction requestFlush() {\n // Ensure flushing is not bound to any domain.\n // It is not sufficient to exit the domain, because domains exist on a stack.\n // To execute code outside of any domain, the following dance is necessary.\n var parentDomain = process.domain;\n if (parentDomain) {\n if (!domain) {\n // Lazy execute the domain module.\n // Only employed if the user elects to use domains.\n domain = require(\"domain\");\n }\n domain.active = process.domain = null;\n }\n\n // `setImmediate` is slower that `process.nextTick`, but `process.nextTick`\n // cannot handle recursion.\n // `requestFlush` will only be called recursively from `asap.js`, to resume\n // flushing after an error is thrown into a domain.\n // Conveniently, `setImmediate` was introduced in the same version\n // `process.nextTick` started throwing recursion errors.\n if (flushing && hasSetImmediate) {\n setImmediate(flush);\n } else {\n process.nextTick(flush);\n }\n\n if (parentDomain) {\n domain.active = process.domain = parentDomain;\n }\n}\n","\"use strict\";\n\nvar rawAsap = require(\"./raw\");\nvar freeTasks = [];\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with\n * priority over IO events. An exception thrown in a task can be handled by\n * `process.on(\"uncaughtException\") or `domain.on(\"error\")`, but will otherwise\n * crash the process. If the error is handled, all subsequent tasks will\n * resume.\n *\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawTask.domain = process.domain;\n rawAsap(rawTask);\n}\n\nfunction RawTask() {\n this.task = null;\n this.domain = null;\n}\n\nRawTask.prototype.call = function () {\n if (this.domain) {\n this.domain.enter();\n }\n var threw = true;\n try {\n this.task.call();\n threw = false;\n // If the task throws an exception (presumably) Node.js restores the\n // domain stack for the next event.\n if (this.domain) {\n this.domain.exit();\n }\n } finally {\n // We use try/finally and a threw flag to avoid messing up stack traces\n // when we catch and release errors.\n if (threw) {\n // In Node.js, uncaught exceptions are considered fatal errors.\n // Re-throw them to interrupt flushing!\n // Ensure that flushing continues if an uncaught exception is\n // suppressed listening process.on(\"uncaughtException\") or\n // domain.on(\"error\").\n rawAsap.requestFlush();\n }\n // If the task threw an error, we do not want to exit the domain here.\n // Exiting the domain would prevent the domain from catching the error.\n this.task = null;\n this.domain = null;\n freeTasks.push(this);\n }\n};\n\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(dezalgo)\n\nvar asap = require('asap')\n\nfunction dezalgo (cb) {\n var sync = true\n asap(function () {\n sync = false\n })\n\n return function zalgoSafe() {\n var args = arguments\n var me = this\n if (sync)\n asap(function() {\n cb.apply(me, args)\n })\n else\n cb.apply(me, args)\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar fs = require('node:fs');\nvar crypto = require('node:crypto');\nvar node_events = require('node:events');\nvar cuid2 = require('@paralleldrive/cuid2');\nvar dezalgo = require('dezalgo');\nvar fsPromises = require('node:fs/promises');\nvar os = require('node:os');\nvar path = require('node:path');\nvar node_string_decoder = require('node:string_decoder');\nvar once = require('once');\nvar node_stream = require('node:stream');\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass PersistentFile extends node_events.EventEmitter {\n constructor({ filepath, newFilename, originalFilename, mimetype, hashAlgorithm }) {\n super();\n\n this.lastModifiedDate = null;\n Object.assign(this, { filepath, newFilename, originalFilename, mimetype, hashAlgorithm });\n\n this.size = 0;\n this._writeStream = null;\n\n if (typeof this.hashAlgorithm === 'string') {\n this.hash = crypto.createHash(this.hashAlgorithm);\n } else {\n this.hash = null;\n }\n }\n\n open() {\n this._writeStream = fs.createWriteStream(this.filepath);\n this._writeStream.on('error', (err) => {\n this.emit('error', err);\n });\n }\n\n toJSON() {\n const json = {\n size: this.size,\n filepath: this.filepath,\n newFilename: this.newFilename,\n mimetype: this.mimetype,\n mtime: this.lastModifiedDate,\n length: this.length,\n originalFilename: this.originalFilename,\n };\n if (this.hash && this.hash !== '') {\n json.hash = this.hash;\n }\n return json;\n }\n\n toString() {\n return `PersistentFile: ${this.newFilename}, Original: ${this.originalFilename}, Path: ${this.filepath}`;\n }\n\n write(buffer, cb) {\n if (this.hash) {\n this.hash.update(buffer);\n }\n\n if (this._writeStream.closed) {\n cb();\n return;\n }\n\n this._writeStream.write(buffer, () => {\n this.lastModifiedDate = new Date();\n this.size += buffer.length;\n this.emit('progress', this.size);\n cb();\n });\n }\n\n end(cb) {\n if (this.hash) {\n this.hash = this.hash.digest('hex');\n }\n this._writeStream.end(() => {\n this.emit('end');\n cb();\n });\n }\n\n destroy() {\n this._writeStream.destroy();\n const filepath = this.filepath; \n setTimeout(function () {\n fs.unlink(filepath, () => {});\n }, 1);\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass VolatileFile extends node_events.EventEmitter {\n constructor({ filepath, newFilename, originalFilename, mimetype, hashAlgorithm, createFileWriteStream }) {\n super();\n\n this.lastModifiedDate = null;\n Object.assign(this, { filepath, newFilename, originalFilename, mimetype, hashAlgorithm, createFileWriteStream });\n\n this.size = 0;\n this._writeStream = null;\n\n if (typeof this.hashAlgorithm === 'string') {\n this.hash = crypto.createHash(this.hashAlgorithm);\n } else {\n this.hash = null;\n }\n }\n\n open() {\n this._writeStream = this.createFileWriteStream(this);\n this._writeStream.on('error', (err) => {\n this.emit('error', err);\n });\n }\n\n destroy() {\n this._writeStream.destroy();\n }\n\n toJSON() {\n const json = {\n size: this.size,\n newFilename: this.newFilename,\n length: this.length,\n originalFilename: this.originalFilename,\n mimetype: this.mimetype,\n };\n if (this.hash && this.hash !== '') {\n json.hash = this.hash;\n }\n return json;\n }\n\n toString() {\n return `VolatileFile: ${this.originalFilename}`;\n }\n\n write(buffer, cb) {\n if (this.hash) {\n this.hash.update(buffer);\n }\n\n if (this._writeStream.closed || this._writeStream.destroyed) {\n cb();\n return;\n }\n\n this._writeStream.write(buffer, () => {\n this.size += buffer.length;\n this.emit('progress', this.size);\n cb();\n });\n }\n\n end(cb) {\n if (this.hash) {\n this.hash = this.hash.digest('hex');\n }\n this._writeStream.end(() => {\n this.emit('end');\n cb();\n });\n }\n}\n\nconst missingPlugin = 1000;\nconst pluginFunction = 1001;\nconst aborted = 1002;\nconst noParser = 1003;\nconst uninitializedParser = 1004;\nconst filenameNotString = 1005;\nconst maxFieldsSizeExceeded = 1006;\nconst maxFieldsExceeded = 1007;\nconst smallerThanMinFileSize = 1008;\nconst biggerThanTotalMaxFileSize = 1009;\nconst noEmptyFiles = 1010;\nconst missingContentType = 1011;\nconst malformedMultipart = 1012;\nconst missingMultipartBoundary = 1013;\nconst unknownTransferEncoding = 1014;\nconst maxFilesExceeded = 1015;\nconst biggerThanMaxFileSize = 1016;\nconst pluginFailed = 1017;\nconst cannotCreateDir = 1018;\n\nconst FormidableError = class extends Error {\n constructor(message, internalCode, httpCode = 500) {\n super(message);\n this.code = internalCode;\n this.httpCode = httpCode;\n }\n};\n\nvar FormidableError$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n aborted: aborted,\n biggerThanMaxFileSize: biggerThanMaxFileSize,\n biggerThanTotalMaxFileSize: biggerThanTotalMaxFileSize,\n cannotCreateDir: cannotCreateDir,\n default: FormidableError,\n filenameNotString: filenameNotString,\n malformedMultipart: malformedMultipart,\n maxFieldsExceeded: maxFieldsExceeded,\n maxFieldsSizeExceeded: maxFieldsSizeExceeded,\n maxFilesExceeded: maxFilesExceeded,\n missingContentType: missingContentType,\n missingMultipartBoundary: missingMultipartBoundary,\n missingPlugin: missingPlugin,\n noEmptyFiles: noEmptyFiles,\n noParser: noParser,\n pluginFailed: pluginFailed,\n pluginFunction: pluginFunction,\n smallerThanMinFileSize: smallerThanMinFileSize,\n uninitializedParser: uninitializedParser,\n unknownTransferEncoding: unknownTransferEncoding\n});\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass DummyParser extends node_stream.Transform {\n constructor(incomingForm, options = {}) {\n super();\n this.globalOptions = { ...options };\n this.incomingForm = incomingForm;\n }\n\n _flush(callback) {\n this.incomingForm.ended = true;\n this.incomingForm._maybeEnd();\n callback();\n }\n}\n\n/* eslint-disable no-fallthrough */\n/* eslint-disable no-bitwise */\n/* eslint-disable no-plusplus */\n/* eslint-disable no-underscore-dangle */\n\n\nlet s = 0;\nconst STATE = {\n PARSER_UNINITIALIZED: s++,\n START: s++,\n START_BOUNDARY: s++,\n HEADER_FIELD_START: s++,\n HEADER_FIELD: s++,\n HEADER_VALUE_START: s++,\n HEADER_VALUE: s++,\n HEADER_VALUE_ALMOST_DONE: s++,\n HEADERS_ALMOST_DONE: s++,\n PART_DATA_START: s++,\n PART_DATA: s++,\n PART_END: s++,\n END: s++,\n};\n\nlet f = 1;\nconst FBOUNDARY = { PART_BOUNDARY: f, LAST_BOUNDARY: (f *= 2) };\n\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\n\nfunction lower(c) {\n return c | 0x20;\n}\n\nconst STATES = {};\n\nObject.keys(STATE).forEach((stateName) => {\n STATES[stateName] = STATE[stateName];\n});\n\nclass MultipartParser extends node_stream.Transform {\n constructor(options = {}) {\n super({ readableObjectMode: true });\n this.boundary = null;\n this.boundaryChars = null;\n this.lookbehind = null;\n this.bufferLength = 0;\n this.state = STATE.PARSER_UNINITIALIZED;\n\n this.globalOptions = { ...options };\n this.index = null;\n this.flags = 0;\n }\n\n _endUnexpected() {\n return new FormidableError(\n `MultipartParser.end(): stream ended unexpectedly: ${this.explain()}`,\n malformedMultipart,\n 400,\n );\n }\n\n _flush(done) {\n if (\n (this.state === STATE.HEADER_FIELD_START && this.index === 0) ||\n (this.state === STATE.PART_DATA && this.index === this.boundary.length)\n ) {\n this._handleCallback('partEnd');\n this._handleCallback('end');\n done();\n } else if (this.state !== STATE.END) {\n done(this._endUnexpected());\n } else {\n done();\n }\n }\n\n initWithBoundary(str) {\n this.boundary = Buffer.from(`\\r\\n--${str}`);\n this.lookbehind = Buffer.alloc(this.boundary.length + 8);\n this.state = STATE.START;\n this.boundaryChars = {};\n\n for (let i = 0; i < this.boundary.length; i++) {\n this.boundaryChars[this.boundary[i]] = true;\n }\n }\n\n // eslint-disable-next-line max-params\n _handleCallback(name, buf, start, end) {\n if (start !== undefined && start === end) {\n return;\n }\n this.push({ name, buffer: buf, start, end });\n }\n\n // eslint-disable-next-line max-statements\n _transform(buffer, _, done) {\n let i = 0;\n let prevIndex = this.index;\n let { index, state, flags } = this;\n const { lookbehind, boundary, boundaryChars } = this;\n const boundaryLength = boundary.length;\n const boundaryEnd = boundaryLength - 1;\n this.bufferLength = buffer.length;\n let c = null;\n let cl = null;\n\n const setMark = (name, idx) => {\n this[`${name}Mark`] = typeof idx === 'number' ? idx : i;\n };\n\n const clearMarkSymbol = (name) => {\n delete this[`${name}Mark`];\n };\n\n const dataCallback = (name, shouldClear) => {\n const markSymbol = `${name}Mark`;\n if (!(markSymbol in this)) {\n return;\n }\n\n if (!shouldClear) {\n this._handleCallback(name, buffer, this[markSymbol], buffer.length);\n setMark(name, 0);\n } else {\n this._handleCallback(name, buffer, this[markSymbol], i);\n clearMarkSymbol(name);\n }\n };\n\n for (i = 0; i < this.bufferLength; i++) {\n c = buffer[i];\n switch (state) {\n case STATE.PARSER_UNINITIALIZED:\n done(this._endUnexpected());\n return;\n case STATE.START:\n index = 0;\n state = STATE.START_BOUNDARY;\n case STATE.START_BOUNDARY:\n if (index === boundary.length - 2) {\n if (c === HYPHEN) {\n flags |= FBOUNDARY.LAST_BOUNDARY;\n } else if (c !== CR) {\n done(this._endUnexpected());\n return;\n }\n index++;\n break;\n } else if (index - 1 === boundary.length - 2) {\n if (flags & FBOUNDARY.LAST_BOUNDARY && c === HYPHEN) {\n this._handleCallback('end');\n state = STATE.END;\n flags = 0;\n } else if (!(flags & FBOUNDARY.LAST_BOUNDARY) && c === LF) {\n index = 0;\n this._handleCallback('partBegin');\n state = STATE.HEADER_FIELD_START;\n } else {\n done(this._endUnexpected());\n return;\n }\n break;\n }\n\n if (c !== boundary[index + 2]) {\n index = -2;\n }\n if (c === boundary[index + 2]) {\n index++;\n }\n break;\n case STATE.HEADER_FIELD_START:\n state = STATE.HEADER_FIELD;\n setMark('headerField');\n index = 0;\n case STATE.HEADER_FIELD:\n if (c === CR) {\n clearMarkSymbol('headerField');\n state = STATE.HEADERS_ALMOST_DONE;\n break;\n }\n\n index++;\n if (c === HYPHEN) {\n break;\n }\n\n if (c === COLON) {\n if (index === 1) {\n // empty header field\n done(this._endUnexpected());\n return;\n }\n dataCallback('headerField', true);\n state = STATE.HEADER_VALUE_START;\n break;\n }\n\n cl = lower(c);\n if (cl < A || cl > Z) {\n done(this._endUnexpected());\n return;\n }\n break;\n case STATE.HEADER_VALUE_START:\n if (c === SPACE) {\n break;\n }\n\n setMark('headerValue');\n state = STATE.HEADER_VALUE;\n case STATE.HEADER_VALUE:\n if (c === CR) {\n dataCallback('headerValue', true);\n this._handleCallback('headerEnd');\n state = STATE.HEADER_VALUE_ALMOST_DONE;\n }\n break;\n case STATE.HEADER_VALUE_ALMOST_DONE:\n if (c !== LF) {\n done(this._endUnexpected());\nreturn;\n }\n state = STATE.HEADER_FIELD_START;\n break;\n case STATE.HEADERS_ALMOST_DONE:\n if (c !== LF) {\n done(this._endUnexpected());\n return;\n }\n\n this._handleCallback('headersEnd');\n state = STATE.PART_DATA_START;\n break;\n case STATE.PART_DATA_START:\n state = STATE.PART_DATA;\n setMark('partData');\n case STATE.PART_DATA:\n prevIndex = index;\n\n if (index === 0) {\n // boyer-moore derived algorithm to safely skip non-boundary data\n i += boundaryEnd;\n while (i < this.bufferLength && !(buffer[i] in boundaryChars)) {\n i += boundaryLength;\n }\n i -= boundaryEnd;\n c = buffer[i];\n }\n\n if (index < boundary.length) {\n if (boundary[index] === c) {\n if (index === 0) {\n dataCallback('partData', true);\n }\n index++;\n } else {\n index = 0;\n }\n } else if (index === boundary.length) {\n index++;\n if (c === CR) {\n // CR = part boundary\n flags |= FBOUNDARY.PART_BOUNDARY;\n } else if (c === HYPHEN) {\n // HYPHEN = end boundary\n flags |= FBOUNDARY.LAST_BOUNDARY;\n } else {\n index = 0;\n }\n } else if (index - 1 === boundary.length) {\n if (flags & FBOUNDARY.PART_BOUNDARY) {\n index = 0;\n if (c === LF) {\n // unset the PART_BOUNDARY flag\n flags &= ~FBOUNDARY.PART_BOUNDARY;\n this._handleCallback('partEnd');\n this._handleCallback('partBegin');\n state = STATE.HEADER_FIELD_START;\n break;\n }\n } else if (flags & FBOUNDARY.LAST_BOUNDARY) {\n if (c === HYPHEN) {\n this._handleCallback('partEnd');\n this._handleCallback('end');\n state = STATE.END;\n flags = 0;\n } else {\n index = 0;\n }\n } else {\n index = 0;\n }\n }\n\n if (index > 0) {\n // when matching a possible boundary, keep a lookbehind reference\n // in case it turns out to be a false lead\n lookbehind[index - 1] = c;\n } else if (prevIndex > 0) {\n // if our boundary turned out to be rubbish, the captured lookbehind\n // belongs to partData\n this._handleCallback('partData', lookbehind, 0, prevIndex);\n prevIndex = 0;\n setMark('partData');\n\n // reconsider the current character even so it interrupted the sequence\n // it could be the beginning of a new sequence\n i--;\n }\n\n break;\n case STATE.END:\n break;\n default:\n done(this._endUnexpected());\n return;\n }\n }\n\n dataCallback('headerField');\n dataCallback('headerValue');\n dataCallback('partData');\n\n this.index = index;\n this.state = state;\n this.flags = flags;\n\n done();\n return this.bufferLength;\n }\n\n explain() {\n return `state = ${MultipartParser.stateToString(this.state)}`;\n }\n}\n\n// eslint-disable-next-line consistent-return\nMultipartParser.stateToString = (stateNumber) => {\n // eslint-disable-next-line no-restricted-syntax, guard-for-in\n for (const stateName in STATE) {\n const number = STATE[stateName];\n if (number === stateNumber) return stateName;\n }\n};\n\nvar MultipartParser$1 = Object.assign(MultipartParser, { STATES });\n\nclass OctetStreamParser extends node_stream.PassThrough {\n constructor(options = {}) {\n super();\n this.globalOptions = { ...options };\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst octetStreamType = 'octet-stream';\n// the `options` is also available through the `options` / `formidable.options`\nasync function plugin$3(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n if (/octet-stream/i.test(self.headers['content-type'])) {\n await init$2.call(self, self, options);\n }\n return self;\n}\n\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nasync function init$2(_self, _opts) {\n this.type = octetStreamType;\n const originalFilename = this.headers['x-file-name'];\n const mimetype = this.headers['content-type'];\n\n const thisPart = {\n originalFilename,\n mimetype,\n };\n const newFilename = this._getNewName(thisPart);\n const filepath = this._joinDirectoryName(newFilename);\n const file = await this._newFile({\n newFilename,\n filepath,\n originalFilename,\n mimetype,\n });\n\n this.emit('fileBegin', originalFilename, file);\n file.open();\n this.openedFiles.push(file);\n this._flushing += 1;\n\n this._parser = new OctetStreamParser(this.options);\n\n // Keep track of writes that haven't finished so we don't emit the file before it's done being written\n let outstandingWrites = 0;\n\n this._parser.on('data', (buffer) => {\n this.pause();\n outstandingWrites += 1;\n\n file.write(buffer, () => {\n outstandingWrites -= 1;\n this.resume();\n\n if (this.ended) {\n this._parser.emit('doneWritingFile');\n }\n });\n });\n\n this._parser.on('end', () => {\n this._flushing -= 1;\n this.ended = true;\n\n const done = () => {\n file.end(() => {\n this.emit('file', 'file', file);\n this._maybeEnd();\n });\n };\n\n if (outstandingWrites === 0) {\n done();\n } else {\n this._parser.once('doneWritingFile', done);\n }\n });\n\n return this;\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\n// This is a buffering parser, have a look at StreamingQuerystring.js for a streaming parser\nclass QuerystringParser extends node_stream.Transform {\n constructor(options = {}) {\n super({ readableObjectMode: true });\n this.globalOptions = { ...options };\n this.buffer = '';\n this.bufferLength = 0;\n }\n\n _transform(buffer, encoding, callback) {\n this.buffer += buffer.toString('ascii');\n this.bufferLength = this.buffer.length;\n callback();\n }\n\n _flush(callback) {\n const fields = new URLSearchParams(this.buffer);\n for (const [key, value] of fields) {\n this.push({\n key,\n value,\n });\n }\n this.buffer = '';\n callback();\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst querystringType = 'urlencoded';\n// the `options` is also available through the `this.options` / `formidable.options`\nfunction plugin$2(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n if (/urlencoded/i.test(self.headers['content-type'])) {\n init$1.call(self, self, options);\n }\n return self;\n}\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nfunction init$1(_self, _opts) {\n this.type = querystringType;\n\n const parser = new QuerystringParser(this.options);\n\n parser.on('data', ({ key, value }) => {\n this.emit('field', key, value);\n });\n\n parser.once('end', () => {\n this.ended = true;\n this._maybeEnd();\n });\n\n this._parser = parser;\n\n return this;\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst multipartType = 'multipart';\n// the `options` is also available through the `options` / `formidable.options`\nfunction plugin$1(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n // NOTE: we (currently) support both multipart/form-data and multipart/related\n const multipart = /multipart/i.test(self.headers['content-type']);\n\n if (multipart) {\n const m = self.headers['content-type'].match(\n /boundary=(?:\"([^\"]+)\"|([^;]+))/i,\n );\n if (m) {\n const initMultipart = createInitMultipart(m[1] || m[2]);\n initMultipart.call(self, self, options); // lgtm [js/superfluous-trailing-arguments]\n } else {\n const err = new FormidableError(\n 'bad content-type header, no multipart boundary',\n missingMultipartBoundary,\n 400,\n );\n self._error(err);\n }\n }\n return self;\n}\n\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nfunction createInitMultipart(boundary) {\n return function initMultipart() {\n this.type = multipartType;\n\n const parser = new MultipartParser$1(this.options);\n let headerField;\n let headerValue;\n let part;\n\n parser.initWithBoundary(boundary);\n\n // eslint-disable-next-line max-statements, consistent-return\n parser.on('data', async ({ name, buffer, start, end }) => {\n if (name === 'partBegin') {\n part = new node_stream.Stream();\n part.readable = true;\n part.headers = {};\n part.name = null;\n part.originalFilename = null;\n part.mimetype = null;\n\n part.transferEncoding = this.options.encoding;\n part.transferBuffer = '';\n\n headerField = '';\n headerValue = '';\n } else if (name === 'headerField') {\n headerField += buffer.toString(this.options.encoding, start, end);\n } else if (name === 'headerValue') {\n headerValue += buffer.toString(this.options.encoding, start, end);\n } else if (name === 'headerEnd') {\n headerField = headerField.toLowerCase();\n part.headers[headerField] = headerValue;\n\n // matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n const m = headerValue.match(\n // eslint-disable-next-line no-useless-escape\n /\\bname=(\"([^\"]*)\"|([^\\(\\)<>@,;:\\\\\"\\/\\[\\]\\?=\\{\\}\\s\\t/]+))/i,\n );\n if (headerField === 'content-disposition') {\n if (m) {\n part.name = m[2] || m[3] || '';\n }\n\n part.originalFilename = this._getFileName(headerValue);\n } else if (headerField === 'content-type') {\n part.mimetype = headerValue;\n } else if (headerField === 'content-transfer-encoding') {\n part.transferEncoding = headerValue.toLowerCase();\n }\n\n headerField = '';\n headerValue = '';\n } else if (name === 'headersEnd') {\n switch (part.transferEncoding) {\n case 'binary':\n case '7bit':\n case '8bit':\n case 'utf-8': {\n const dataPropagation = (ctx) => {\n if (ctx.name === 'partData') {\n part.emit('data', ctx.buffer.slice(ctx.start, ctx.end));\n }\n };\n const dataStopPropagation = (ctx) => {\n if (ctx.name === 'partEnd') {\n part.emit('end');\n parser.off('data', dataPropagation);\n parser.off('data', dataStopPropagation);\n }\n };\n parser.on('data', dataPropagation);\n parser.on('data', dataStopPropagation);\n break;\n }\n case 'base64': {\n const dataPropagation = (ctx) => {\n if (ctx.name === 'partData') {\n part.transferBuffer += ctx.buffer\n .slice(ctx.start, ctx.end)\n .toString('ascii');\n\n /*\n four bytes (chars) in base64 converts to three bytes in binary\n encoding. So we should always work with a number of bytes that\n can be divided by 4, it will result in a number of bytes that\n can be divided vy 3.\n */\n const offset = parseInt(part.transferBuffer.length / 4, 10) * 4;\n part.emit(\n 'data',\n Buffer.from(\n part.transferBuffer.substring(0, offset),\n 'base64',\n ),\n );\n part.transferBuffer = part.transferBuffer.substring(offset);\n }\n };\n const dataStopPropagation = (ctx) => {\n if (ctx.name === 'partEnd') {\n part.emit('data', Buffer.from(part.transferBuffer, 'base64'));\n part.emit('end');\n parser.off('data', dataPropagation);\n parser.off('data', dataStopPropagation);\n }\n };\n parser.on('data', dataPropagation);\n parser.on('data', dataStopPropagation);\n break;\n }\n default:\n return this._error(\n new FormidableError(\n 'unknown transfer-encoding',\n unknownTransferEncoding,\n 501,\n ),\n );\n }\n this._parser.pause();\n await this.onPart(part);\n this._parser.resume();\n } else if (name === 'end') {\n this.ended = true;\n this._maybeEnd();\n }\n });\n\n this._parser = parser;\n };\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nclass JSONParser extends node_stream.Transform {\n constructor(options = {}) {\n super({ readableObjectMode: true });\n this.chunks = [];\n this.globalOptions = { ...options };\n }\n\n _transform(chunk, encoding, callback) {\n this.chunks.push(String(chunk)); // todo consider using a string decoder\n callback();\n }\n\n _flush(callback) {\n try {\n const fields = JSON.parse(this.chunks.join(''));\n this.push(fields);\n } catch (e) {\n callback(e);\n return;\n }\n this.chunks = null;\n callback();\n }\n}\n\n/* eslint-disable no-underscore-dangle */\n\n\nconst jsonType = 'json';\n// the `options` is also available through the `this.options` / `formidable.options`\nfunction plugin(formidable, options) {\n // the `this` context is always formidable, as the first argument of a plugin\n // but this allows us to customize/test each plugin\n\n /* istanbul ignore next */\n const self = this || formidable;\n\n if (/json/i.test(self.headers['content-type'])) {\n init.call(self, self, options);\n }\n\n return self;\n}\n// Note that it's a good practice (but it's up to you) to use the `this.options` instead\n// of the passed `options` (second) param, because when you decide\n// to test the plugin you can pass custom `this` context to it (and so `this.options`)\nfunction init(_self, _opts) {\n this.type = jsonType;\n\n const parser = new JSONParser(this.options);\n\n parser.on('data', (fields) => {\n this.fields = fields;\n });\n\n parser.once('end', () => {\n this.ended = true;\n this._maybeEnd();\n });\n\n this._parser = parser;\n}\n\n/* eslint-disable class-methods-use-this */\n/* eslint-disable no-underscore-dangle */\n\n\nconst CUID2_FINGERPRINT = `${process.env.NODE_ENV}-${os.platform()}-${os.hostname()}`;\nconst createId = cuid2.init({ length: 25, fingerprint: CUID2_FINGERPRINT.toLowerCase() });\n\nconst DEFAULT_OPTIONS = {\n maxFields: 1000,\n maxFieldsSize: 20 * 1024 * 1024,\n maxFiles: Infinity,\n maxFileSize: 200 * 1024 * 1024,\n maxTotalFileSize: undefined,\n minFileSize: 1,\n allowEmptyFiles: false,\n createDirsFromUploads: false,\n keepExtensions: false,\n encoding: 'utf-8',\n hashAlgorithm: false,\n uploadDir: os.tmpdir(),\n enabledPlugins: [plugin$3, plugin$2, plugin$1, plugin],\n fileWriteStreamHandler: null,\n defaultInvalidName: 'invalid-name',\n filter(_part) {\n return true;\n },\n filename: undefined,\n};\n\nfunction hasOwnProp(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\n\nconst decorateForceSequential = function (promiseCreator) {\n /* forces a function that returns a promise to be sequential\n useful for fs for example */\n let lastPromise = Promise.resolve();\n return async function (...x) {\n const promiseWeAreWaitingFor = lastPromise;\n let currentPromise;\n let callback;\n // we need to change lastPromise before await anything,\n // otherwise 2 calls might wait the same thing\n lastPromise = new Promise(function (resolve) {\n callback = resolve;\n });\n await promiseWeAreWaitingFor;\n currentPromise = promiseCreator(...x);\n currentPromise.then(callback).catch(callback);\n return currentPromise;\n };\n};\n\nconst createNecessaryDirectoriesAsync = decorateForceSequential(function (filePath) {\n const directoryname = path.dirname(filePath);\n return fsPromises.mkdir(directoryname, { recursive: true });\n});\n\nconst invalidExtensionChar = (c) => {\n const code = c.charCodeAt(0);\n return !(\n code === 46 || // .\n (code >= 48 && code <= 57) ||\n (code >= 65 && code <= 90) ||\n (code >= 97 && code <= 122)\n );\n};\n\nclass IncomingForm extends node_events.EventEmitter {\n constructor(options = {}) {\n super();\n\n this.options = { ...DEFAULT_OPTIONS, ...options };\n if (!this.options.maxTotalFileSize) {\n this.options.maxTotalFileSize = this.options.maxFileSize;\n }\n\n const dir = path.resolve(\n this.options.uploadDir || this.options.uploaddir || os.tmpdir(),\n );\n\n this.uploaddir = dir;\n this.uploadDir = dir;\n\n // initialize with null\n [\n 'error',\n 'headers',\n 'type',\n 'bytesExpected',\n 'bytesReceived',\n '_parser',\n 'req',\n ].forEach((key) => {\n this[key] = null;\n });\n\n this._setUpRename();\n\n this._flushing = 0;\n this._fieldsSize = 0;\n this._totalFileSize = 0;\n this._plugins = [];\n this.openedFiles = [];\n\n this.options.enabledPlugins = []\n .concat(this.options.enabledPlugins)\n .filter(Boolean);\n\n if (this.options.enabledPlugins.length === 0) {\n throw new FormidableError(\n 'expect at least 1 enabled builtin plugin, see options.enabledPlugins',\n missingPlugin,\n );\n }\n\n this.options.enabledPlugins.forEach((plugin) => {\n this.use(plugin);\n });\n\n this._setUpMaxFields();\n this._setUpMaxFiles();\n this.ended = undefined;\n this.type = undefined;\n }\n\n use(plugin) {\n if (typeof plugin !== 'function') {\n throw new FormidableError(\n '.use: expect `plugin` to be a function',\n pluginFunction,\n );\n }\n this._plugins.push(plugin.bind(this));\n return this;\n }\n\n pause () {\n try {\n this.req.pause();\n } catch (err) {\n // the stream was destroyed\n if (!this.ended) {\n // before it was completed, crash & burn\n this._error(err);\n }\n return false;\n }\n return true;\n }\n\n resume () {\n try {\n this.req.resume();\n } catch (err) {\n // the stream was destroyed\n if (!this.ended) {\n // before it was completed, crash & burn\n this._error(err);\n }\n return false;\n }\n\n return true;\n }\n\n // returns a promise if no callback is provided\n async parse(req, cb) {\n this.req = req;\n let promise;\n\n // Setup callback first, so we don't miss anything from data events emitted immediately.\n if (!cb) {\n let resolveRef;\n let rejectRef;\n promise = new Promise((resolve, reject) => {\n resolveRef = resolve;\n rejectRef = reject;\n });\n cb = (err, fields, files) => {\n if (err) {\n rejectRef(err);\n } else {\n resolveRef([fields, files]);\n }\n };\n }\n const callback = once(dezalgo(cb));\n this.fields = {};\n const files = {};\n\n this.on('field', (name, value) => {\n if (this.type === 'multipart' || this.type === 'urlencoded') {\n if (!hasOwnProp(this.fields, name)) {\n this.fields[name] = [value];\n } else {\n this.fields[name].push(value);\n }\n } else {\n this.fields[name] = value;\n }\n });\n this.on('file', (name, file) => {\n if (!hasOwnProp(files, name)) {\n files[name] = [file];\n } else {\n files[name].push(file);\n }\n });\n this.on('error', (err) => {\n callback(err, this.fields, files);\n });\n this.on('end', () => {\n callback(null, this.fields, files);\n });\n\n // Parse headers and setup the parser, ready to start listening for data.\n await this.writeHeaders(req.headers);\n\n // Start listening for data.\n req\n .on('error', (err) => {\n this._error(err);\n })\n .on('aborted', () => {\n this.emit('aborted');\n this._error(new FormidableError('Request aborted', aborted));\n })\n .on('data', (buffer) => {\n try {\n this.write(buffer);\n } catch (err) {\n this._error(err);\n }\n })\n .on('end', () => {\n if (this.error) {\n return;\n }\n if (this._parser) {\n this._parser.end();\n }\n });\n if (promise) {\n return promise;\n }\n return this;\n }\n\n async writeHeaders(headers) {\n this.headers = headers;\n this._parseContentLength();\n await this._parseContentType();\n\n if (!this._parser) {\n this._error(\n new FormidableError(\n 'no parser found',\n noParser,\n 415, // Unsupported Media Type\n ),\n );\n return;\n }\n\n this._parser.once('error', (error) => {\n this._error(error);\n });\n }\n\n write(buffer) {\n if (this.error) {\n return null;\n }\n if (!this._parser) {\n this._error(\n new FormidableError('uninitialized parser', uninitializedParser),\n );\n return null;\n }\n\n this.bytesReceived += buffer.length;\n this.emit('progress', this.bytesReceived, this.bytesExpected);\n\n this._parser.write(buffer);\n\n return this.bytesReceived;\n }\n\n onPart(part) {\n // this method can be overwritten by the user\n return this._handlePart(part);\n }\n\n async _handlePart(part) {\n if (part.originalFilename && typeof part.originalFilename !== 'string') {\n this._error(\n new FormidableError(\n `the part.originalFilename should be string when it exists`,\n filenameNotString,\n ),\n );\n return;\n }\n\n // This MUST check exactly for undefined. You can not change it to !part.originalFilename.\n\n // todo: uncomment when switch tests to Jest\n // console.log(part);\n\n // ? NOTE(@tunnckocore): no it can be any falsey value, it most probably depends on what's returned\n // from somewhere else. Where recently I changed the return statements\n // and such thing because code style\n // ? NOTE(@tunnckocore): or even better, if there is no mimetype, then it's for sure a field\n // ? NOTE(@tunnckocore): originalFilename is an empty string when a field?\n if (!part.mimetype) {\n let value = '';\n const decoder = new node_string_decoder.StringDecoder(\n part.transferEncoding || this.options.encoding,\n );\n\n part.on('data', (buffer) => {\n this._fieldsSize += buffer.length;\n if (this._fieldsSize > this.options.maxFieldsSize) {\n this._error(\n new FormidableError(\n `options.maxFieldsSize (${this.options.maxFieldsSize} bytes) exceeded, received ${this._fieldsSize} bytes of field data`,\n maxFieldsSizeExceeded,\n 413, // Payload Too Large\n ),\n );\n return;\n }\n value += decoder.write(buffer);\n });\n\n part.on('end', () => {\n this.emit('field', part.name, value);\n });\n return;\n }\n\n if (!this.options.filter(part)) {\n return;\n }\n\n this._flushing += 1;\n\n let fileSize = 0;\n const newFilename = this._getNewName(part);\n const filepath = this._joinDirectoryName(newFilename);\n const file = await this._newFile({\n newFilename,\n filepath,\n originalFilename: part.originalFilename,\n mimetype: part.mimetype,\n });\n file.on('error', (err) => {\n this._error(err);\n });\n this.emit('fileBegin', part.name, file);\n\n file.open();\n this.openedFiles.push(file);\n\n part.on('data', (buffer) => {\n this._totalFileSize += buffer.length;\n fileSize += buffer.length;\n\n if (this._totalFileSize > this.options.maxTotalFileSize) {\n this._error(\n new FormidableError(\n `options.maxTotalFileSize (${this.options.maxTotalFileSize} bytes) exceeded, received ${this._totalFileSize} bytes of file data`,\n biggerThanTotalMaxFileSize,\n 413,\n ),\n );\n return;\n }\n if (buffer.length === 0) {\n return;\n }\n this.pause();\n file.write(buffer, () => {\n this.resume();\n });\n });\n\n part.on('end', () => {\n if (!this.options.allowEmptyFiles && fileSize === 0) {\n this._error(\n new FormidableError(\n `options.allowEmptyFiles is false, file size should be greater than 0`,\n noEmptyFiles,\n 400,\n ),\n );\n return;\n }\n if (fileSize < this.options.minFileSize) {\n this._error(\n new FormidableError(\n `options.minFileSize (${this.options.minFileSize} bytes) inferior, received ${fileSize} bytes of file data`,\n smallerThanMinFileSize,\n 400,\n ),\n );\n return;\n }\n if (fileSize > this.options.maxFileSize) {\n this._error(\n new FormidableError(\n `options.maxFileSize (${this.options.maxFileSize} bytes), received ${fileSize} bytes of file data`,\n biggerThanMaxFileSize,\n 413,\n ),\n );\n return;\n }\n\n file.end(() => {\n this._flushing -= 1;\n this.emit('file', part.name, file);\n this._maybeEnd();\n });\n });\n }\n\n // eslint-disable-next-line max-statements\n async _parseContentType() {\n if (this.bytesExpected === 0) {\n this._parser = new DummyParser(this, this.options);\n return;\n }\n\n if (!this.headers['content-type']) {\n this._error(\n new FormidableError(\n 'bad content-type header, no content-type',\n missingContentType,\n 400,\n ),\n );\n return;\n }\n\n\n new DummyParser(this, this.options);\n\n const results = [];\n await Promise.all(this._plugins.map(async (plugin, idx) => {\n let pluginReturn = null;\n try {\n pluginReturn = await plugin(this, this.options) || this;\n } catch (err) {\n // directly throw from the `form.parse` method;\n // there is no other better way, except a handle through options\n const error = new FormidableError(\n `plugin on index ${idx} failed with: ${err.message}`,\n pluginFailed,\n 500,\n );\n error.idx = idx;\n throw error;\n }\n Object.assign(this, pluginReturn);\n\n // todo: use Set/Map and pass plugin name instead of the `idx` index\n this.emit('plugin', idx, pluginReturn);\n }));\n this.emit('pluginsResults', results);\n }\n\n _error(err, eventName = 'error') {\n if (this.error || this.ended) {\n return;\n }\n\n this.req = null;\n this.error = err;\n this.emit(eventName, err);\n\n this.openedFiles.forEach((file) => {\n file.destroy();\n });\n }\n\n _parseContentLength() {\n this.bytesReceived = 0;\n if (this.headers['content-length']) {\n this.bytesExpected = parseInt(this.headers['content-length'], 10);\n } else if (this.headers['transfer-encoding'] === undefined) {\n this.bytesExpected = 0;\n }\n\n if (this.bytesExpected !== null) {\n this.emit('progress', this.bytesReceived, this.bytesExpected);\n }\n }\n\n _newParser() {\n return new MultipartParser$1(this.options);\n }\n\n async _newFile({ filepath, originalFilename, mimetype, newFilename }) {\n if (this.options.fileWriteStreamHandler) {\n return new VolatileFile({\n newFilename,\n filepath,\n originalFilename,\n mimetype,\n createFileWriteStream: this.options.fileWriteStreamHandler,\n hashAlgorithm: this.options.hashAlgorithm,\n });\n }\n if (this.options.createDirsFromUploads) {\n try {\n await createNecessaryDirectoriesAsync(filepath);\n } catch (errorCreatingDir) {\n this._error(new FormidableError(\n `cannot create directory`,\n cannotCreateDir,\n 409,\n ));\n }\n }\n return new PersistentFile({\n newFilename,\n filepath,\n originalFilename,\n mimetype,\n hashAlgorithm: this.options.hashAlgorithm,\n });\n }\n\n _getFileName(headerValue) {\n // matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n const m = headerValue.match(\n /\\bfilename=(\"(.*?)\"|([^()<>{}[\\]@,;:\"?=\\s/\\t]+))($|;\\s)/i,\n );\n if (!m) return null;\n\n const match = m[2] || m[3] || '';\n let originalFilename = match.substr(match.lastIndexOf('\\\\') + 1);\n originalFilename = originalFilename.replace(/%22/g, '\"');\n originalFilename = originalFilename.replace(/&#([\\d]{4});/g, (_, code) =>\n String.fromCharCode(code),\n );\n\n return originalFilename;\n }\n\n // able to get composed extension with multiple dots\n // \"a.b.c\" -> \".b.c\"\n // as opposed to path.extname -> \".c\"\n _getExtension(str) {\n if (!str) {\n return '';\n }\n\n const basename = path.basename(str);\n const firstDot = basename.indexOf('.');\n const lastDot = basename.lastIndexOf('.');\n let rawExtname = path.extname(basename);\n\n if (firstDot !== lastDot) {\n rawExtname = basename.slice(firstDot);\n }\n\n let filtered;\n const firstInvalidIndex = Array.from(rawExtname).findIndex(invalidExtensionChar);\n if (firstInvalidIndex === -1) {\n filtered = rawExtname;\n } else {\n filtered = rawExtname.substring(0, firstInvalidIndex);\n }\n if (filtered === '.') {\n return '';\n }\n return filtered;\n }\n\n _joinDirectoryName(name) {\n const newPath = path.join(this.uploadDir, name);\n\n // prevent directory traversal attacks\n if (!newPath.startsWith(this.uploadDir)) {\n return path.join(this.uploadDir, this.options.defaultInvalidName);\n }\n\n return newPath;\n }\n\n _setUpRename() {\n const hasRename = typeof this.options.filename === 'function';\n if (hasRename) {\n this._getNewName = (part) => {\n let ext = '';\n let name = this.options.defaultInvalidName;\n if (part.originalFilename) {\n // can be null\n ({ ext, name } = path.parse(part.originalFilename));\n if (this.options.keepExtensions !== true) {\n ext = '';\n }\n }\n return this.options.filename.call(this, name, ext, part, this);\n };\n } else {\n this._getNewName = (part) => {\n const name = createId();\n\n if (part && this.options.keepExtensions) {\n const originalFilename =\n typeof part === 'string' ? part : part.originalFilename;\n return `${name}${this._getExtension(originalFilename)}`;\n }\n\n return name;\n };\n }\n }\n\n _setUpMaxFields() {\n if (this.options.maxFields !== Infinity) {\n let fieldsCount = 0;\n this.on('field', () => {\n fieldsCount += 1;\n if (fieldsCount > this.options.maxFields) {\n this._error(\n new FormidableError(\n `options.maxFields (${this.options.maxFields}) exceeded`,\n maxFieldsExceeded,\n 413,\n ),\n );\n }\n });\n }\n }\n\n _setUpMaxFiles() {\n if (this.options.maxFiles !== Infinity) {\n let fileCount = 0;\n this.on('fileBegin', () => {\n fileCount += 1;\n if (fileCount > this.options.maxFiles) {\n this._error(\n new FormidableError(\n `options.maxFiles (${this.options.maxFiles}) exceeded`,\n maxFilesExceeded,\n 413,\n ),\n );\n }\n });\n }\n }\n\n _maybeEnd() {\n if (!this.ended || this._flushing || this.error) {\n return;\n }\n this.req = null;\n this.emit('end');\n }\n}\n\n// make it available without requiring the `new` keyword\n// if you want it access `const formidable.IncomingForm` as v1\nconst formidable = (...args) => new IncomingForm(...args);\nconst {enabledPlugins} = DEFAULT_OPTIONS;\n\nexports.DummyParser = DummyParser;\nexports.File = PersistentFile;\nexports.Formidable = IncomingForm;\nexports.IncomingForm = IncomingForm;\nexports.JSONParser = JSONParser;\nexports.MultipartParser = MultipartParser$1;\nexports.OctetStreamParser = OctetStreamParser;\nexports.OctetstreamParser = OctetStreamParser;\nexports.PersistentFile = PersistentFile;\nexports.QueryStringParser = QuerystringParser;\nexports.QuerystringParser = QuerystringParser;\nexports.VolatileFile = VolatileFile;\nexports.default = formidable;\nexports.defaultOptions = DEFAULT_OPTIONS;\nexports.enabledPlugins = enabledPlugins;\nexports.errors = FormidableError$1;\nexports.formidable = formidable;\nexports.json = plugin;\nexports.multipart = plugin$1;\nexports.octetstream = plugin$3;\nexports.querystring = plugin$2;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet flagForceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tflagForceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m') ||\n\t\t\thasFlag('color=full') ||\n\t\t\thasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream, options = {}) {\n\tconst level = supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options\n\t});\n\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel({isTTY: tty.isatty(1)}),\n\tstderr: getSupportLevel({isTTY: tty.isatty(2)})\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/* jshint node: true */\n(function () {\n \"use strict\";\n\n function CookieAccessInfo(domain, path, secure, script) {\n if (this instanceof CookieAccessInfo) {\n this.domain = domain || undefined;\n this.path = path || \"/\";\n this.secure = !!secure;\n this.script = !!script;\n return this;\n }\n return new CookieAccessInfo(domain, path, secure, script);\n }\n CookieAccessInfo.All = Object.freeze(Object.create(null));\n exports.CookieAccessInfo = CookieAccessInfo;\n\n function Cookie(cookiestr, request_domain, request_path) {\n if (cookiestr instanceof Cookie) {\n return cookiestr;\n }\n if (this instanceof Cookie) {\n this.name = null;\n this.value = null;\n this.expiration_date = Infinity;\n this.path = String(request_path || \"/\");\n this.explicit_path = false;\n this.domain = request_domain || null;\n this.explicit_domain = false;\n this.secure = false; //how to define default?\n this.noscript = false; //httponly\n if (cookiestr) {\n this.parse(cookiestr, request_domain, request_path);\n }\n return this;\n }\n return new Cookie(cookiestr, request_domain, request_path);\n }\n exports.Cookie = Cookie;\n\n Cookie.prototype.toString = function toString() {\n var str = [this.name + \"=\" + this.value];\n if (this.expiration_date !== Infinity) {\n str.push(\"expires=\" + (new Date(this.expiration_date)).toGMTString());\n }\n if (this.domain) {\n str.push(\"domain=\" + this.domain);\n }\n if (this.path) {\n str.push(\"path=\" + this.path);\n }\n if (this.secure) {\n str.push(\"secure\");\n }\n if (this.noscript) {\n str.push(\"httponly\");\n }\n return str.join(\"; \");\n };\n\n Cookie.prototype.toValueString = function toValueString() {\n return this.name + \"=\" + this.value;\n };\n\n var cookie_str_splitter = /[:](?=\\s*[a-zA-Z0-9_\\-]+\\s*[=])/g;\n Cookie.prototype.parse = function parse(str, request_domain, request_path) {\n if (this instanceof Cookie) {\n if ( str.length > 32768 ) {\n console.warn(\"Cookie too long for parsing (>32768 characters)\");\n return;\n }\n \n var parts = str.split(\";\").filter(function (value) {\n return !!value;\n });\n var i;\n\n var pair = parts[0].match(/([^=]+)=([\\s\\S]*)/);\n if (!pair) {\n console.warn(\"Invalid cookie header encountered. Header: '\"+str+\"'\");\n return;\n }\n\n var key = pair[1];\n var value = pair[2];\n if ( typeof key !== 'string' || key.length === 0 || typeof value !== 'string' ) {\n console.warn(\"Unable to extract values from cookie header. Cookie: '\"+str+\"'\");\n return;\n }\n\n this.name = key;\n this.value = value;\n\n for (i = 1; i < parts.length; i += 1) {\n pair = parts[i].match(/([^=]+)(?:=([\\s\\S]*))?/);\n key = pair[1].trim().toLowerCase();\n value = pair[2];\n switch (key) {\n case \"httponly\":\n this.noscript = true;\n break;\n case \"expires\":\n this.expiration_date = value ?\n Number(Date.parse(value)) :\n Infinity;\n break;\n case \"path\":\n this.path = value ?\n value.trim() :\n \"\";\n this.explicit_path = true;\n break;\n case \"domain\":\n this.domain = value ?\n value.trim() :\n \"\";\n this.explicit_domain = !!this.domain;\n break;\n case \"secure\":\n this.secure = true;\n break;\n }\n }\n\n if (!this.explicit_path) {\n this.path = request_path || \"/\";\n }\n if (!this.explicit_domain) {\n this.domain = request_domain;\n }\n\n return this;\n }\n return new Cookie().parse(str, request_domain, request_path);\n };\n\n Cookie.prototype.matches = function matches(access_info) {\n if (access_info === CookieAccessInfo.All) {\n return true;\n }\n if (this.noscript && access_info.script ||\n this.secure && !access_info.secure ||\n !this.collidesWith(access_info)) {\n return false;\n }\n return true;\n };\n\n Cookie.prototype.collidesWith = function collidesWith(access_info) {\n if ((this.path && !access_info.path) || (this.domain && !access_info.domain)) {\n return false;\n }\n if (this.path && access_info.path.indexOf(this.path) !== 0) {\n return false;\n }\n if (this.explicit_path && access_info.path.indexOf( this.path ) !== 0) {\n return false;\n }\n var access_domain = access_info.domain && access_info.domain.replace(/^[\\.]/,'');\n var cookie_domain = this.domain && this.domain.replace(/^[\\.]/,'');\n if (cookie_domain === access_domain) {\n return true;\n }\n if (cookie_domain) {\n if (!this.explicit_domain) {\n return false; // we already checked if the domains were exactly the same\n }\n var wildcard = access_domain.indexOf(cookie_domain);\n if (wildcard === -1 || wildcard !== access_domain.length - cookie_domain.length) {\n return false;\n }\n return true;\n }\n return true;\n };\n\n function CookieJar() {\n var cookies, cookies_list, collidable_cookie;\n if (this instanceof CookieJar) {\n cookies = Object.create(null); //name: [Cookie]\n\n this.setCookie = function setCookie(cookie, request_domain, request_path) {\n var remove, i;\n cookie = new Cookie(cookie, request_domain, request_path);\n //Delete the cookie if the set is past the current time\n remove = cookie.expiration_date <= Date.now();\n if (cookies[cookie.name] !== undefined) {\n cookies_list = cookies[cookie.name];\n for (i = 0; i < cookies_list.length; i += 1) {\n collidable_cookie = cookies_list[i];\n if (collidable_cookie.collidesWith(cookie)) {\n if (remove) {\n cookies_list.splice(i, 1);\n if (cookies_list.length === 0) {\n delete cookies[cookie.name];\n }\n return false;\n }\n cookies_list[i] = cookie;\n return cookie;\n }\n }\n if (remove) {\n return false;\n }\n cookies_list.push(cookie);\n return cookie;\n }\n if (remove) {\n return false;\n }\n cookies[cookie.name] = [cookie];\n return cookies[cookie.name];\n };\n //returns a cookie\n this.getCookie = function getCookie(cookie_name, access_info) {\n var cookie, i;\n cookies_list = cookies[cookie_name];\n if (!cookies_list) {\n return;\n }\n for (i = 0; i < cookies_list.length; i += 1) {\n cookie = cookies_list[i];\n if (cookie.expiration_date <= Date.now()) {\n if (cookies_list.length === 0) {\n delete cookies[cookie.name];\n }\n continue;\n }\n\n if (cookie.matches(access_info)) {\n return cookie;\n }\n }\n };\n //returns a list of cookies\n this.getCookies = function getCookies(access_info) {\n var matches = [], cookie_name, cookie;\n for (cookie_name in cookies) {\n cookie = this.getCookie(cookie_name, access_info);\n if (cookie) {\n matches.push(cookie);\n }\n }\n matches.toString = function toString() {\n return matches.join(\":\");\n };\n matches.toValueString = function toValueString() {\n return matches.map(function (c) {\n return c.toValueString();\n }).join('; ');\n };\n return matches;\n };\n\n return this;\n }\n return new CookieJar();\n }\n exports.CookieJar = CookieJar;\n\n //returns list of cookies that were set correctly. Cookies that are expired and removed are not returned.\n CookieJar.prototype.setCookies = function setCookies(cookies, request_domain, request_path) {\n cookies = Array.isArray(cookies) ?\n cookies :\n cookies.split(cookie_str_splitter);\n var successful = [],\n i,\n cookie;\n cookies = cookies.map(function(item){\n return new Cookie(item, request_domain, request_path);\n });\n for (i = 0; i < cookies.length; i += 1) {\n cookie = cookies[i];\n if (this.setCookie(cookie, request_domain, request_path)) {\n successful.push(cookie);\n }\n }\n return successful;\n };\n}());\n","module.exports = stringify\nstringify.default = stringify\nstringify.stable = deterministicStringify\nstringify.stableStringify = deterministicStringify\n\nvar LIMIT_REPLACE_NODE = '[...]'\nvar CIRCULAR_REPLACE_NODE = '[Circular]'\n\nvar arr = []\nvar replacerStack = []\n\nfunction defaultOptions () {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n }\n}\n\n// Regular stringify\nfunction stringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n decirc(obj, '', 0, [], undefined, 0, options)\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer)\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction setReplace (replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k)\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace })\n arr.push([parent, k, val, propertyDescriptor])\n } else {\n replacerStack.push([val, k, replace])\n }\n } else {\n parent[k] = replace\n arr.push([parent, k, val])\n }\n}\n\nfunction decirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n var keys = Object.keys(val)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n decirc(val[key], key, i, stack, val, depth, options)\n }\n }\n stack.pop()\n }\n}\n\n// Stable-stringify\nfunction compareFunction (a, b) {\n if (a < b) {\n return -1\n }\n if (a > b) {\n return 1\n }\n return 0\n}\n\nfunction deterministicStringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer)\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return\n }\n } catch (_) {\n return\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {}\n var keys = Object.keys(val).sort(compareFunction)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n deterministicDecirc(val[key], key, i, stack, val, depth, options)\n tmp[key] = val[key]\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val])\n parent[k] = tmp\n } else {\n return tmp\n }\n }\n stack.pop()\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues (replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v\n }\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i]\n if (part[1] === key && part[0] === val) {\n val = part[2]\n replacerStack.splice(i, 1)\n break\n }\n }\n }\n return replacer.call(this, key, val)\n }\n}\n","\"use strict\";\n\n/**\n * Return the mime type for the given `str`.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nexports.type = string_ => string_.split(/ *; */).shift();\n\n/**\n * Return header field parameters.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nexports.params = value => {\n const object = {};\n for (const string_ of value.split(/ *; */)) {\n const parts = string_.split(/ *= */);\n const key = parts.shift();\n const value = parts.shift();\n if (key && value) object[key] = value;\n }\n return object;\n};\n\n/**\n * Parse Link header fields.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nexports.parseLinks = value => {\n const object = {};\n for (const string_ of value.split(/ *, */)) {\n const parts = string_.split(/ *; */);\n const url = parts[0].slice(1, -1);\n const rel = parts[1].split(/ *= */)[1].slice(1, -1);\n object[rel] = url;\n }\n return object;\n};\n\n/**\n * Strip content related fields from `header`.\n *\n * @param {Object} header\n * @return {Object} header\n * @api private\n */\n\nexports.cleanHeader = (header, changesOrigin) => {\n delete header['content-type'];\n delete header['content-length'];\n delete header['transfer-encoding'];\n delete header.host;\n // secuirty\n if (changesOrigin) {\n delete header.authorization;\n delete header.cookie;\n }\n return header;\n};\nexports.normalizeHostname = hostname => {\n const [, normalized] = hostname.match(/^\\[([^\\]]+)\\]$/) || [];\n return normalized || hostname;\n};\n\n/**\n * Check if `obj` is an object.\n *\n * @param {Object} object\n * @return {Boolean}\n * @api private\n */\nexports.isObject = object => {\n return object !== null && typeof object === 'object';\n};\n\n/**\n * Object.hasOwn fallback/polyfill.\n *\n * @type {(object: object, property: string) => boolean} object\n * @api private\n */\nexports.hasOwn = Object.hasOwn || function (object, property) {\n if (object == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n return Object.prototype.hasOwnProperty.call(new Object(object), property);\n};\nexports.mixin = (target, source) => {\n for (const key in source) {\n if (exports.hasOwn(source, key)) {\n target[key] = source[key];\n }\n }\n};\n\n/**\n * Check if the response is compressed using Gzip or Deflate.\n * @param {Object} res\n * @return {Boolean}\n */\n\nexports.isGzipOrDeflateEncoding = res => {\n return new RegExp(/^\\s*(?:deflate|gzip)\\s*$/).test(res.headers['content-encoding']);\n};\n\n/**\n * Check if the response is compressed using Brotli.\n * @param {Object} res\n * @return {Boolean}\n */\n\nexports.isBrotliEncoding = res => {\n return new RegExp(/^\\s*(?:br)\\s*$/).test(res.headers['content-encoding']);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwidHlwZSIsInN0cmluZ18iLCJzcGxpdCIsInNoaWZ0IiwicGFyYW1zIiwidmFsdWUiLCJvYmplY3QiLCJwYXJ0cyIsImtleSIsInBhcnNlTGlua3MiLCJ1cmwiLCJzbGljZSIsInJlbCIsImNsZWFuSGVhZGVyIiwiaGVhZGVyIiwiY2hhbmdlc09yaWdpbiIsImhvc3QiLCJhdXRob3JpemF0aW9uIiwiY29va2llIiwibm9ybWFsaXplSG9zdG5hbWUiLCJob3N0bmFtZSIsIm5vcm1hbGl6ZWQiLCJtYXRjaCIsImlzT2JqZWN0IiwiaGFzT3duIiwiT2JqZWN0IiwicHJvcGVydHkiLCJUeXBlRXJyb3IiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtaXhpbiIsInRhcmdldCIsInNvdXJjZSIsImlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nIiwicmVzIiwiUmVnRXhwIiwidGVzdCIsImhlYWRlcnMiLCJpc0Jyb3RsaUVuY29kaW5nIl0sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBSZXR1cm4gdGhlIG1pbWUgdHlwZSBmb3IgdGhlIGdpdmVuIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMudHlwZSA9IChzdHJpbmdfKSA9PiBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pLnNoaWZ0KCk7XG5cbi8qKlxuICogUmV0dXJuIGhlYWRlciBmaWVsZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyYW1zID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0cmluZ18gb2YgdmFsdWUuc3BsaXQoLyAqOyAqLykpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ18uc3BsaXQoLyAqPSAqLyk7XG4gICAgY29uc3Qga2V5ID0gcGFydHMuc2hpZnQoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoa2V5ICYmIHZhbHVlKSBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbi8qKlxuICogUGFyc2UgTGluayBoZWFkZXIgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyc2VMaW5rcyA9ICh2YWx1ZSkgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7fTtcbiAgZm9yIChjb25zdCBzdHJpbmdfIG9mIHZhbHVlLnNwbGl0KC8gKiwgKi8pKSB7XG4gICAgY29uc3QgcGFydHMgPSBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pO1xuICAgIGNvbnN0IHVybCA9IHBhcnRzWzBdLnNsaWNlKDEsIC0xKTtcbiAgICBjb25zdCByZWwgPSBwYXJ0c1sxXS5zcGxpdCgvICo9ICovKVsxXS5zbGljZSgxLCAtMSk7XG4gICAgb2JqZWN0W3JlbF0gPSB1cmw7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBTdHJpcCBjb250ZW50IHJlbGF0ZWQgZmllbGRzIGZyb20gYGhlYWRlcmAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fSBoZWFkZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY2xlYW5IZWFkZXIgPSAoaGVhZGVyLCBjaGFuZ2VzT3JpZ2luKSA9PiB7XG4gIGRlbGV0ZSBoZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICBkZWxldGUgaGVhZGVyWydjb250ZW50LWxlbmd0aCddO1xuICBkZWxldGUgaGVhZGVyWyd0cmFuc2Zlci1lbmNvZGluZyddO1xuICBkZWxldGUgaGVhZGVyLmhvc3Q7XG4gIC8vIHNlY3VpcnR5XG4gIGlmIChjaGFuZ2VzT3JpZ2luKSB7XG4gICAgZGVsZXRlIGhlYWRlci5hdXRob3JpemF0aW9uO1xuICAgIGRlbGV0ZSBoZWFkZXIuY29va2llO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcjtcbn07XG5cbmV4cG9ydHMubm9ybWFsaXplSG9zdG5hbWUgPSAoaG9zdG5hbWUpID0+IHtcbiAgY29uc3QgWyxub3JtYWxpemVkXSA9IGhvc3RuYW1lLm1hdGNoKC9eXFxbKFteXFxdXSspXFxdJC8pIHx8IFtdO1xuICByZXR1cm4gbm9ybWFsaXplZCB8fCBob3N0bmFtZTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZXhwb3J0cy5pc09iamVjdCA9IChvYmplY3QpID0+IHtcbiAgcmV0dXJuIG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jztcbn07XG5cbi8qKlxuICogT2JqZWN0Lmhhc093biBmYWxsYmFjay9wb2x5ZmlsbC5cbiAqXG4gKiBAdHlwZSB7KG9iamVjdDogb2JqZWN0LCBwcm9wZXJ0eTogc3RyaW5nKSA9PiBib29sZWFufSBvYmplY3RcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnRzLmhhc093biA9XG4gIE9iamVjdC5oYXNPd24gfHxcbiAgZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3IE9iamVjdChvYmplY3QpLCBwcm9wZXJ0eSk7XG4gIH07XG5cbmV4cG9ydHMubWl4aW4gPSAodGFyZ2V0LCBzb3VyY2UpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGV4cG9ydHMuaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGlzIGNvbXByZXNzZWQgdXNpbmcgR3ppcCBvciBEZWZsYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IHJlc1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuXG5leHBvcnRzLmlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nID0gKHJlcykgPT4ge1xuICByZXR1cm4gbmV3IFJlZ0V4cCgvXlxccyooPzpkZWZsYXRlfGd6aXApXFxzKiQvKS50ZXN0KHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaXMgY29tcHJlc3NlZCB1c2luZyBCcm90bGkuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmV4cG9ydHMuaXNCcm90bGlFbmNvZGluZyA9IChyZXMpID0+IHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoL15cXHMqKD86YnIpXFxzKiQvKS50ZXN0KHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUEsT0FBTyxDQUFDQyxJQUFJLEdBQUlDLE9BQU8sSUFBS0EsT0FBTyxDQUFDQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUosT0FBTyxDQUFDSyxNQUFNLEdBQUlDLEtBQUssSUFBSztF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","\"use strict\";\n\n/**\n * Module of mixed-in functions shared between node and client code\n */\nconst {\n isObject,\n hasOwn\n} = require('./utils');\n\n/**\n * Expose `RequestBase`.\n */\n\nmodule.exports = RequestBase;\n\n/**\n * Initialize a new `RequestBase`.\n *\n * @api public\n */\n\nfunction RequestBase() {}\n\n/**\n * Clear previous timeout.\n *\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.clearTimeout = function () {\n clearTimeout(this._timer);\n clearTimeout(this._responseTimeoutTimer);\n clearTimeout(this._uploadTimeoutTimer);\n delete this._timer;\n delete this._responseTimeoutTimer;\n delete this._uploadTimeoutTimer;\n return this;\n};\n\n/**\n * Override default response body parser\n *\n * This function will be called to convert incoming data into request.body\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.parse = function (fn) {\n this._parser = fn;\n return this;\n};\n\n/**\n * Set format of binary response body.\n * In browser valid formats are 'blob' and 'arraybuffer',\n * which return Blob and ArrayBuffer, respectively.\n *\n * In Node all values result in Buffer.\n *\n * Examples:\n *\n * req.get('/')\n * .responseType('blob')\n * .end(callback);\n *\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.responseType = function (value) {\n this._responseType = value;\n return this;\n};\n\n/**\n * Override default request body serializer\n *\n * This function will be called to convert data set via .send or .attach into payload to send\n *\n * @param {Function}\n * @api public\n */\n\nRequestBase.prototype.serialize = function (fn) {\n this._serializer = fn;\n return this;\n};\n\n/**\n * Set timeouts.\n *\n * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time.\n * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections.\n * - upload is the time since last bit of data was sent or received. This timeout works only if deadline timeout is off\n *\n * Value of 0 or false means no timeout.\n *\n * @param {Number|Object} ms or {response, deadline}\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.timeout = function (options) {\n if (!options || typeof options !== 'object') {\n this._timeout = options;\n this._responseTimeout = 0;\n this._uploadTimeout = 0;\n return this;\n }\n for (const option in options) {\n if (hasOwn(options, option)) {\n switch (option) {\n case 'deadline':\n this._timeout = options.deadline;\n break;\n case 'response':\n this._responseTimeout = options.response;\n break;\n case 'upload':\n this._uploadTimeout = options.upload;\n break;\n default:\n console.warn('Unknown timeout option', option);\n }\n }\n }\n return this;\n};\n\n/**\n * Set number of retry attempts on error.\n *\n * Failed requests will be retried 'count' times if timeout or err.code >= 500.\n *\n * @param {Number} count\n * @param {Function} [fn]\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.retry = function (count, fn) {\n // Default to 1 if no count passed or true\n if (arguments.length === 0 || count === true) count = 1;\n if (count <= 0) count = 0;\n this._maxRetries = count;\n this._retries = 0;\n this._retryCallback = fn;\n return this;\n};\n\n//\n// NOTE: we do not include ESOCKETTIMEDOUT because that is from `request` package\n// <https://github.com/sindresorhus/got/pull/537>\n//\n// NOTE: we do not include EADDRINFO because it was removed from libuv in 2014\n// <https://github.com/libuv/libuv/commit/02e1ebd40b807be5af46343ea873331b2ee4e9c1>\n// <https://github.com/request/request/search?q=ESOCKETTIMEDOUT&unscoped_q=ESOCKETTIMEDOUT>\n//\n//\n// TODO: expose these as configurable defaults\n//\nconst ERROR_CODES = new Set(['ETIMEDOUT', 'ECONNRESET', 'EADDRINUSE', 'ECONNREFUSED', 'EPIPE', 'ENOTFOUND', 'ENETUNREACH', 'EAI_AGAIN']);\nconst STATUS_CODES = new Set([408, 413, 429, 500, 502, 503, 504, 521, 522, 524]);\n\n// TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST)\n// const METHODS = new Set(['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']);\n\n/**\n * Determine if a request should be retried.\n * (Inspired by https://github.com/sindresorhus/got#retry)\n *\n * @param {Error} err an error\n * @param {Response} [res] response\n * @returns {Boolean} if segment should be retried\n */\nRequestBase.prototype._shouldRetry = function (error, res) {\n if (!this._maxRetries || this._retries++ >= this._maxRetries) {\n return false;\n }\n if (this._retryCallback) {\n try {\n const override = this._retryCallback(error, res);\n if (override === true) return true;\n if (override === false) return false;\n // undefined falls back to defaults\n } catch (err) {\n console.error(err);\n }\n }\n\n // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST)\n /*\n if (\n this.req &&\n this.req.method &&\n !METHODS.has(this.req.method.toUpperCase())\n )\n return false;\n */\n if (res && res.status && STATUS_CODES.has(res.status)) return true;\n if (error) {\n if (error.code && ERROR_CODES.has(error.code)) return true;\n // Superagent timeout\n if (error.timeout && error.code === 'ECONNABORTED') return true;\n if (error.crossDomain) return true;\n }\n return false;\n};\n\n/**\n * Retry request\n *\n * @return {Request} for chaining\n * @api private\n */\n\nRequestBase.prototype._retry = function () {\n this.clearTimeout();\n\n // node\n if (this.req) {\n this.req = null;\n this.req = this.request();\n }\n this._aborted = false;\n this.timedout = false;\n this.timedoutError = null;\n return this._end();\n};\n\n/**\n * Promise support\n *\n * @param {Function} resolve\n * @param {Function} [reject]\n * @return {Request}\n */\n\nRequestBase.prototype.then = function (resolve, reject) {\n if (!this._fullfilledPromise) {\n const self = this;\n if (this._endCalled) {\n console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises');\n }\n this._fullfilledPromise = new Promise((resolve, reject) => {\n self.on('abort', () => {\n if (this._maxRetries && this._maxRetries > this._retries) {\n return;\n }\n if (this.timedout && this.timedoutError) {\n reject(this.timedoutError);\n return;\n }\n const error = new Error('Aborted');\n error.code = 'ABORTED';\n error.status = this.status;\n error.method = this.method;\n error.url = this.url;\n reject(error);\n });\n self.end((error, res) => {\n if (error) reject(error);else resolve(res);\n });\n });\n }\n return this._fullfilledPromise.then(resolve, reject);\n};\nRequestBase.prototype.catch = function (callback) {\n return this.then(undefined, callback);\n};\n\n/**\n * Allow for extension\n */\n\nRequestBase.prototype.use = function (fn) {\n fn(this);\n return this;\n};\nRequestBase.prototype.ok = function (callback) {\n if (typeof callback !== 'function') throw new Error('Callback required');\n this._okCallback = callback;\n return this;\n};\nRequestBase.prototype._isResponseOK = function (res) {\n if (!res) {\n return false;\n }\n if (this._okCallback) {\n return this._okCallback(res);\n }\n return res.status >= 200 && res.status < 300;\n};\n\n/**\n * Get request header `field`.\n * Case-insensitive.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nRequestBase.prototype.get = function (field) {\n return this._header[field.toLowerCase()];\n};\n\n/**\n * Get case-insensitive header `field` value.\n * This is a deprecated internal API. Use `.get(field)` instead.\n *\n * (getHeader is no longer used internally by the superagent code base)\n *\n * @param {String} field\n * @return {String}\n * @api private\n * @deprecated\n */\n\nRequestBase.prototype.getHeader = RequestBase.prototype.get;\n\n/**\n * Set header `field` to `val`, or multiple fields with one object.\n * Case-insensitive.\n *\n * Examples:\n *\n * req.get('/')\n * .set('Accept', 'application/json')\n * .set('X-API-Key', 'foobar')\n * .end(callback);\n *\n * req.get('/')\n * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' })\n * .end(callback);\n *\n * @param {String|Object} field\n * @param {String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.set = function (field, value) {\n if (isObject(field)) {\n for (const key in field) {\n if (hasOwn(field, key)) this.set(key, field[key]);\n }\n return this;\n }\n this._header[field.toLowerCase()] = value;\n this.header[field] = value;\n return this;\n};\n\n/**\n * Remove header `field`.\n * Case-insensitive.\n *\n * Example:\n *\n * req.get('/')\n * .unset('User-Agent')\n * .end(callback);\n *\n * @param {String} field field name\n */\nRequestBase.prototype.unset = function (field) {\n delete this._header[field.toLowerCase()];\n delete this.header[field];\n return this;\n};\n\n/**\n * Write the field `name` and `val`, or multiple fields with one object\n * for \"multipart/form-data\" request bodies.\n *\n * ``` js\n * request.post('/upload')\n * .field('foo', 'bar')\n * .end(callback);\n *\n * request.post('/upload')\n * .field({ foo: 'bar', baz: 'qux' })\n * .end(callback);\n * ```\n *\n * @param {String|Object} name name of field\n * @param {String|Blob|File|Buffer|fs.ReadStream} val value of field\n * @param {String} options extra options, e.g. 'blob'\n * @return {Request} for chaining\n * @api public\n */\nRequestBase.prototype.field = function (name, value, options) {\n // name should be either a string or an object.\n if (name === null || undefined === name) {\n throw new Error('.field(name, val) name can not be empty');\n }\n if (this._data) {\n throw new Error(\".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()\");\n }\n if (isObject(name)) {\n for (const key in name) {\n if (hasOwn(name, key)) this.field(key, name[key]);\n }\n return this;\n }\n if (Array.isArray(value)) {\n for (const i in value) {\n if (hasOwn(value, i)) this.field(name, value[i]);\n }\n return this;\n }\n\n // val should be defined now\n if (value === null || undefined === value) {\n throw new Error('.field(name, val) val can not be empty');\n }\n if (typeof value === 'boolean') {\n value = String(value);\n }\n\n // fix https://github.com/ladjs/superagent/issues/1680\n if (options) this._getFormData().append(name, value, options);else this._getFormData().append(name, value);\n return this;\n};\n\n/**\n * Abort the request, and clear potential timeout.\n *\n * @return {Request} request\n * @api public\n */\nRequestBase.prototype.abort = function () {\n if (this._aborted) {\n return this;\n }\n this._aborted = true;\n if (this.xhr) this.xhr.abort(); // browser\n if (this.req) {\n this.req.abort(); // node\n }\n this.clearTimeout();\n this.emit('abort');\n return this;\n};\nRequestBase.prototype._auth = function (user, pass, options, base64Encoder) {\n switch (options.type) {\n case 'basic':\n this.set('Authorization', `Basic ${base64Encoder(`${user}:${pass}`)}`);\n break;\n case 'auto':\n this.username = user;\n this.password = pass;\n break;\n case 'bearer':\n // usage would be .auth(accessToken, { type: 'bearer' })\n this.set('Authorization', `Bearer ${user}`);\n break;\n default:\n break;\n }\n return this;\n};\n\n/**\n * Enable transmission of cookies with x-domain requests.\n *\n * Note that for this to work the origin must not be\n * using \"Access-Control-Allow-Origin\" with a wildcard,\n * and also must set \"Access-Control-Allow-Credentials\"\n * to \"true\".\n * @param {Boolean} [on=true] - Set 'withCredentials' state\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.withCredentials = function (on) {\n // This is browser-only functionality. Node side is no-op.\n if (on === undefined) on = true;\n this._withCredentials = on;\n return this;\n};\n\n/**\n * Set the max redirects to `n`. Does nothing in browser XHR implementation.\n *\n * @param {Number} n\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.redirects = function (n) {\n this._maxRedirects = n;\n return this;\n};\n\n/**\n * Maximum size of buffered response body, in bytes. Counts uncompressed size.\n * Default 200MB.\n *\n * @param {Number} n number of bytes\n * @return {Request} for chaining\n */\nRequestBase.prototype.maxResponseSize = function (n) {\n if (typeof n !== 'number') {\n throw new TypeError('Invalid argument');\n }\n this._maxResponseSize = n;\n return this;\n};\n\n/**\n * Convert to a plain javascript object (not JSON string) of scalar properties.\n * Note as this method is designed to return a useful non-this value,\n * it cannot be chained.\n *\n * @return {Object} describing method, url, and data of this request\n * @api public\n */\n\nRequestBase.prototype.toJSON = function () {\n return {\n method: this.method,\n url: this.url,\n data: this._data,\n headers: this._header\n };\n};\n\n/**\n * Send `data` as the request body, defaulting the `.type()` to \"json\" when\n * an object is given.\n *\n * Examples:\n *\n * // manual json\n * request.post('/user')\n * .type('json')\n * .send('{\"name\":\"tj\"}')\n * .end(callback)\n *\n * // auto json\n * request.post('/user')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // manual x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send('name=tj')\n * .end(callback)\n *\n * // auto x-www-form-urlencoded\n * request.post('/user')\n * .type('form')\n * .send({ name: 'tj' })\n * .end(callback)\n *\n * // defaults to x-www-form-urlencoded\n * request.post('/user')\n * .send('name=tobi')\n * .send('species=ferret')\n * .end(callback)\n *\n * @param {String|Object} data\n * @return {Request} for chaining\n * @api public\n */\n\n// eslint-disable-next-line complexity\nRequestBase.prototype.send = function (data) {\n const isObject_ = isObject(data);\n let type = this._header['content-type'];\n if (this._formData) {\n throw new Error(\".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()\");\n }\n if (isObject_ && !this._data) {\n if (Array.isArray(data)) {\n this._data = [];\n } else if (!this._isHost(data)) {\n this._data = {};\n }\n } else if (data && this._data && this._isHost(this._data)) {\n throw new Error(\"Can't merge these send calls\");\n }\n\n // merge\n if (isObject_ && isObject(this._data)) {\n for (const key in data) {\n if (typeof data[key] == 'bigint' && !data[key].toJSON) throw new Error('Cannot serialize BigInt value to json');\n if (hasOwn(data, key)) this._data[key] = data[key];\n }\n } else if (typeof data === 'bigint') throw new Error(\"Cannot send value of type BigInt\");else if (typeof data === 'string') {\n // default to x-www-form-urlencoded\n if (!type) this.type('form');\n type = this._header['content-type'];\n if (type) type = type.toLowerCase().trim();\n if (type === 'application/x-www-form-urlencoded') {\n this._data = this._data ? `${this._data}&${data}` : data;\n } else {\n this._data = (this._data || '') + data;\n }\n } else {\n this._data = data;\n }\n if (!isObject_ || this._isHost(data)) {\n return this;\n }\n\n // default to json\n if (!type) this.type('json');\n return this;\n};\n\n/**\n * Sort `querystring` by the sort function\n *\n *\n * Examples:\n *\n * // default order\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery()\n * .end(callback)\n *\n * // customized sort function\n * request.get('/user')\n * .query('name=Nick')\n * .query('search=Manny')\n * .sortQuery(function(a, b){\n * return a.length - b.length;\n * })\n * .end(callback)\n *\n *\n * @param {Function} sort\n * @return {Request} for chaining\n * @api public\n */\n\nRequestBase.prototype.sortQuery = function (sort) {\n // _sort default to true but otherwise can be a function or boolean\n this._sort = typeof sort === 'undefined' ? true : sort;\n return this;\n};\n\n/**\n * Compose querystring to append to req.url\n *\n * @api private\n */\nRequestBase.prototype._finalizeQueryString = function () {\n const query = this._query.join('&');\n if (query) {\n this.url += (this.url.includes('?') ? '&' : '?') + query;\n }\n this._query.length = 0; // Makes the call idempotent\n\n if (this._sort) {\n const index = this.url.indexOf('?');\n if (index >= 0) {\n const queryArray = this.url.slice(index + 1).split('&');\n if (typeof this._sort === 'function') {\n queryArray.sort(this._sort);\n } else {\n queryArray.sort();\n }\n this.url = this.url.slice(0, index) + '?' + queryArray.join('&');\n }\n }\n};\n\n// For backwards compat only\nRequestBase.prototype._appendQueryString = () => {\n console.warn('Unsupported');\n};\n\n/**\n * Invoke callback with timeout error.\n *\n * @api private\n */\n\nRequestBase.prototype._timeoutError = function (reason, timeout, errno) {\n if (this._aborted) {\n return;\n }\n const error = new Error(`${reason + timeout}ms exceeded`);\n error.timeout = timeout;\n error.code = 'ECONNABORTED';\n error.errno = errno;\n this.timedout = true;\n this.timedoutError = error;\n this.abort();\n this.callback(error);\n};\nRequestBase.prototype._setTimeouts = function () {\n const self = this;\n\n // deadline\n if (this._timeout && !this._timer) {\n this._timer = setTimeout(() => {\n self._timeoutError('Timeout of ', self._timeout, 'ETIME');\n }, this._timeout);\n }\n\n // response timeout\n if (this._responseTimeout && !this._responseTimeoutTimer) {\n this._responseTimeoutTimer = setTimeout(() => {\n self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT');\n }, this._responseTimeout);\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc09iamVjdCIsImhhc093biIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVxdWVzdEJhc2UiLCJwcm90b3R5cGUiLCJjbGVhclRpbWVvdXQiLCJfdGltZXIiLCJfcmVzcG9uc2VUaW1lb3V0VGltZXIiLCJfdXBsb2FkVGltZW91dFRpbWVyIiwicGFyc2UiLCJmbiIsIl9wYXJzZXIiLCJyZXNwb25zZVR5cGUiLCJ2YWx1ZSIsIl9yZXNwb25zZVR5cGUiLCJzZXJpYWxpemUiLCJfc2VyaWFsaXplciIsInRpbWVvdXQiLCJvcHRpb25zIiwiX3RpbWVvdXQiLCJfcmVzcG9uc2VUaW1lb3V0IiwiX3VwbG9hZFRpbWVvdXQiLCJvcHRpb24iLCJkZWFkbGluZSIsInJlc3BvbnNlIiwidXBsb2FkIiwiY29uc29sZSIsIndhcm4iLCJyZXRyeSIsImNvdW50IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiX21heFJldHJpZXMiLCJfcmV0cmllcyIsIl9yZXRyeUNhbGxiYWNrIiwiRVJST1JfQ09ERVMiLCJTZXQiLCJTVEFUVVNfQ09ERVMiLCJfc2hvdWxkUmV0cnkiLCJlcnJvciIsInJlcyIsIm92ZXJyaWRlIiwiZXJyIiwic3RhdHVzIiwiaGFzIiwiY29kZSIsImNyb3NzRG9tYWluIiwiX3JldHJ5IiwicmVxIiwicmVxdWVzdCIsIl9hYm9ydGVkIiwidGltZWRvdXQiLCJ0aW1lZG91dEVycm9yIiwiX2VuZCIsInRoZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwiX2Z1bGxmaWxsZWRQcm9taXNlIiwic2VsZiIsIl9lbmRDYWxsZWQiLCJQcm9taXNlIiwib24iLCJFcnJvciIsIm1ldGhvZCIsInVybCIsImVuZCIsImNhdGNoIiwiY2FsbGJhY2siLCJ1bmRlZmluZWQiLCJ1c2UiLCJvayIsIl9va0NhbGxiYWNrIiwiX2lzUmVzcG9uc2VPSyIsImdldCIsImZpZWxkIiwiX2hlYWRlciIsInRvTG93ZXJDYXNlIiwiZ2V0SGVhZGVyIiwic2V0Iiwia2V5IiwiaGVhZGVyIiwidW5zZXQiLCJuYW1lIiwiX2RhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwiU3RyaW5nIiwiX2dldEZvcm1EYXRhIiwiYXBwZW5kIiwiYWJvcnQiLCJ4aHIiLCJlbWl0IiwiX2F1dGgiLCJ1c2VyIiwicGFzcyIsImJhc2U2NEVuY29kZXIiLCJ0eXBlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIndpdGhDcmVkZW50aWFscyIsIl93aXRoQ3JlZGVudGlhbHMiLCJyZWRpcmVjdHMiLCJuIiwiX21heFJlZGlyZWN0cyIsIm1heFJlc3BvbnNlU2l6ZSIsIlR5cGVFcnJvciIsIl9tYXhSZXNwb25zZVNpemUiLCJ0b0pTT04iLCJkYXRhIiwiaGVhZGVycyIsInNlbmQiLCJpc09iamVjdF8iLCJfZm9ybURhdGEiLCJfaXNIb3N0IiwidHJpbSIsInNvcnRRdWVyeSIsInNvcnQiLCJfc29ydCIsIl9maW5hbGl6ZVF1ZXJ5U3RyaW5nIiwicXVlcnkiLCJfcXVlcnkiLCJqb2luIiwiaW5jbHVkZXMiLCJpbmRleCIsImluZGV4T2YiLCJxdWVyeUFycmF5Iiwic2xpY2UiLCJzcGxpdCIsIl9hcHBlbmRRdWVyeVN0cmluZyIsIl90aW1lb3V0RXJyb3IiLCJyZWFzb24iLCJlcnJubyIsIl9zZXRUaW1lb3V0cyIsInNldFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi9zcmMvcmVxdWVzdC1iYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIG9mIG1peGVkLWluIGZ1bmN0aW9ucyBzaGFyZWQgYmV0d2VlbiBub2RlIGFuZCBjbGllbnQgY29kZVxuICovXG5jb25zdCB7IGlzT2JqZWN0LCBoYXNPd24gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RCYXNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlcXVlc3RCYXNlYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3RCYXNlKCkge31cblxuLyoqXG4gKiBDbGVhciBwcmV2aW91cyB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICBjbGVhclRpbWVvdXQodGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpO1xuICBjbGVhclRpbWVvdXQodGhpcy5fdXBsb2FkVGltZW91dFRpbWVyKTtcbiAgZGVsZXRlIHRoaXMuX3RpbWVyO1xuICBkZWxldGUgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXI7XG4gIGRlbGV0ZSB0aGlzLl91cGxvYWRUaW1lb3V0VGltZXI7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBPdmVycmlkZSBkZWZhdWx0IHJlc3BvbnNlIGJvZHkgcGFyc2VyXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGluY29taW5nIGRhdGEgaW50byByZXF1ZXN0LmJvZHlcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdGhpcy5fcGFyc2VyID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgZm9ybWF0IG9mIGJpbmFyeSByZXNwb25zZSBib2R5LlxuICogSW4gYnJvd3NlciB2YWxpZCBmb3JtYXRzIGFyZSAnYmxvYicgYW5kICdhcnJheWJ1ZmZlcicsXG4gKiB3aGljaCByZXR1cm4gQmxvYiBhbmQgQXJyYXlCdWZmZXIsIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBJbiBOb2RlIGFsbCB2YWx1ZXMgcmVzdWx0IGluIEJ1ZmZlci5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5yZXNwb25zZVR5cGUoJ2Jsb2InKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucmVzcG9uc2VUeXBlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHRoaXMuX3Jlc3BvbnNlVHlwZSA9IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogT3ZlcnJpZGUgZGVmYXVsdCByZXF1ZXN0IGJvZHkgc2VyaWFsaXplclxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBkYXRhIHNldCB2aWEgLnNlbmQgb3IgLmF0dGFjaCBpbnRvIHBheWxvYWQgdG8gc2VuZFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgdGhpcy5fc2VyaWFsaXplciA9IGZuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRpbWVvdXRzLlxuICpcbiAqIC0gcmVzcG9uc2UgdGltZW91dCBpcyB0aW1lIGJldHdlZW4gc2VuZGluZyByZXF1ZXN0IGFuZCByZWNlaXZpbmcgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlLiBJbmNsdWRlcyBETlMgYW5kIGNvbm5lY3Rpb24gdGltZS5cbiAqIC0gZGVhZGxpbmUgaXMgdGhlIHRpbWUgZnJvbSBzdGFydCBvZiB0aGUgcmVxdWVzdCB0byByZWNlaXZpbmcgcmVzcG9uc2UgYm9keSBpbiBmdWxsLiBJZiB0aGUgZGVhZGxpbmUgaXMgdG9vIHNob3J0IGxhcmdlIGZpbGVzIG1heSBub3QgbG9hZCBhdCBhbGwgb24gc2xvdyBjb25uZWN0aW9ucy5cbiAqIC0gdXBsb2FkIGlzIHRoZSB0aW1lICBzaW5jZSBsYXN0IGJpdCBvZiBkYXRhIHdhcyBzZW50IG9yIHJlY2VpdmVkLiBUaGlzIHRpbWVvdXQgd29ya3Mgb25seSBpZiBkZWFkbGluZSB0aW1lb3V0IGlzIG9mZlxuICpcbiAqIFZhbHVlIG9mIDAgb3IgZmFsc2UgbWVhbnMgbm8gdGltZW91dC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcnxPYmplY3R9IG1zIG9yIHtyZXNwb25zZSwgZGVhZGxpbmV9XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnM7XG4gICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0ID0gMDtcbiAgICB0aGlzLl91cGxvYWRUaW1lb3V0ID0gMDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZvciAoY29uc3Qgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBpZiAoaGFzT3duKG9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2RlYWRsaW5lJzpcbiAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gb3B0aW9ucy5kZWFkbGluZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVzcG9uc2UnOlxuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlVGltZW91dCA9IG9wdGlvbnMucmVzcG9uc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgICAgdGhpcy5fdXBsb2FkVGltZW91dCA9IG9wdGlvbnMudXBsb2FkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biB0aW1lb3V0IG9wdGlvbicsIG9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgb24gZXJyb3IuXG4gKlxuICogRmFpbGVkIHJlcXVlc3RzIHdpbGwgYmUgcmV0cmllZCAnY291bnQnIHRpbWVzIGlmIHRpbWVvdXQgb3IgZXJyLmNvZGUgPj0gNTAwLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZXRyeSA9IGZ1bmN0aW9uIChjb3VudCwgZm4pIHtcbiAgLy8gRGVmYXVsdCB0byAxIGlmIG5vIGNvdW50IHBhc3NlZCBvciB0cnVlXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IGNvdW50ID09PSB0cnVlKSBjb3VudCA9IDE7XG4gIGlmIChjb3VudCA8PSAwKSBjb3VudCA9IDA7XG4gIHRoaXMuX21heFJldHJpZXMgPSBjb3VudDtcbiAgdGhpcy5fcmV0cmllcyA9IDA7XG4gIHRoaXMuX3JldHJ5Q2FsbGJhY2sgPSBmbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gTk9URTogd2UgZG8gbm90IGluY2x1ZGUgRVNPQ0tFVFRJTUVET1VUIGJlY2F1c2UgdGhhdCBpcyBmcm9tIGByZXF1ZXN0YCBwYWNrYWdlXG4vLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nb3QvcHVsbC81Mzc+XG4vL1xuLy8gTk9URTogd2UgZG8gbm90IGluY2x1ZGUgRUFERFJJTkZPIGJlY2F1c2UgaXQgd2FzIHJlbW92ZWQgZnJvbSBsaWJ1diBpbiAyMDE0XG4vLyAgICAgICA8aHR0cHM6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2L2NvbW1pdC8wMmUxZWJkNDBiODA3YmU1YWY0NjM0M2VhODczMzMxYjJlZTRlOWMxPlxuLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1ZXN0L3JlcXVlc3Qvc2VhcmNoP3E9RVNPQ0tFVFRJTUVET1VUJnVuc2NvcGVkX3E9RVNPQ0tFVFRJTUVET1VUPlxuLy9cbi8vXG4vLyBUT0RPOiBleHBvc2UgdGhlc2UgYXMgY29uZmlndXJhYmxlIGRlZmF1bHRzXG4vL1xuY29uc3QgRVJST1JfQ09ERVMgPSBuZXcgU2V0KFtcbiAgJ0VUSU1FRE9VVCcsXG4gICdFQ09OTlJFU0VUJyxcbiAgJ0VBRERSSU5VU0UnLFxuICAnRUNPTk5SRUZVU0VEJyxcbiAgJ0VQSVBFJyxcbiAgJ0VOT1RGT1VORCcsXG4gICdFTkVUVU5SRUFDSCcsXG4gICdFQUlfQUdBSU4nXG5dKTtcblxuY29uc3QgU1RBVFVTX0NPREVTID0gbmV3IFNldChbXG4gIDQwOCwgNDEzLCA0MjksIDUwMCwgNTAyLCA1MDMsIDUwNCwgNTIxLCA1MjIsIDUyNFxuXSk7XG5cbi8vIFRPRE86IHdlIHdvdWxkIG5lZWQgdG8gbWFrZSB0aGlzIGVhc2lseSBjb25maWd1cmFibGUgYmVmb3JlIGFkZGluZyBpdCBpbiAoZS5nLiBzb21lIG1pZ2h0IHdhbnQgdG8gYWRkIFBPU1QpXG4vLyBjb25zdCBNRVRIT0RTID0gbmV3IFNldChbJ0dFVCcsICdQVVQnLCAnSEVBRCcsICdERUxFVEUnLCAnT1BUSU9OUycsICdUUkFDRSddKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSByZXF1ZXN0IHNob3VsZCBiZSByZXRyaWVkLlxuICogKEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ290I3JldHJ5KVxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyciBhbiBlcnJvclxuICogQHBhcmFtIHtSZXNwb25zZX0gW3Jlc10gcmVzcG9uc2VcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpZiBzZWdtZW50IHNob3VsZCBiZSByZXRyaWVkXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2hvdWxkUmV0cnkgPSBmdW5jdGlvbiAoZXJyb3IsIHJlcykge1xuICBpZiAoIXRoaXMuX21heFJldHJpZXMgfHwgdGhpcy5fcmV0cmllcysrID49IHRoaXMuX21heFJldHJpZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fcmV0cnlDYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuX3JldHJ5Q2FsbGJhY2soZXJyb3IsIHJlcyk7XG4gICAgICBpZiAob3ZlcnJpZGUgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKG92ZXJyaWRlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gdW5kZWZpbmVkIGZhbGxzIGJhY2sgdG8gZGVmYXVsdHNcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiB3ZSB3b3VsZCBuZWVkIHRvIG1ha2UgdGhpcyBlYXNpbHkgY29uZmlndXJhYmxlIGJlZm9yZSBhZGRpbmcgaXQgaW4gKGUuZy4gc29tZSBtaWdodCB3YW50IHRvIGFkZCBQT1NUKVxuICAvKlxuICBpZiAoXG4gICAgdGhpcy5yZXEgJiZcbiAgICB0aGlzLnJlcS5tZXRob2QgJiZcbiAgICAhTUVUSE9EUy5oYXModGhpcy5yZXEubWV0aG9kLnRvVXBwZXJDYXNlKCkpXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gICovXG4gIGlmIChyZXMgJiYgcmVzLnN0YXR1cyAmJiBTVEFUVVNfQ09ERVMuaGFzKHJlcy5zdGF0dXMpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgJiYgRVJST1JfQ09ERVMuaGFzKGVycm9yLmNvZGUpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTdXBlcmFnZW50IHRpbWVvdXRcbiAgICBpZiAoZXJyb3IudGltZW91dCAmJiBlcnJvci5jb2RlID09PSAnRUNPTk5BQk9SVEVEJykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGVycm9yLmNyb3NzRG9tYWluKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogUmV0cnkgcmVxdWVzdFxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9yZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcblxuICAvLyBub2RlXG4gIGlmICh0aGlzLnJlcSkge1xuICAgIHRoaXMucmVxID0gbnVsbDtcbiAgICB0aGlzLnJlcSA9IHRoaXMucmVxdWVzdCgpO1xuICB9XG5cbiAgdGhpcy5fYWJvcnRlZCA9IGZhbHNlO1xuICB0aGlzLnRpbWVkb3V0ID0gZmFsc2U7XG4gIHRoaXMudGltZWRvdXRFcnJvciA9IG51bGw7XG5cbiAgcmV0dXJuIHRoaXMuX2VuZCgpO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIHN1cHBvcnRcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVqZWN0XVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgaWYgKCF0aGlzLl9mdWxsZmlsbGVkUHJvbWlzZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dhcm5pbmc6IHN1cGVyYWdlbnQgcmVxdWVzdCB3YXMgc2VudCB0d2ljZSwgYmVjYXVzZSBib3RoIC5lbmQoKSBhbmQgLnRoZW4oKSB3ZXJlIGNhbGxlZC4gTmV2ZXIgY2FsbCAuZW5kKCkgaWYgeW91IHVzZSBwcm9taXNlcydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZnVsbGZpbGxlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZWxmLm9uKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21heFJldHJpZXMgJiYgdGhpcy5fbWF4UmV0cmllcyA+IHRoaXMuX3JldHJpZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aW1lZG91dCAmJiB0aGlzLnRpbWVkb3V0RXJyb3IpIHtcbiAgICAgICAgICByZWplY3QodGhpcy50aW1lZG91dEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignQWJvcnRlZCcpO1xuICAgICAgICBlcnJvci5jb2RlID0gJ0FCT1JURUQnO1xuICAgICAgICBlcnJvci5zdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgICAgICAgZXJyb3IubWV0aG9kID0gdGhpcy5tZXRob2Q7XG4gICAgICAgIGVycm9yLnVybCA9IHRoaXMudXJsO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBzZWxmLmVuZCgoZXJyb3IsIHJlcykgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHJlamVjdChlcnJvcik7XG4gICAgICAgIGVsc2UgcmVzb2x2ZShyZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZFByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBjYWxsYmFjayk7XG59O1xuXG4vKipcbiAqIEFsbG93IGZvciBleHRlbnNpb25cbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIGZuKHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5vayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxiYWNrIHJlcXVpcmVkJyk7XG4gIHRoaXMuX29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2lzUmVzcG9uc2VPSyA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgaWYgKCFyZXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodGhpcy5fb2tDYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLl9va0NhbGxiYWNrKHJlcyk7XG4gIH1cblxuICByZXR1cm4gcmVzLnN0YXR1cyA+PSAyMDAgJiYgcmVzLnN0YXR1cyA8IDMwMDtcbn07XG5cbi8qKlxuICogR2V0IHJlcXVlc3QgaGVhZGVyIGBmaWVsZGAuXG4gKiBDYXNlLWluc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIHJldHVybiB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV07XG59O1xuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBgZmllbGRgIHZhbHVlLlxuICogVGhpcyBpcyBhIGRlcHJlY2F0ZWQgaW50ZXJuYWwgQVBJLiBVc2UgYC5nZXQoZmllbGQpYCBpbnN0ZWFkLlxuICpcbiAqIChnZXRIZWFkZXIgaXMgbm8gbG9uZ2VyIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgc3VwZXJhZ2VudCBjb2RlIGJhc2UpXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqIEBkZXByZWNhdGVkXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmdldEhlYWRlciA9IFJlcXVlc3RCYXNlLnByb3RvdHlwZS5nZXQ7XG5cbi8qKlxuICogU2V0IGhlYWRlciBgZmllbGRgIHRvIGB2YWxgLCBvciBtdWx0aXBsZSBmaWVsZHMgd2l0aCBvbmUgb2JqZWN0LlxuICogQ2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuc2V0KCdYLUFQSS1LZXknLCAnZm9vYmFyJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC5zZXQoeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywgJ1gtQVBJLUtleSc6ICdmb29iYXInIH0pXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gIGlmIChpc09iamVjdChmaWVsZCkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWVsZCkge1xuICAgICAgaWYgKGhhc093bihmaWVsZCwga2V5KSkgdGhpcy5zZXQoa2V5LCBmaWVsZFtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2hlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB0aGlzLmhlYWRlcltmaWVsZF0gPSB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBoZWFkZXIgYGZpZWxkYC5cbiAqIENhc2UtaW5zZW5zaXRpdmUuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgIHJlcS5nZXQoJy8nKVxuICogICAgICAgIC51bnNldCgnVXNlci1BZ2VudCcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkIGZpZWxkIG5hbWVcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLnVuc2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIGRlbGV0ZSB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gIGRlbGV0ZSB0aGlzLmhlYWRlcltmaWVsZF07XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSB0aGUgZmllbGQgYG5hbWVgIGFuZCBgdmFsYCwgb3IgbXVsdGlwbGUgZmllbGRzIHdpdGggb25lIG9iamVjdFxuICogZm9yIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHJlcXVlc3QgYm9kaWVzLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKCdmb28nLCAnYmFyJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAqICAgLmZpZWxkKHsgZm9vOiAnYmFyJywgYmF6OiAncXV4JyB9KVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gbmFtZSBuYW1lIG9mIGZpZWxkXG4gKiBAcGFyYW0ge1N0cmluZ3xCbG9ifEZpbGV8QnVmZmVyfGZzLlJlYWRTdHJlYW19IHZhbCB2YWx1ZSBvZiBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMgZXh0cmEgb3B0aW9ucywgZS5nLiAnYmxvYidcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLmZpZWxkID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIG5hbWUgc2hvdWxkIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvYmplY3QuXG4gIGlmIChuYW1lID09PSBudWxsIHx8IHVuZGVmaW5lZCA9PT0gbmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignLmZpZWxkKG5hbWUsIHZhbCkgbmFtZSBjYW4gbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodGhpcy5fZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiLmZpZWxkKCkgY2FuJ3QgYmUgdXNlZCBpZiAuc2VuZCgpIGlzIHVzZWQuIFBsZWFzZSB1c2Ugb25seSAuc2VuZCgpIG9yIG9ubHkgLmZpZWxkKCkgJiAuYXR0YWNoKClcIlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBuYW1lKSB7XG4gICAgICBpZiAoaGFzT3duKG5hbWUsIGtleSkpIHRoaXMuZmllbGQoa2V5LCBuYW1lW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCBpIGluIHZhbHVlKSB7XG4gICAgICBpZiAoaGFzT3duKHZhbHVlLCBpKSkgdGhpcy5maWVsZChuYW1lLCB2YWx1ZVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB2YWwgc2hvdWxkIGJlIGRlZmluZWQgbm93XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB1bmRlZmluZWQgPT09IHZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCcuZmllbGQobmFtZSwgdmFsKSB2YWwgY2FuIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLy8gZml4IGh0dHBzOi8vZ2l0aHViLmNvbS9sYWRqcy9zdXBlcmFnZW50L2lzc3Vlcy8xNjgwXG4gIGlmIChvcHRpb25zKSB0aGlzLl9nZXRGb3JtRGF0YSgpLmFwcGVuZChuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIGVsc2UgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQobmFtZSwgdmFsdWUpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBYm9ydCB0aGUgcmVxdWVzdCwgYW5kIGNsZWFyIHBvdGVudGlhbCB0aW1lb3V0LlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRoaXMuX2Fib3J0ZWQgPSB0cnVlO1xuICBpZiAodGhpcy54aHIpIHRoaXMueGhyLmFib3J0KCk7IC8vIGJyb3dzZXJcbiAgaWYgKHRoaXMucmVxKSB7XG4gICAgdGhpcy5yZXEuYWJvcnQoKTsgLy8gbm9kZVxuICB9XG5cbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgdGhpcy5lbWl0KCdhYm9ydCcpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fYXV0aCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBvcHRpb25zLCBiYXNlNjRFbmNvZGVyKSB7XG4gIHN3aXRjaCAob3B0aW9ucy50eXBlKSB7XG4gICAgY2FzZSAnYmFzaWMnOlxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmFzaWMgJHtiYXNlNjRFbmNvZGVyKGAke3VzZXJ9OiR7cGFzc31gKX1gKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcjtcbiAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWFyZXInOiAvLyB1c2FnZSB3b3VsZCBiZSAuYXV0aChhY2Nlc3NUb2tlbiwgeyB0eXBlOiAnYmVhcmVyJyB9KVxuICAgICAgdGhpcy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dXNlcn1gKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBFbmFibGUgdHJhbnNtaXNzaW9uIG9mIGNvb2tpZXMgd2l0aCB4LWRvbWFpbiByZXF1ZXN0cy5cbiAqXG4gKiBOb3RlIHRoYXQgZm9yIHRoaXMgdG8gd29yayB0aGUgb3JpZ2luIG11c3Qgbm90IGJlXG4gKiB1c2luZyBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiIHdpdGggYSB3aWxkY2FyZCxcbiAqIGFuZCBhbHNvIG11c3Qgc2V0IFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIlxuICogdG8gXCJ0cnVlXCIuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbj10cnVlXSAtIFNldCAnd2l0aENyZWRlbnRpYWxzJyBzdGF0ZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS53aXRoQ3JlZGVudGlhbHMgPSBmdW5jdGlvbiAob24pIHtcbiAgLy8gVGhpcyBpcyBicm93c2VyLW9ubHkgZnVuY3Rpb25hbGl0eS4gTm9kZSBzaWRlIGlzIG5vLW9wLlxuICBpZiAob24gPT09IHVuZGVmaW5lZCkgb24gPSB0cnVlO1xuICB0aGlzLl93aXRoQ3JlZGVudGlhbHMgPSBvbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF4IHJlZGlyZWN0cyB0byBgbmAuIERvZXMgbm90aGluZyBpbiBicm93c2VyIFhIUiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gblxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZWRpcmVjdHMgPSBmdW5jdGlvbiAobikge1xuICB0aGlzLl9tYXhSZWRpcmVjdHMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTWF4aW11bSBzaXplIG9mIGJ1ZmZlcmVkIHJlc3BvbnNlIGJvZHksIGluIGJ5dGVzLiBDb3VudHMgdW5jb21wcmVzc2VkIHNpemUuXG4gKiBEZWZhdWx0IDIwME1CLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBuIG51bWJlciBvZiBieXRlc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5tYXhSZXNwb25zZVNpemUgPSBmdW5jdGlvbiAobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICB9XG5cbiAgdGhpcy5fbWF4UmVzcG9uc2VTaXplID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgdG8gYSBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdCAobm90IEpTT04gc3RyaW5nKSBvZiBzY2FsYXIgcHJvcGVydGllcy5cbiAqIE5vdGUgYXMgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQgdG8gcmV0dXJuIGEgdXNlZnVsIG5vbi10aGlzIHZhbHVlLFxuICogaXQgY2Fubm90IGJlIGNoYWluZWQuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkZXNjcmliaW5nIG1ldGhvZCwgdXJsLCBhbmQgZGF0YSBvZiB0aGlzIHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgIHVybDogdGhpcy51cmwsXG4gICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogU2VuZCBgZGF0YWAgYXMgdGhlIHJlcXVlc3QgYm9keSwgZGVmYXVsdGluZyB0aGUgYC50eXBlKClgIHRvIFwianNvblwiIHdoZW5cbiAqIGFuIG9iamVjdCBpcyBnaXZlbi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgICAvLyBtYW51YWwganNvblxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdqc29uJylcbiAqICAgICAgICAgLnNlbmQoJ3tcIm5hbWVcIjpcInRqXCJ9JylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBhdXRvIGpzb25cbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBtYW51YWwgeC13d3ctZm9ybS11cmxlbmNvZGVkXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2Zvcm0nKVxuICogICAgICAgICAuc2VuZCgnbmFtZT10aicpXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gYXV0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnZm9ybScpXG4gKiAgICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGRlZmF1bHRzIHRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCgnbmFtZT10b2JpJylcbiAqICAgICAgICAuc2VuZCgnc3BlY2llcz1mZXJyZXQnKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBkYXRhXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgaXNPYmplY3RfID0gaXNPYmplY3QoZGF0YSk7XG4gIGxldCB0eXBlID0gdGhpcy5faGVhZGVyWydjb250ZW50LXR5cGUnXTtcblxuICBpZiAodGhpcy5fZm9ybURhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIi5zZW5kKCkgY2FuJ3QgYmUgdXNlZCBpZiAuYXR0YWNoKCkgb3IgLmZpZWxkKCkgaXMgdXNlZC4gUGxlYXNlIHVzZSBvbmx5IC5zZW5kKCkgb3Igb25seSAuZmllbGQoKSAmIC5hdHRhY2goKVwiXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc09iamVjdF8gJiYgIXRoaXMuX2RhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzSG9zdChkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChkYXRhICYmIHRoaXMuX2RhdGEgJiYgdGhpcy5faXNIb3N0KHRoaXMuX2RhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgbWVyZ2UgdGhlc2Ugc2VuZCBjYWxsc1wiKTtcbiAgfVxuXG4gIC8vIG1lcmdlXG4gIGlmIChpc09iamVjdF8gJiYgaXNPYmplY3QodGhpcy5fZGF0YSkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFba2V5XSA9PSAnYmlnaW50JyAmJiAhZGF0YVtrZXldLnRvSlNPTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2VyaWFsaXplIEJpZ0ludCB2YWx1ZSB0byBqc29uJyk7XG4gICAgICBpZiAoaGFzT3duKGRhdGEsIGtleSkpIHRoaXMuX2RhdGFba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdiaWdpbnQnKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2VuZCB2YWx1ZSBvZiB0eXBlIEJpZ0ludFwiKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZGVmYXVsdCB0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAgICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnZm9ybScpO1xuICAgIHR5cGUgPSB0aGlzLl9oZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICAgIGlmICh0eXBlKSB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhID8gYCR7dGhpcy5fZGF0YX0mJHtkYXRhfWAgOiBkYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gKHRoaXMuX2RhdGEgfHwgJycpICsgZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0XyB8fCB0aGlzLl9pc0hvc3QoZGF0YSkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdG8ganNvblxuICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnanNvbicpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU29ydCBgcXVlcnlzdHJpbmdgIGJ5IHRoZSBzb3J0IGZ1bmN0aW9uXG4gKlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgIC8vIGRlZmF1bHQgb3JkZXJcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KClcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBjdXN0b21pemVkIHNvcnQgZnVuY3Rpb25cbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KGZ1bmN0aW9uKGEsIGIpe1xuICogICAgICAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICogICAgICAgICB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzb3J0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnNvcnRRdWVyeSA9IGZ1bmN0aW9uIChzb3J0KSB7XG4gIC8vIF9zb3J0IGRlZmF1bHQgdG8gdHJ1ZSBidXQgb3RoZXJ3aXNlIGNhbiBiZSBhIGZ1bmN0aW9uIG9yIGJvb2xlYW5cbiAgdGhpcy5fc29ydCA9IHR5cGVvZiBzb3J0ID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBzb3J0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ29tcG9zZSBxdWVyeXN0cmluZyB0byBhcHBlbmQgdG8gcmVxLnVybFxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2ZpbmFsaXplUXVlcnlTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcXVlcnkuam9pbignJicpO1xuICBpZiAocXVlcnkpIHtcbiAgICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBxdWVyeTtcbiAgfVxuXG4gIHRoaXMuX3F1ZXJ5Lmxlbmd0aCA9IDA7IC8vIE1ha2VzIHRoZSBjYWxsIGlkZW1wb3RlbnRcblxuICBpZiAodGhpcy5fc29ydCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBxdWVyeUFycmF5ID0gdGhpcy51cmwuc2xpY2UoaW5kZXggKyAxKS5zcGxpdCgnJicpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCh0aGlzLl9zb3J0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnNsaWNlKDAsIGluZGV4KSArICc/JyArIHF1ZXJ5QXJyYXkuam9pbignJicpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRm9yIGJhY2t3YXJkcyBjb21wYXQgb25seVxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9hcHBlbmRRdWVyeVN0cmluZyA9ICgpID0+IHtcbiAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCcpO1xufTtcblxuLyoqXG4gKiBJbnZva2UgY2FsbGJhY2sgd2l0aCB0aW1lb3V0IGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fdGltZW91dEVycm9yID0gZnVuY3Rpb24gKHJlYXNvbiwgdGltZW91dCwgZXJybm8pIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgJHtyZWFzb24gKyB0aW1lb3V0fW1zIGV4Y2VlZGVkYCk7XG4gIGVycm9yLnRpbWVvdXQgPSB0aW1lb3V0O1xuICBlcnJvci5jb2RlID0gJ0VDT05OQUJPUlRFRCc7XG4gIGVycm9yLmVycm5vID0gZXJybm87XG4gIHRoaXMudGltZWRvdXQgPSB0cnVlO1xuICB0aGlzLnRpbWVkb3V0RXJyb3IgPSBlcnJvcjtcbiAgdGhpcy5hYm9ydCgpO1xuICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2V0VGltZW91dHMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIC8vIGRlYWRsaW5lXG4gIGlmICh0aGlzLl90aW1lb3V0ICYmICF0aGlzLl90aW1lcikge1xuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZWxmLl90aW1lb3V0RXJyb3IoJ1RpbWVvdXQgb2YgJywgc2VsZi5fdGltZW91dCwgJ0VUSU1FJyk7XG4gICAgfSwgdGhpcy5fdGltZW91dCk7XG4gIH1cblxuICAvLyByZXNwb25zZSB0aW1lb3V0XG4gIGlmICh0aGlzLl9yZXNwb25zZVRpbWVvdXQgJiYgIXRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKSB7XG4gICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGYuX3RpbWVvdXRFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIHRpbWVvdXQgb2YgJyxcbiAgICAgICAgc2VsZi5fcmVzcG9uc2VUaW1lb3V0LFxuICAgICAgICAnRVRJTUVET1VUJ1xuICAgICAgKTtcbiAgICB9LCB0aGlzLl9yZXNwb25z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","\"use strict\";\n\nconst http2 = require('http2');\nconst Stream = require('stream');\nconst net = require('net');\nconst tls = require('tls');\nconst {\n HTTP2_HEADER_PATH,\n HTTP2_HEADER_STATUS,\n HTTP2_HEADER_METHOD,\n HTTP2_HEADER_AUTHORITY,\n HTTP2_HEADER_HOST,\n HTTP2_HEADER_SET_COOKIE,\n NGHTTP2_CANCEL\n} = http2.constants;\nfunction setProtocol(protocol) {\n return {\n request(options) {\n return new Request(protocol, options);\n }\n };\n}\nfunction normalizeIpv6Host(host) {\n return net.isIP(host) === 6 ? `[${host}]` : host;\n}\nclass Request extends Stream {\n constructor(protocol, options) {\n super();\n const defaultPort = protocol === 'https:' ? 443 : 80;\n const defaultHost = 'localhost';\n const port = options.port || defaultPort;\n const host = options.host || defaultHost;\n delete options.port;\n delete options.host;\n this.method = options.method;\n this.path = options.path;\n this.protocol = protocol;\n this.host = host;\n delete options.method;\n delete options.path;\n const sessionOptions = {\n ...options\n };\n if (options.socketPath) {\n sessionOptions.socketPath = options.socketPath;\n sessionOptions.createConnection = this.createUnixConnection.bind(this);\n }\n this._headers = {};\n const normalizedHost = normalizeIpv6Host(host);\n const session = http2.connect(`${protocol}//${normalizedHost}:${port}`, sessionOptions);\n this.setHeader('host', `${normalizedHost}:${port}`);\n session.on('error', error => this.emit('error', error));\n this.session = session;\n }\n createUnixConnection(authority, options) {\n switch (this.protocol) {\n case 'http:':\n return net.connect(options.socketPath);\n case 'https:':\n options.ALPNProtocols = ['h2'];\n options.servername = this.host;\n options.allowHalfOpen = true;\n return tls.connect(options.socketPath, options);\n default:\n throw new Error('Unsupported protocol', this.protocol);\n }\n }\n setNoDelay(bool) {\n // We can not use setNoDelay with HTTP/2.\n // Node 10 limits http2session.socket methods to ones safe to use with HTTP/2.\n // See also https://nodejs.org/api/http2.html#http2_http2session_socket\n }\n getFrame() {\n if (this.frame) {\n return this.frame;\n }\n const method = {\n [HTTP2_HEADER_PATH]: this.path,\n [HTTP2_HEADER_METHOD]: this.method\n };\n let headers = this.mapToHttp2Header(this._headers);\n headers = Object.assign(headers, method);\n const frame = this.session.request(headers);\n frame.once('response', (headers, flags) => {\n headers = this.mapToHttpHeader(headers);\n frame.headers = headers;\n frame.statusCode = headers[HTTP2_HEADER_STATUS];\n frame.status = frame.statusCode;\n this.emit('response', frame);\n });\n this._headerSent = true;\n frame.once('drain', () => this.emit('drain'));\n frame.on('error', error => this.emit('error', error));\n frame.on('close', () => this.session.close());\n this.frame = frame;\n return frame;\n }\n mapToHttpHeader(headers) {\n const keys = Object.keys(headers);\n const http2Headers = {};\n for (let key of keys) {\n let value = headers[key];\n key = key.toLowerCase();\n switch (key) {\n case HTTP2_HEADER_SET_COOKIE:\n value = Array.isArray(value) ? value : [value];\n break;\n default:\n break;\n }\n http2Headers[key] = value;\n }\n return http2Headers;\n }\n mapToHttp2Header(headers) {\n const keys = Object.keys(headers);\n const http2Headers = {};\n for (let key of keys) {\n let value = headers[key];\n key = key.toLowerCase();\n switch (key) {\n case HTTP2_HEADER_HOST:\n key = HTTP2_HEADER_AUTHORITY;\n value = /^http:\\/\\/|^https:\\/\\//.test(value) ? new URL(value).host : value;\n break;\n default:\n break;\n }\n http2Headers[key] = value;\n }\n return http2Headers;\n }\n setHeader(name, value) {\n this._headers[name.toLowerCase()] = value;\n }\n getHeader(name) {\n return this._headers[name.toLowerCase()];\n }\n write(data, encoding) {\n const frame = this.getFrame();\n return frame.write(data, encoding);\n }\n pipe(stream, options) {\n const frame = this.getFrame();\n return frame.pipe(stream, options);\n }\n end(data) {\n const frame = this.getFrame();\n frame.end(data);\n }\n abort(data) {\n const frame = this.getFrame();\n frame.close(NGHTTP2_CANCEL);\n this.session.destroy();\n }\n}\nexports.setProtocol = setProtocol;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwMiIsInJlcXVpcmUiLCJTdHJlYW0iLCJuZXQiLCJ0bHMiLCJIVFRQMl9IRUFERVJfUEFUSCIsIkhUVFAyX0hFQURFUl9TVEFUVVMiLCJIVFRQMl9IRUFERVJfTUVUSE9EIiwiSFRUUDJfSEVBREVSX0FVVEhPUklUWSIsIkhUVFAyX0hFQURFUl9IT1NUIiwiSFRUUDJfSEVBREVSX1NFVF9DT09LSUUiLCJOR0hUVFAyX0NBTkNFTCIsImNvbnN0YW50cyIsInNldFByb3RvY29sIiwicHJvdG9jb2wiLCJyZXF1ZXN0Iiwib3B0aW9ucyIsIlJlcXVlc3QiLCJub3JtYWxpemVJcHY2SG9zdCIsImhvc3QiLCJpc0lQIiwiY29uc3RydWN0b3IiLCJkZWZhdWx0UG9ydCIsImRlZmF1bHRIb3N0IiwicG9ydCIsIm1ldGhvZCIsInBhdGgiLCJzZXNzaW9uT3B0aW9ucyIsInNvY2tldFBhdGgiLCJjcmVhdGVDb25uZWN0aW9uIiwiY3JlYXRlVW5peENvbm5lY3Rpb24iLCJiaW5kIiwiX2hlYWRlcnMiLCJub3JtYWxpemVkSG9zdCIsInNlc3Npb24iLCJjb25uZWN0Iiwic2V0SGVhZGVyIiwib24iLCJlcnJvciIsImVtaXQiLCJhdXRob3JpdHkiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsImFsbG93SGFsZk9wZW4iLCJFcnJvciIsInNldE5vRGVsYXkiLCJib29sIiwiZ2V0RnJhbWUiLCJmcmFtZSIsImhlYWRlcnMiLCJtYXBUb0h0dHAySGVhZGVyIiwiT2JqZWN0IiwiYXNzaWduIiwib25jZSIsImZsYWdzIiwibWFwVG9IdHRwSGVhZGVyIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsIl9oZWFkZXJTZW50IiwiY2xvc2UiLCJrZXlzIiwiaHR0cDJIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJ0b0xvd2VyQ2FzZSIsIkFycmF5IiwiaXNBcnJheSIsInRlc3QiLCJVUkwiLCJuYW1lIiwiZ2V0SGVhZGVyIiwid3JpdGUiLCJkYXRhIiwiZW5jb2RpbmciLCJwaXBlIiwic3RyZWFtIiwiZW5kIiwiYWJvcnQiLCJkZXN0cm95IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2h0dHAyd3JhcHBlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJyk7XG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xuY29uc3QgdGxzID0gcmVxdWlyZSgndGxzJyk7XG5cbmNvbnN0IHtcbiAgSFRUUDJfSEVBREVSX1BBVEgsXG4gIEhUVFAyX0hFQURFUl9TVEFUVVMsXG4gIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gIEhUVFAyX0hFQURFUl9IT1NULFxuICBIVFRQMl9IRUFERVJfU0VUX0NPT0tJRSxcbiAgTkdIVFRQMl9DQU5DRUxcbn0gPSBodHRwMi5jb25zdGFudHM7XG5cbmZ1bmN0aW9uIHNldFByb3RvY29sKHByb3RvY29sKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gbmV3IFJlcXVlc3QocHJvdG9jb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSXB2Nkhvc3QoaG9zdCkge1xuICByZXR1cm4gbmV0LmlzSVAoaG9zdCkgPT09IDYgPyBgWyR7aG9zdH1dYCA6IGhvc3Q7XG59XG5cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBTdHJlYW0ge1xuICBjb25zdHJ1Y3Rvcihwcm90b2NvbCwgb3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgZGVmYXVsdFBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICBjb25zdCBkZWZhdWx0SG9zdCA9ICdsb2NhbGhvc3QnO1xuICAgIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgZGVmYXVsdFBvcnQ7XG4gICAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCBkZWZhdWx0SG9zdDtcblxuICAgIGRlbGV0ZSBvcHRpb25zLnBvcnQ7XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcblxuICAgIHRoaXMubWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gICAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoO1xuICAgIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuXG4gICAgZGVsZXRlIG9wdGlvbnMubWV0aG9kO1xuICAgIGRlbGV0ZSBvcHRpb25zLnBhdGg7XG5cbiAgICBjb25zdCBzZXNzaW9uT3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9O1xuICAgIGlmIChvcHRpb25zLnNvY2tldFBhdGgpIHtcbiAgICAgIHNlc3Npb25PcHRpb25zLnNvY2tldFBhdGggPSBvcHRpb25zLnNvY2tldFBhdGg7XG4gICAgICBzZXNzaW9uT3B0aW9ucy5jcmVhdGVDb25uZWN0aW9uID0gdGhpcy5jcmVhdGVVbml4Q29ubmVjdGlvbi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnMgPSB7fTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRIb3N0ID0gbm9ybWFsaXplSXB2Nkhvc3QoaG9zdCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoXG4gICAgICBgJHtwcm90b2NvbH0vLyR7bm9ybWFsaXplZEhvc3R9OiR7cG9ydH1gLFxuICAgICAgc2Vzc2lvbk9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuc2V0SGVhZGVyKCdob3N0JywgYCR7bm9ybWFsaXplZEhvc3R9OiR7cG9ydH1gKTtcblxuICAgIHNlc3Npb24ub24oJ2Vycm9yJywgKGVycm9yKSA9PiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247XG4gIH1cblxuICBjcmVhdGVVbml4Q29ubmVjdGlvbihhdXRob3JpdHksIG9wdGlvbnMpIHtcbiAgICBzd2l0Y2ggKHRoaXMucHJvdG9jb2wpIHtcbiAgICAgIGNhc2UgJ2h0dHA6JzpcbiAgICAgICAgcmV0dXJuIG5ldC5jb25uZWN0KG9wdGlvbnMuc29ja2V0UGF0aCk7XG4gICAgICBjYXNlICdodHRwczonOlxuICAgICAgICBvcHRpb25zLkFMUE5Qcm90b2NvbHMgPSBbJ2gyJ107XG4gICAgICAgIG9wdGlvbnMuc2VydmVybmFtZSA9IHRoaXMuaG9zdDtcbiAgICAgICAgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KG9wdGlvbnMuc29ja2V0UGF0aCwgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sJywgdGhpcy5wcm90b2NvbCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Tm9EZWxheShib29sKSB7XG4gICAgLy8gV2UgY2FuIG5vdCB1c2Ugc2V0Tm9EZWxheSB3aXRoIEhUVFAvMi5cbiAgICAvLyBOb2RlIDEwIGxpbWl0cyBodHRwMnNlc3Npb24uc29ja2V0IG1ldGhvZHMgdG8gb25lcyBzYWZlIHRvIHVzZSB3aXRoIEhUVFAvMi5cbiAgICAvLyBTZWUgYWxzbyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAyLmh0bWwjaHR0cDJfaHR0cDJzZXNzaW9uX3NvY2tldFxuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgaWYgKHRoaXMuZnJhbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZCA9IHtcbiAgICAgIFtIVFRQMl9IRUFERVJfUEFUSF06IHRoaXMucGF0aCxcbiAgICAgIFtIVFRQMl9IRUFERVJfTUVUSE9EXTogdGhpcy5tZXRob2RcbiAgICB9O1xuXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLm1hcFRvSHR0cDJIZWFkZXIodGhpcy5faGVhZGVycyk7XG5cbiAgICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBtZXRob2QpO1xuXG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLnNlc3Npb24ucmVxdWVzdChoZWFkZXJzKTtcblxuICAgIGZyYW1lLm9uY2UoJ3Jlc3BvbnNlJywgKGhlYWRlcnMsIGZsYWdzKSA9PiB7XG4gICAgICBoZWFkZXJzID0gdGhpcy5tYXBUb0h0dHBIZWFkZXIoaGVhZGVycyk7XG4gICAgICBmcmFtZS5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgIGZyYW1lLnN0YXR1c0NvZGUgPSBoZWFkZXJzW0hUVFAyX0hFQURFUl9TVEFUVVNdO1xuICAgICAgZnJhbWUuc3RhdHVzID0gZnJhbWUuc3RhdHVzQ29kZTtcbiAgICAgIHRoaXMuZW1pdCgncmVzcG9uc2UnLCBmcmFtZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9oZWFkZXJTZW50ID0gdHJ1ZTtcblxuICAgIGZyYW1lLm9uY2UoJ2RyYWluJywgKCkgPT4gdGhpcy5lbWl0KCdkcmFpbicpKTtcbiAgICBmcmFtZS5vbignZXJyb3InLCAoZXJyb3IpID0+IHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcikpO1xuICAgIGZyYW1lLm9uKCdjbG9zZScsICgpID0+IHRoaXMuc2Vzc2lvbi5jbG9zZSgpKTtcblxuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBtYXBUb0h0dHBIZWFkZXIoaGVhZGVycykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgICBjb25zdCBodHRwMkhlYWRlcnMgPSB7fTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFOlxuICAgICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0dHAySGVhZGVycztcbiAgfVxuXG4gIG1hcFRvSHR0cDJIZWFkZXIoaGVhZGVycykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgICBjb25zdCBodHRwMkhlYWRlcnMgPSB7fTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIEhUVFAyX0hFQURFUl9IT1NUOlxuICAgICAgICAgIGtleSA9IEhUVFAyX0hFQURFUl9BVVRIT1JJVFk7XG4gICAgICAgICAgdmFsdWUgPSAvXmh0dHA6XFwvXFwvfF5odHRwczpcXC9cXC8vLnRlc3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBVUkwodmFsdWUpLmhvc3RcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0dHAySGVhZGVycztcbiAgfVxuXG4gIHNldEhlYWRlcihuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0SGVhZGVyKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgd3JpdGUoZGF0YSwgZW5jb2RpbmcpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICByZXR1cm4gZnJhbWUud3JpdGUoZGF0YSwgZW5jb2RpbmcpO1xuICB9XG5cbiAgcGlwZShzdHJlYW0sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICByZXR1cm4gZnJhbWUucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5kKGRhdGEpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgICBmcmFtZS5lbmQoZGF0YSk7XG4gIH1cblxuICBhYm9ydChkYXRhKSB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gICAgZnJhbWUuY2xvc2UoTkdIVFRQMl9DQU5DRUwpO1xuICAgIHRoaXMuc2Vzc2lvbi5kZXN0cm95KCk7XG4gIH1cbn1cblxuZXhwb3J0cy5zZXRQcm90b2NvbCA9IHNldFByb3RvY29sO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QixNQUFNQyxNQUFNLEdBQUdELE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDaEMsTUFBTUUsR0FBRyxHQUFHRixPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFCLE1BQU1HLEdBQUcsR0FBR0gsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUUxQixNQUFNO0VBQ0pJLGlCQUFpQjtFQUNqQkMsbUJBQW1CO0VBQ25CQyxtQkFBbUI7RUFDbkJDLHNCQUFzQjtFQUN0QkMsaUJBQWlCO0VBQ2pCQyx1QkFBdUI7RUFDdkJDO0FBQ0YsQ0FBQyxHQUFHWCxLQUFLLENBQUNZLFNBQVM7QUFFbkIsU0FBU0MsV0FBV0EsQ0FBQ0MsUUFBUSxFQUFFO0VBQzdCLE9BQU87SUFDTEMsT0FBT0EsQ0FBQ0MsT0FBTyxFQUFFO01BQ2YsT0FBTyxJQUFJQyxPQUFPLENBQUNILFFBQVEsRUFBRUUsT0FBTyxDQUFDO0lBQ3ZDO0VBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU0UsaUJBQWlC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","\"use strict\";\n\nconst zlib = require('zlib');\nconst utils = require('../utils');\nconst {\n isGzipOrDeflateEncoding,\n isBrotliEncoding\n} = utils;\nexports.chooseDecompresser = res => {\n let decompresser;\n if (isGzipOrDeflateEncoding(res)) {\n decompresser = zlib.createUnzip();\n } else if (isBrotliEncoding(res)) {\n decompresser = zlib.createBrotliDecompress();\n } else {\n throw new Error('unknown content-encoding');\n }\n return decompresser;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6bGliIiwicmVxdWlyZSIsInV0aWxzIiwiaXNHemlwT3JEZWZsYXRlRW5jb2RpbmciLCJpc0Jyb3RsaUVuY29kaW5nIiwiZXhwb3J0cyIsImNob29zZURlY29tcHJlc3NlciIsInJlcyIsImRlY29tcHJlc3NlciIsImNyZWF0ZVVuemlwIiwiY3JlYXRlQnJvdGxpRGVjb21wcmVzcyIsIkVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vZGUvZGVjb21wcmVzcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuY29uc3QgeyBpc0d6aXBPckRlZmxhdGVFbmNvZGluZywgaXNCcm90bGlFbmNvZGluZyB9ID0gdXRpbHM7XG5cbmV4cG9ydHMuY2hvb3NlRGVjb21wcmVzc2VyID0gKHJlcykgPT4ge1xuICBsZXQgZGVjb21wcmVzc2VyO1xuICBpZiAoaXNHemlwT3JEZWZsYXRlRW5jb2RpbmcocmVzKSkge1xuICAgIGRlY29tcHJlc3NlciA9IHpsaWIuY3JlYXRlVW56aXAoKTtcbiAgfSBlbHNlIGlmIChpc0Jyb3RsaUVuY29kaW5nKHJlcykpIHtcbiAgICBkZWNvbXByZXNzZXIgPSB6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29udGVudC1lbmNvZGluZycpO1xuICB9XG4gIHJldHVybiBkZWNvbXByZXNzZXI7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1DLEtBQUssR0FBR0QsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNqQyxNQUFNO0VBQUVFLHVCQUF1QjtFQUFFQztBQUFpQixDQUFDLEdBQUdGLEtBQUs7QUFFM0RHLE9BQU8sQ0FBQ0Msa0JBQWtCLEdBQUlDLEdBQUcsSUFBSztFQUNwQyxJQUFJQyxZQUFZO0VBQ2hCLElBQUlMLHVCQUF1QixDQUFDSSxHQUFHLENBQUMsRUFBRTtJQUNoQ0MsWUFBWSxHQUFHUixJQUFJLENBQUNTLFdBQVcsQ0FBQyxDQUFDO0VBQ25DLENBQUMsTUFBTSxJQUFJTCxnQkFBZ0IsQ0FBQ0csR0FBRyxDQUFDLEVBQUU7SUFDaENDLFlBQVksR0FBR1IsSUFBSSxDQUFDVSxzQkFBc0IsQ0FBQyxDQUFDO0VBQzlDLENBQUMsTUFBTTtJQUNMLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDO0VBQzdDO0VBQ0EsT0FBT0gsWUFBWTtBQUNyQixDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst {\n StringDecoder\n} = require('string_decoder');\nconst Stream = require('stream');\nconst {\n chooseDecompresser\n} = require('./decompress');\n\n/**\n * Buffers response data events and re-emits when they're decompressed.\n *\n * @param {Request} req\n * @param {Response} res\n * @api private\n */\n\nexports.decompress = (request, res) => {\n let decompresser = chooseDecompresser(res);\n const stream = new Stream();\n let decoder;\n\n // make node responseOnEnd() happy\n stream.req = request;\n decompresser.on('error', error => {\n if (error && error.code === 'Z_BUF_ERROR') {\n // unexpected end of file is ignored by browsers and curl\n stream.emit('end');\n return;\n }\n stream.emit('error', error);\n });\n\n // pipe to unzip\n res.pipe(decompresser);\n\n // override `setEncoding` to capture encoding\n res.setEncoding = type => {\n decoder = new StringDecoder(type);\n };\n\n // decode upon decompressing with captured encoding\n decompresser.on('data', buf => {\n if (decoder) {\n const string_ = decoder.write(buf);\n if (string_.length > 0) stream.emit('data', string_);\n } else {\n stream.emit('data', buf);\n }\n });\n decompresser.on('end', () => {\n stream.emit('end');\n });\n\n // override `on` to capture data listeners\n const _on = res.on;\n res.on = function (type, fn) {\n if (type === 'data' || type === 'end') {\n stream.on(type, fn.bind(res));\n } else if (type === 'error') {\n stream.on(type, fn.bind(res));\n _on.call(res, type, fn);\n } else {\n _on.call(res, type, fn);\n }\n return this;\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdHJpbmdEZWNvZGVyIiwicmVxdWlyZSIsIlN0cmVhbSIsImNob29zZURlY29tcHJlc3NlciIsImV4cG9ydHMiLCJkZWNvbXByZXNzIiwicmVxdWVzdCIsInJlcyIsImRlY29tcHJlc3NlciIsInN0cmVhbSIsImRlY29kZXIiLCJyZXEiLCJvbiIsImVycm9yIiwiY29kZSIsImVtaXQiLCJwaXBlIiwic2V0RW5jb2RpbmciLCJ0eXBlIiwiYnVmIiwic3RyaW5nXyIsIndyaXRlIiwibGVuZ3RoIiwiX29uIiwiZm4iLCJiaW5kIiwiY2FsbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3VuemlwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJyk7XG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmNvbnN0IHsgY2hvb3NlRGVjb21wcmVzc2VyIH0gPSByZXF1aXJlKCcuL2RlY29tcHJlc3MnKTtcblxuLyoqXG4gKiBCdWZmZXJzIHJlc3BvbnNlIGRhdGEgZXZlbnRzIGFuZCByZS1lbWl0cyB3aGVuIHRoZXkncmUgZGVjb21wcmVzc2VkLlxuICpcbiAqIEBwYXJhbSB7UmVxdWVzdH0gcmVxXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuZGVjb21wcmVzcyA9IChyZXF1ZXN0LCByZXMpID0+IHtcbiAgbGV0IGRlY29tcHJlc3NlciA9IGNob29zZURlY29tcHJlc3NlcihyZXMpO1xuXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJlYW0oKTtcbiAgbGV0IGRlY29kZXI7XG5cbiAgLy8gbWFrZSBub2RlIHJlc3BvbnNlT25FbmQoKSBoYXBweVxuICBzdHJlYW0ucmVxID0gcmVxdWVzdDtcblxuICBkZWNvbXByZXNzZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgaWYgKGVycm9yICYmIGVycm9yLmNvZGUgPT09ICdaX0JVRl9FUlJPUicpIHtcbiAgICAgIC8vIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaXMgaWdub3JlZCBieSBicm93c2VycyBhbmQgY3VybFxuICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgfSk7XG5cbiAgLy8gcGlwZSB0byB1bnppcFxuICByZXMucGlwZShkZWNvbXByZXNzZXIpO1xuXG4gIC8vIG92ZXJyaWRlIGBzZXRFbmNvZGluZ2AgdG8gY2FwdHVyZSBlbmNvZGluZ1xuICByZXMuc2V0RW5jb2RpbmcgPSAodHlwZSkgPT4ge1xuICAgIGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2Rlcih0eXBlKTtcbiAgfTtcblxuICAvLyBkZWNvZGUgdXBvbiBkZWNvbXByZXNzaW5nIHdpdGggY2FwdHVyZWQgZW5jb2RpbmdcbiAgZGVjb21wcmVzc2VyLm9uKCdkYXRhJywgKGJ1ZikgPT4ge1xuICAgIGlmIChkZWNvZGVyKSB7XG4gICAgICBjb25zdCBzdHJpbmdfID0gZGVjb2Rlci53cml0ZShidWYpO1xuICAgICAgaWYgKHN0cmluZ18ubGVuZ3RoID4gMCkgc3RyZWFtLmVtaXQoJ2RhdGEnLCBzdHJpbmdfKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLmVtaXQoJ2RhdGEnLCBidWYpO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVjb21wcmVzc2VyLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICB9KTtcblxuICAvLyBvdmVycmlkZSBgb25gIHRvIGNhcHR1cmUgZGF0YSBsaXN0ZW5lcnNcbiAgY29uc3QgX29uID0gcmVzLm9uO1xuICByZXMub24gPSBmdW5jdGlvbiAodHlwZSwgZm4pIHtcbiAgICBpZiAodHlwZSA9PT0gJ2RhdGEnIHx8IHR5cGUgPT09ICdlbmQnKSB7XG4gICAgICBzdHJlYW0ub24odHlwZSwgZm4uYmluZChyZXMpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHN0cmVhbS5vbih0eXBlLCBmbi5iaW5kKHJlcykpO1xuICAgICAgX29uLmNhbGwocmVzLCB0eXBlLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9vbi5jYWxsKHJlcywgdHlwZSwgZm4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTtFQUFFQTtBQUFjLENBQUMsR0FBR0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQ25ELE1BQU1DLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNO0VBQUVFO0FBQW1CLENBQUMsR0FBR0YsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFHLE9BQU8sQ0FBQ0MsVUFBVSxHQUFHLENBQUNDLE9BQU8sRUFBRUMsR0FBRyxLQUFLO0VBQ3JDLElBQUlDLFlBQVksR0FBR0wsa0JBQWtCLENBQUNJLEdBQUcsQ0FBQztFQUUxQyxNQUFNRSxNQUFNLEdBQUcsSUFBSVAsTUFBTSxDQUFDLENBQUM7RUFDM0IsSUFBSVEsT0FBTzs7RUFFWDtFQUNBRCxNQUFNLENBQUNFLEdBQUcsR0FBR0wsT0FBTztFQUVwQkUsWUFBWSxDQUFDSSxFQUFFLENBQUMsT0FBTyxFQUFHQyxLQUFLLElBQUs7SUFDbEMsSUFBSUEsS0FBSyxJQUFJQSxLQUFLLENBQUNDLElBQUksS0FBSyxhQUFhLEVBQUU7TUFDekM7TUFDQUwsTUFBTSxDQUFDTSxJQUFJLENBQUMsS0FBSyxDQUFDO01BQ2xCO0lBQ0Y7SUFFQU4sTUFBTSxDQUFDTSxJQUFJLENBQUMsT0FBTyxFQUFFRixLQUFLLENBQUM7RUFDN0IsQ0FBQyxDQUFDOztFQUVGO0VBQ0FOLEdBQUcsQ0FBQ1MsSUFBSSxDQUFDUixZQUFZLENBQUM7O0VBRXRCO0VBQ0FELEdBQUcsQ0FBQ1UsV0FBVyxHQUFJQyxJQUFJLElBQUs7SUFDMUJSLE9BQU8sR0FBRyxJQUFJVixhQUFhLENBQUNrQixJQUFJLENBQUM7RUFDbkMsQ0FBQzs7RUFFRDtFQUNBVixZQUFZLENBQUNJLEVBQUUsQ0FBQyxNQUFNLEVBQUdPLEdBQUcsSUFBSztJQUMvQixJQUFJVCxPQUFPLEVBQUU7TUFDWCxNQUFNVSxPQUFPLEdBQUdWLE9BQU8sQ0FBQ1csS0FBSyxDQUFDRixHQUFHLENBQUM7TUFDbEMsSUFBSUMsT0FBTyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFYixNQUFNLENBQUNNLElBQUksQ0FBQyxNQUFNLEVBQUVLLE9BQU8sQ0FBQztJQUN0RCxDQUFDLE1BQU07TUFDTFgsTUFBTSxDQUFDTSxJQUFJLENBQUMsTUFBTSxFQUFFSSxHQUFHLENBQUM7SUFDMUI7RUFDRixDQUFDLENBQUM7RUFFRlgsWUFBWSxDQUFDSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDM0JILE1BQU0sQ0FBQ00sSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNwQixDQUFDLENBQUM7O0VBRUY7RUFDQSxNQUFNUSxHQUFHLEdBQUdoQixHQUFHLENBQUNLLEVBQUU7RUFDbEJMLEdBQUcsQ0FBQ0ssRUFBRSxHQUFHLFVBQVVNLElBQUksRUFBRU0sRUFBRSxFQUFFO0lBQzNCLElBQUlOLElBQUksS0FBSyxNQUFNLElBQUlBLElBQUksS0FBSyxLQUFLLEVBQUU7TUFDckNULE1BQU0sQ0FBQ0csRUFBRSxDQUFDTSxJQUFJLEVBQUVNLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDbEIsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxNQUFNLElBQUlXLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDM0JULE1BQU0sQ0FBQ0csRUFBRSxDQUFDTSxJQUFJLEVBQUVNLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDbEIsR0FBRyxDQUFDLENBQUM7TUFDN0JnQixHQUFHLENBQUNHLElBQUksQ0FBQ25CLEdBQUcsRUFBRVcsSUFBSSxFQUFFTSxFQUFFLENBQUM7SUFDekIsQ0FBQyxNQUFNO01BQ0xELEdBQUcsQ0FBQ0csSUFBSSxDQUFDbkIsR0FBRyxFQUFFVyxJQUFJLEVBQUVNLEVBQUUsQ0FBQztJQUN6QjtJQUVBLE9BQU8sSUFBSTtFQUNiLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst utils = require('./utils');\n\n/**\n * Expose `ResponseBase`.\n */\n\nmodule.exports = ResponseBase;\n\n/**\n * Initialize a new `ResponseBase`.\n *\n * @api public\n */\n\nfunction ResponseBase() {}\n\n/**\n * Get case-insensitive `field` value.\n *\n * @param {String} field\n * @return {String}\n * @api public\n */\n\nResponseBase.prototype.get = function (field) {\n return this.header[field.toLowerCase()];\n};\n\n/**\n * Set header related properties:\n *\n * - `.type` the content type without params\n *\n * A response of \"Content-Type: text/plain; charset=utf-8\"\n * will provide you with a `.type` of \"text/plain\".\n *\n * @param {Object} header\n * @api private\n */\n\nResponseBase.prototype._setHeaderProperties = function (header) {\n // TODO: moar!\n // TODO: make this a util\n\n // content-type\n const ct = header['content-type'] || '';\n this.type = utils.type(ct);\n\n // params\n const parameters = utils.params(ct);\n for (const key in parameters) {\n if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key];\n }\n this.links = {};\n\n // links\n try {\n if (header.link) {\n this.links = utils.parseLinks(header.link);\n }\n } catch (err) {\n // ignore\n }\n};\n\n/**\n * Set flags such as `.ok` based on `status`.\n *\n * For example a 2xx response will give you a `.ok` of __true__\n * whereas 5xx will be __false__ and `.error` will be __true__. The\n * `.clientError` and `.serverError` are also available to be more\n * specific, and `.statusType` is the class of error ranging from 1..5\n * sometimes useful for mapping respond colors etc.\n *\n * \"sugar\" properties are also defined for common cases. Currently providing:\n *\n * - .noContent\n * - .badRequest\n * - .unauthorized\n * - .notAcceptable\n * - .notFound\n *\n * @param {Number} status\n * @api private\n */\n\nResponseBase.prototype._setStatusProperties = function (status) {\n const type = Math.trunc(status / 100);\n\n // status / class\n this.statusCode = status;\n this.status = this.statusCode;\n this.statusType = type;\n\n // basics\n this.info = type === 1;\n this.ok = type === 2;\n this.redirect = type === 3;\n this.clientError = type === 4;\n this.serverError = type === 5;\n this.error = type === 4 || type === 5 ? this.toError() : false;\n\n // sugar\n this.created = status === 201;\n this.accepted = status === 202;\n this.noContent = status === 204;\n this.badRequest = status === 400;\n this.unauthorized = status === 401;\n this.notAcceptable = status === 406;\n this.forbidden = status === 403;\n this.notFound = status === 404;\n this.unprocessableEntity = status === 422;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlscyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVzcG9uc2VCYXNlIiwicHJvdG90eXBlIiwiZ2V0IiwiZmllbGQiLCJoZWFkZXIiLCJ0b0xvd2VyQ2FzZSIsIl9zZXRIZWFkZXJQcm9wZXJ0aWVzIiwiY3QiLCJ0eXBlIiwicGFyYW1ldGVycyIsInBhcmFtcyIsImtleSIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImxpbmtzIiwibGluayIsInBhcnNlTGlua3MiLCJlcnIiLCJfc2V0U3RhdHVzUHJvcGVydGllcyIsInN0YXR1cyIsIk1hdGgiLCJ0cnVuYyIsInN0YXR1c0NvZGUiLCJzdGF0dXNUeXBlIiwiaW5mbyIsIm9rIiwicmVkaXJlY3QiLCJjbGllbnRFcnJvciIsInNlcnZlckVycm9yIiwiZXJyb3IiLCJ0b0Vycm9yIiwiY3JlYXRlZCIsImFjY2VwdGVkIiwibm9Db250ZW50IiwiYmFkUmVxdWVzdCIsInVuYXV0aG9yaXplZCIsIm5vdEFjY2VwdGFibGUiLCJmb3JiaWRkZW4iLCJub3RGb3VuZCIsInVucHJvY2Vzc2FibGVFbnRpdHkiXSwic291cmNlcyI6WyIuLi9zcmMvcmVzcG9uc2UtYmFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogRXhwb3NlIGBSZXNwb25zZUJhc2VgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gUmVzcG9uc2VCYXNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlQmFzZWAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXNwb25zZUJhc2UoKSB7fVxuXG4vKipcbiAqIEdldCBjYXNlLWluc2Vuc2l0aXZlIGBmaWVsZGAgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gIHJldHVybiB0aGlzLmhlYWRlcltmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbn07XG5cbi8qKlxuICogU2V0IGhlYWRlciByZWxhdGVkIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGAudHlwZWAgdGhlIGNvbnRlbnQgdHlwZSB3aXRob3V0IHBhcmFtc1xuICpcbiAqIEEgcmVzcG9uc2Ugb2YgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIlxuICogd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgYC50eXBlYCBvZiBcInRleHQvcGxhaW5cIi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRIZWFkZXJQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGhlYWRlcikge1xuICAvLyBUT0RPOiBtb2FyIVxuICAvLyBUT0RPOiBtYWtlIHRoaXMgYSB1dGlsXG5cbiAgLy8gY29udGVudC10eXBlXG4gIGNvbnN0IGN0ID0gaGVhZGVyWydjb250ZW50LXR5cGUnXSB8fCAnJztcbiAgdGhpcy50eXBlID0gdXRpbHMudHlwZShjdCk7XG5cbiAgLy8gcGFyYW1zXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSB1dGlscy5wYXJhbXMoY3QpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbWV0ZXJzLCBrZXkpKVxuICAgICAgdGhpc1trZXldID0gcGFyYW1ldGVyc1trZXldO1xuICB9XG5cbiAgdGhpcy5saW5rcyA9IHt9O1xuXG4gIC8vIGxpbmtzXG4gIHRyeSB7XG4gICAgaWYgKGhlYWRlci5saW5rKSB7XG4gICAgICB0aGlzLmxpbmtzID0gdXRpbHMucGFyc2VMaW5rcyhoZWFkZXIubGluayk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxufTtcblxuLyoqXG4gKiBTZXQgZmxhZ3Mgc3VjaCBhcyBgLm9rYCBiYXNlZCBvbiBgc3RhdHVzYC5cbiAqXG4gKiBGb3IgZXhhbXBsZSBhIDJ4eCByZXNwb25zZSB3aWxsIGdpdmUgeW91IGEgYC5va2Agb2YgX190cnVlX19cbiAqIHdoZXJlYXMgNXh4IHdpbGwgYmUgX19mYWxzZV9fIGFuZCBgLmVycm9yYCB3aWxsIGJlIF9fdHJ1ZV9fLiBUaGVcbiAqIGAuY2xpZW50RXJyb3JgIGFuZCBgLnNlcnZlckVycm9yYCBhcmUgYWxzbyBhdmFpbGFibGUgdG8gYmUgbW9yZVxuICogc3BlY2lmaWMsIGFuZCBgLnN0YXR1c1R5cGVgIGlzIHRoZSBjbGFzcyBvZiBlcnJvciByYW5naW5nIGZyb20gMS4uNVxuICogc29tZXRpbWVzIHVzZWZ1bCBmb3IgbWFwcGluZyByZXNwb25kIGNvbG9ycyBldGMuXG4gKlxuICogXCJzdWdhclwiIHByb3BlcnRpZXMgYXJlIGFsc28gZGVmaW5lZCBmb3IgY29tbW9uIGNhc2VzLiBDdXJyZW50bHkgcHJvdmlkaW5nOlxuICpcbiAqICAgLSAubm9Db250ZW50XG4gKiAgIC0gLmJhZFJlcXVlc3RcbiAqICAgLSAudW5hdXRob3JpemVkXG4gKiAgIC0gLm5vdEFjY2VwdGFibGVcbiAqICAgLSAubm90Rm91bmRcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXNwb25zZUJhc2UucHJvdG90eXBlLl9zZXRTdGF0dXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICBjb25zdCB0eXBlID0gTWF0aC50cnVuYyhzdGF0dXMgLyAxMDApO1xuXG4gIC8vIHN0YXR1cyAvIGNsYXNzXG4gIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgdGhpcy5zdGF0dXMgPSB0aGlzLnN0YXR1c0NvZGU7XG4gIHRoaXMuc3RhdHVzVHlwZSA9IHR5cGU7XG5cbiAgLy8gYmFzaWNzXG4gIHRoaXMuaW5mbyA9IHR5cGUgPT09IDE7XG4gIHRoaXMub2sgPSB0eXBlID09PSAyO1xuICB0aGlzLnJlZGlyZWN0ID0gdHlwZSA9PT0gMztcbiAgdGhpcy5jbGllbnRFcnJvciA9IHR5cGUgPT09IDQ7XG4gIHRoaXMuc2VydmVyRXJyb3IgPSB0eXBlID09PSA1O1xuICB0aGlzLmVycm9yID0gdHlwZSA9PT0gNCB8fCB0eXBlID09PSA1ID8gdGhpcy50b0Vycm9yKCkgOiBmYWxzZTtcblxuICAvLyBzdWdhclxuICB0aGlzLmNyZWF0ZWQgPSBzdGF0dXMgPT09IDIwMTtcbiAgdGhpcy5hY2NlcHRlZCA9IHN0YXR1cyA9PT0gMjAyO1xuICB0aGlzLm5vQ29udGVudCA9IHN0YXR1cyA9PT0gMjA0O1xuICB0aGlzLmJhZFJlcXVlc3QgPSBzdGF0dXMgPT09IDQwMDtcbiAgdGhpcy51bmF1dGhvcml6ZWQgPSBzdGF0dXMgPT09IDQwMTtcbiAgdGhpcy5ub3RBY2NlcHRhYmxlID0gc3RhdHVzID09PSA0MDY7XG4gIHRoaXMuZm9yYmlkZGVuID0gc3RhdHVzID09PSA0MDM7XG4gIHRoaXMubm90Rm91bmQgPSBzdGF0dXMgPT09IDQwNDtcbiAgdGhpcy51bnByb2Nlc3NhYmxlRW50aXR5ID0gc3RhdHVzID09PSA0MjI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxTQUFTLENBQUM7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdDLFlBQVk7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0EsWUFBWUEsQ0FBQSxFQUFHLENBQUM7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBQSxZQUFZLENBQUNDLFNBQVMsQ0FBQ0MsR0FBRyxHQUFHLFVBQVVDLEtBQUssRUFB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","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst util = require('util');\nconst Stream = require('stream');\nconst ResponseBase = require('../response-base');\nconst {\n mixin\n} = require('../utils');\n\n/**\n * Expose `Response`.\n */\n\nmodule.exports = Response;\n\n/**\n * Initialize a new `Response` with the given `xhr`.\n *\n * - set flags (.ok, .error, etc)\n * - parse header\n *\n * @param {Request} req\n * @param {Object} options\n * @constructor\n * @extends {Stream}\n * @implements {ReadableStream}\n * @api private\n */\n\nfunction Response(request) {\n Stream.call(this);\n this.res = request.res;\n const {\n res\n } = this;\n this.request = request;\n this.req = request.req;\n this.text = res.text;\n this.files = res.files || {};\n this.buffered = request._resBuffered;\n this.headers = res.headers;\n this.header = this.headers;\n this._setStatusProperties(res.statusCode);\n this._setHeaderProperties(this.header);\n this.setEncoding = res.setEncoding.bind(res);\n res.on('data', this.emit.bind(this, 'data'));\n res.on('end', this.emit.bind(this, 'end'));\n res.on('close', this.emit.bind(this, 'close'));\n res.on('error', this.emit.bind(this, 'error'));\n}\n\n// Lazy access res.body.\n// https://github.com/nodejs/node/pull/39520#issuecomment-889697136\nObject.defineProperty(Response.prototype, 'body', {\n get() {\n return this._body !== undefined ? this._body : this.res.body !== undefined ? this.res.body : {};\n },\n set(value) {\n this._body = value;\n }\n});\n\n/**\n * Inherit from `Stream`.\n */\n\nutil.inherits(Response, Stream);\nmixin(Response.prototype, ResponseBase.prototype);\n\n/**\n * Implements methods of a `ReadableStream`\n */\n\nResponse.prototype.destroy = function (error) {\n this.res.destroy(error);\n};\n\n/**\n * Pause.\n */\n\nResponse.prototype.pause = function () {\n this.res.pause();\n};\n\n/**\n * Resume.\n */\n\nResponse.prototype.resume = function () {\n this.res.resume();\n};\n\n/**\n * Return an `Error` representative of this response.\n *\n * @return {Error}\n * @api public\n */\n\nResponse.prototype.toError = function () {\n const {\n req\n } = this;\n const {\n method\n } = req;\n const {\n path\n } = req;\n const message = `cannot ${method} ${path} (${this.status})`;\n const error = new Error(message);\n error.status = this.status;\n error.text = this.text;\n error.method = method;\n error.path = path;\n return error;\n};\nResponse.prototype.setStatusProperties = function (status) {\n console.warn('In superagent 2.x setStatusProperties is a private method');\n return this._setStatusProperties(status);\n};\n\n/**\n * To json.\n *\n * @return {Object}\n * @api public\n */\n\nResponse.prototype.toJSON = function () {\n return {\n req: this.request.toJSON(),\n header: this.header,\n status: this.status,\n text: this.text\n };\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsIiwicmVxdWlyZSIsIlN0cmVhbSIsIlJlc3BvbnNlQmFzZSIsIm1peGluIiwibW9kdWxlIiwiZXhwb3J0cyIsIlJlc3BvbnNlIiwicmVxdWVzdCIsImNhbGwiLCJyZXMiLCJyZXEiLCJ0ZXh0IiwiZmlsZXMiLCJidWZmZXJlZCIsIl9yZXNCdWZmZXJlZCIsImhlYWRlcnMiLCJoZWFkZXIiLCJfc2V0U3RhdHVzUHJvcGVydGllcyIsInN0YXR1c0NvZGUiLCJfc2V0SGVhZGVyUHJvcGVydGllcyIsInNldEVuY29kaW5nIiwiYmluZCIsIm9uIiwiZW1pdCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwicHJvdG90eXBlIiwiZ2V0IiwiX2JvZHkiLCJ1bmRlZmluZWQiLCJib2R5Iiwic2V0IiwidmFsdWUiLCJpbmhlcml0cyIsImRlc3Ryb3kiLCJlcnJvciIsInBhdXNlIiwicmVzdW1lIiwidG9FcnJvciIsIm1ldGhvZCIsInBhdGgiLCJtZXNzYWdlIiwic3RhdHVzIiwiRXJyb3IiLCJzZXRTdGF0dXNQcm9wZXJ0aWVzIiwiY29uc29sZSIsIndhcm4iLCJ0b0pTT04iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9yZXNwb25zZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgUmVzcG9uc2VCYXNlID0gcmVxdWlyZSgnLi4vcmVzcG9uc2UtYmFzZScpO1xuY29uc3QgeyBtaXhpbiB9ID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3BvbnNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlYCB3aXRoIHRoZSBnaXZlbiBgeGhyYC5cbiAqXG4gKiAgLSBzZXQgZmxhZ3MgKC5vaywgLmVycm9yLCBldGMpXG4gKiAgLSBwYXJzZSBoZWFkZXJcbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMge1N0cmVhbX1cbiAqIEBpbXBsZW1lbnRzIHtSZWFkYWJsZVN0cmVhbX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIFJlc3BvbnNlKHJlcXVlc3QpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIHRoaXMucmVzID0gcmVxdWVzdC5yZXM7XG4gIGNvbnN0IHsgcmVzIH0gPSB0aGlzO1xuICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB0aGlzLnJlcSA9IHJlcXVlc3QucmVxO1xuICB0aGlzLnRleHQgPSByZXMudGV4dDtcbiAgdGhpcy5maWxlcyA9IHJlcy5maWxlcyB8fCB7fTtcbiAgdGhpcy5idWZmZXJlZCA9IHJlcXVlc3QuX3Jlc0J1ZmZlcmVkO1xuICB0aGlzLmhlYWRlcnMgPSByZXMuaGVhZGVycztcbiAgdGhpcy5oZWFkZXIgPSB0aGlzLmhlYWRlcnM7XG4gIHRoaXMuX3NldFN0YXR1c1Byb3BlcnRpZXMocmVzLnN0YXR1c0NvZGUpO1xuICB0aGlzLl9zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKTtcbiAgdGhpcy5zZXRFbmNvZGluZyA9IHJlcy5zZXRFbmNvZGluZy5iaW5kKHJlcyk7XG4gIHJlcy5vbignZGF0YScsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdkYXRhJykpO1xuICByZXMub24oJ2VuZCcsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlbmQnKSk7XG4gIHJlcy5vbignY2xvc2UnLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnY2xvc2UnKSk7XG4gIHJlcy5vbignZXJyb3InLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKSk7XG59XG5cbi8vIExhenkgYWNjZXNzIHJlcy5ib2R5LlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzk1MjAjaXNzdWVjb21tZW50LTg4OTY5NzEzNlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgJ2JvZHknLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYm9keSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMuX2JvZHlcbiAgICAgIDogdGhpcy5yZXMuYm9keSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMucmVzLmJvZHlcbiAgICAgIDoge307XG4gIH0sXG4gIHNldCh2YWx1ZSkge1xuICAgIHRoaXMuX2JvZHkgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbi8qKlxuICogSW5oZXJpdCBmcm9tIGBTdHJlYW1gLlxuICovXG5cbnV0aWwuaW5oZXJpdHMoUmVzcG9uc2UsIFN0cmVhbSk7XG5cbm1peGluKFJlc3BvbnNlLnByb3RvdHlwZSwgUmVzcG9uc2VCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogSW1wbGVtZW50cyBtZXRob2RzIG9mIGEgYFJlYWRhYmxlU3RyZWFtYFxuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gIHRoaXMucmVzLmRlc3Ryb3koZXJyb3IpO1xufTtcblxuLyoqXG4gKiBQYXVzZS5cbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucmVzLnBhdXNlKCk7XG59O1xuXG4vKipcbiAqIFJlc3VtZS5cbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJlcy5yZXN1bWUoKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFuIGBFcnJvcmAgcmVwcmVzZW50YXRpdmUgb2YgdGhpcyByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJuIHtFcnJvcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnRvRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gcmVxO1xuICBjb25zdCB7IHBhdGggfSA9IHJlcTtcblxuICBjb25zdCBtZXNzYWdlID0gYGNhbm5vdCAke21ldGhvZH0gJHtwYXRofSAoJHt0aGlzLnN0YXR1c30pYDtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIGVycm9yLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICBlcnJvci50ZXh0ID0gdGhpcy50ZXh0O1xuICBlcnJvci5tZXRob2QgPSBtZXRob2Q7XG4gIGVycm9yLnBhdGggPSBwYXRoO1xuXG4gIHJldHVybiBlcnJvcjtcbn07XG5cblJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICBjb25zb2xlLndhcm4oJ0luIHN1cGVyYWdlbnQgMi54IHNldFN0YXR1c1Byb3BlcnRpZXMgaXMgYSBwcml2YXRlIG1ldGhvZCcpO1xuICByZXR1cm4gdGhpcy5fc2V0U3RhdHVzUHJvcGVydGllcyhzdGF0dXMpO1xufTtcblxuLyoqXG4gKiBUbyBqc29uLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICByZXE6IHRoaXMucmVxdWVzdC50b0pTT04oKSxcbiAgICBoZWFkZXI6IHRoaXMuaGVhZGVyLFxuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgdGV4dDogdGhpcy50ZXh0XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUMsTUFBTSxHQUFHRCxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ2hDLE1BQU1FLFlBQVksR0FB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","\"use strict\";\n\nconst defaults = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts'];\nclass Agent {\n constructor() {\n this._defaults = [];\n }\n _setDefaults(request) {\n for (const def of this._defaults) {\n request[def.fn](...def.args);\n }\n }\n}\nfor (const fn of defaults) {\n // Default setting for all requests from this agent\n Agent.prototype[fn] = function (...args) {\n this._defaults.push({\n fn,\n args\n });\n return this;\n };\n}\nmodule.exports = Agent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0cyIsIkFnZW50IiwiY29uc3RydWN0b3IiLCJfZGVmYXVsdHMiLCJfc2V0RGVmYXVsdHMiLCJyZXF1ZXN0IiwiZGVmIiwiZm4iLCJhcmdzIiwicHJvdG90eXBlIiwicHVzaCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQtYmFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBkZWZhdWx0cyA9IFtcbiAgJ3VzZScsXG4gICdvbicsXG4gICdvbmNlJyxcbiAgJ3NldCcsXG4gICdxdWVyeScsXG4gICd0eXBlJyxcbiAgJ2FjY2VwdCcsXG4gICdhdXRoJyxcbiAgJ3dpdGhDcmVkZW50aWFscycsXG4gICdzb3J0UXVlcnknLFxuICAncmV0cnknLFxuICAnb2snLFxuICAncmVkaXJlY3RzJyxcbiAgJ3RpbWVvdXQnLFxuICAnYnVmZmVyJyxcbiAgJ3NlcmlhbGl6ZScsXG4gICdwYXJzZScsXG4gICdjYScsXG4gICdrZXknLFxuICAncGZ4JyxcbiAgJ2NlcnQnLFxuICAnZGlzYWJsZVRMU0NlcnRzJ1xuXVxuXG5jbGFzcyBBZ2VudCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9kZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgX3NldERlZmF1bHRzIChyZXF1ZXN0KSB7XG4gICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5fZGVmYXVsdHMpIHtcbiAgICAgIHJlcXVlc3RbZGVmLmZuXSguLi5kZWYuYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZvciAoY29uc3QgZm4gb2YgZGVmYXVsdHMpIHtcbiAgLy8gRGVmYXVsdCBzZXR0aW5nIGZvciBhbGwgcmVxdWVzdHMgZnJvbSB0aGlzIGFnZW50XG4gIEFnZW50LnByb3RvdHlwZVtmbl0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHRoaXMuX2RlZmF1bHRzLnB1c2goeyBmbiwgYXJncyB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLFFBQVEsR0FBRyxDQUNmLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxPQUFPLEVBQ1AsSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsSUFBSSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixDQUNsQjtBQUVELE1BQU1DLEtBQUssQ0FBQztFQUNWQyxXQUFXQSxDQUFBLEVBQUk7SUFDYixJQUFJLENBQUNDLFNBQVMsR0FBRyxFQUFFO0VBQ3JCO0VBRUFDLFlBQVlBLENBQUVDLE9BQU8sRUFBRTtJQUNyQixLQUFLLE1BQU1DLEdBQUcsSUFBSSxJQUFJLENBQUNILFNBQVMsRUFBRTtNQUNoQ0UsT0FBTyxDQUFDQyxHQUFHLENBQUNDLEVBQUUsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ0UsSUFBSSxDQUFDO0lBQzlCO0VBQ0Y7QUFDRjtBQUVBLEtBQUssTUFBTUQsRUFBRSxJQUFJUCxRQUFRLEVBQUU7RUFDekI7RUFDQUMsS0FBSyxDQUFDUSxTQUFTLENBQUNGLEVBQUUsQ0FBQyxHQUFHLFVBQVUsR0FBR0MsSUFBSSxFQUFFO0lBQ3ZDLElBQUksQ0FBQ0wsU0FBUyxDQUFDTyxJQUFJLENBQUM7TUFBRUgsRUFBRTtNQUFFQztJQUFLLENBQUMsQ0FBQztJQUNqQyxPQUFPLElBQUk7RUFDYixDQUFDO0FBQ0g7QUFHQUcsTUFBTSxDQUFDQyxPQUFPLEdBQUdYLEtBQUsiLCJpZ25vcmVMaXN0IjpbXX0=","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst {\n CookieJar\n} = require('cookiejar');\nconst {\n CookieAccessInfo\n} = require('cookiejar');\nconst methods = require('methods');\nconst request = require('../..');\nconst AgentBase = require('../agent-base');\n\n/**\n * Initialize a new `Agent`.\n *\n * @api public\n */\n\nclass Agent extends AgentBase {\n constructor(options) {\n super();\n this.jar = new CookieJar();\n if (options) {\n if (options.ca) {\n this.ca(options.ca);\n }\n if (options.key) {\n this.key(options.key);\n }\n if (options.pfx) {\n this.pfx(options.pfx);\n }\n if (options.cert) {\n this.cert(options.cert);\n }\n if (options.rejectUnauthorized === false) {\n this.disableTLSCerts();\n }\n }\n }\n\n /**\n * Save the cookies in the given `res` to\n * the agent's cookie jar for persistence.\n *\n * @param {Response} res\n * @api private\n */\n _saveCookies(res) {\n const cookies = res.headers['set-cookie'];\n if (cookies) {\n var _res$request;\n const url = new URL(((_res$request = res.request) === null || _res$request === void 0 ? void 0 : _res$request.url) || '');\n this.jar.setCookies(cookies, url.hostname, url.pathname);\n }\n }\n\n /**\n * Attach cookies when available to the given `req`.\n *\n * @param {Request} req\n * @api private\n */\n _attachCookies(request_) {\n const url = new URL(request_.url);\n const access = new CookieAccessInfo(url.hostname, url.pathname, url.protocol === 'https:');\n const cookies = this.jar.getCookies(access).toValueString();\n request_.cookies = cookies;\n }\n}\nfor (const name of methods) {\n const method = name.toUpperCase();\n if (method === \"QUERY\") continue;\n Agent.prototype[name] = function (url, fn) {\n const request_ = new request.Request(method, url);\n request_.on('response', this._saveCookies.bind(this));\n request_.on('redirect', this._saveCookies.bind(this));\n request_.on('redirect', this._attachCookies.bind(this, request_));\n this._setDefaults(request_);\n this._attachCookies(request_);\n if (fn) {\n request_.end(fn);\n }\n return request_;\n };\n}\nAgent.prototype.del = Agent.prototype.delete;\n\n// create a Proxy that can instantiate a new Agent without using `new` keyword\n// (for backward compatibility and chaining)\nconst proxyAgent = new Proxy(Agent, {\n apply(target, thisArg, argumentsList) {\n return new target(...argumentsList);\n }\n});\nmodule.exports = proxyAgent;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb29raWVKYXIiLCJyZXF1aXJlIiwiQ29va2llQWNjZXNzSW5mbyIsIm1ldGhvZHMiLCJyZXF1ZXN0IiwiQWdlbnRCYXNlIiwiQWdlbnQiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJqYXIiLCJjYSIsImtleSIsInBmeCIsImNlcnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJkaXNhYmxlVExTQ2VydHMiLCJfc2F2ZUNvb2tpZXMiLCJyZXMiLCJjb29raWVzIiwiaGVhZGVycyIsIl9yZXMkcmVxdWVzdCIsInVybCIsIlVSTCIsInNldENvb2tpZXMiLCJob3N0bmFtZSIsInBhdGhuYW1lIiwiX2F0dGFjaENvb2tpZXMiLCJyZXF1ZXN0XyIsImFjY2VzcyIsInByb3RvY29sIiwiZ2V0Q29va2llcyIsInRvVmFsdWVTdHJpbmciLCJuYW1lIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJwcm90b3R5cGUiLCJmbiIsIlJlcXVlc3QiLCJvbiIsImJpbmQiLCJfc2V0RGVmYXVsdHMiLCJlbmQiLCJkZWwiLCJkZWxldGUiLCJwcm94eUFnZW50IiwiUHJveHkiLCJhcHBseSIsInRhcmdldCIsInRoaXNBcmciLCJhcmd1bWVudHNMaXN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2FnZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB7IENvb2tpZUphciB9ID0gcmVxdWlyZSgnY29va2llamFyJyk7XG5jb25zdCB7IENvb2tpZUFjY2Vzc0luZm8gfSA9IHJlcXVpcmUoJ2Nvb2tpZWphcicpO1xuY29uc3QgbWV0aG9kcyA9IHJlcXVpcmUoJ21ldGhvZHMnKTtcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCcuLi8uLicpO1xuY29uc3QgQWdlbnRCYXNlID0gcmVxdWlyZSgnLi4vYWdlbnQtYmFzZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYEFnZW50YC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNsYXNzIEFnZW50IGV4dGVuZHMgQWdlbnRCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5qYXIgPSBuZXcgQ29va2llSmFyKCk7XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuY2EpIHtcbiAgICAgICAgdGhpcy5jYShvcHRpb25zLmNhKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMua2V5KSB7XG4gICAgICAgIHRoaXMua2V5KG9wdGlvbnMua2V5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGZ4KSB7XG4gICAgICAgIHRoaXMucGZ4KG9wdGlvbnMucGZ4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2VydCkge1xuICAgICAgICB0aGlzLmNlcnQob3B0aW9ucy5jZXJ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVqZWN0VW5hdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmRpc2FibGVUTFNDZXJ0cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjb29raWVzIGluIHRoZSBnaXZlbiBgcmVzYCB0b1xuICAgKiB0aGUgYWdlbnQncyBjb29raWUgamFyIGZvciBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmVDb29raWVzIChyZXMpIHtcbiAgICBjb25zdCBjb29raWVzID0gcmVzLmhlYWRlcnNbJ3NldC1jb29raWUnXTtcbiAgICBpZiAoY29va2llcykge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXMucmVxdWVzdD8udXJsIHx8ICcnKTtcbiAgICAgIHRoaXMuamFyLnNldENvb2tpZXMoY29va2llcywgdXJsLmhvc3RuYW1lLCB1cmwucGF0aG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggY29va2llcyB3aGVuIGF2YWlsYWJsZSB0byB0aGUgZ2l2ZW4gYHJlcWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVxdWVzdH0gcmVxXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgX2F0dGFjaENvb2tpZXMgKHJlcXVlc3RfKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0Xy51cmwpO1xuICAgIGNvbnN0IGFjY2VzcyA9IG5ldyBDb29raWVBY2Nlc3NJbmZvKFxuICAgICAgdXJsLmhvc3RuYW1lLFxuICAgICAgdXJsLnBhdGhuYW1lLFxuICAgICAgdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xuICAgICk7XG4gICAgY29uc3QgY29va2llcyA9IHRoaXMuamFyLmdldENvb2tpZXMoYWNjZXNzKS50b1ZhbHVlU3RyaW5nKCk7XG4gICAgcmVxdWVzdF8uY29va2llcyA9IGNvb2tpZXM7XG4gIH1cbn1cblxuZm9yIChjb25zdCBuYW1lIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbWV0aG9kID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICBpZiAobWV0aG9kID09PSBcIlFVRVJZXCIpIGNvbnRpbnVlO1xuICBBZ2VudC5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAodXJsLCBmbikge1xuICAgIGNvbnN0IHJlcXVlc3RfID0gbmV3IHJlcXVlc3QuUmVxdWVzdChtZXRob2QsIHVybCk7XG5cbiAgICByZXF1ZXN0Xy5vbigncmVzcG9uc2UnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9hdHRhY2hDb29raWVzLmJpbmQodGhpcywgcmVxdWVzdF8pKTtcbiAgICB0aGlzLl9zZXREZWZhdWx0cyhyZXF1ZXN0Xyk7XG4gICAgdGhpcy5fYXR0YWNoQ29va2llcyhyZXF1ZXN0Xyk7XG5cbiAgICBpZiAoZm4pIHtcbiAgICAgIHJlcXVlc3RfLmVuZChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuZGVsID0gQWdlbnQucHJvdG90eXBlLmRlbGV0ZTtcblxuLy8gY3JlYXRlIGEgUHJveHkgdGhhdCBjYW4gaW5zdGFudGlhdGUgYSBuZXcgQWdlbnQgd2l0aG91dCB1c2luZyBgbmV3YCBrZXl3b3JkXG4vLyAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIGNoYWluaW5nKVxuY29uc3QgcHJveHlBZ2VudCA9IG5ldyBQcm94eShBZ2VudCwge1xuICBhcHBseSAodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSB7XG4gICAgcmV0dXJuIG5ldyB0YXJnZXQoLi4uYXJndW1lbnRzTGlzdCk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3h5QWdlbnQ7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBOztBQUVBLE1BQU07RUFBRUE7QUFBVSxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDMUMsTUFBTTtFQUFFQztBQUFpQixDQUFDLEdBQUdELE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDakQsTUFBTUUsT0FBTyxHQUFHRixPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLE1BQU1HLE9BQU8sR0FBR0gsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNoQyxNQUFNSSxTQUFTLEdBQUdKLE9BQU8sQ0FBQyxlQUFlLENBQUM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUssS0FBSyxTQUFTRCxTQUFTLENBQUM7RUFDNUJFLFdBQVdBLENBQUVDLE9BQU8sRUFBRTtJQUNwQixLQUFLLENBQUMsQ0FBQztJQUVQLElBQUksQ0FBQ0MsR0FBRyxHQUFHLElBQUlULFNBQVMsQ0FBQyxDQUFDO0lBRTFCLElBQUlRLE9BQU8sRUFBRTtNQUNYLElBQUlBLE9BQU8sQ0FBQ0UsRUFBRSxFQUFFO1FBQ2QsSUFBSSxDQUFDQSxFQUFFLENBQUNGLE9BQU8sQ0FBQ0UsRUFBRSxDQUFDO01BQ3JCO01BRUEsSUFBSUYsT0FBTyxDQUFDRyxHQUFHLEVBQUU7UUFDZixJQUFJLENBQUNBLEdBQUcsQ0FBQ0gsT0FBTyxDQUFDRyxHQUFHLENBQUM7TUFDdkI7TUFFQSxJQUFJSCxPQUFPLENBQUNJLEdBQUcsRUFBRTtRQUNmLElBQUksQ0FBQ0EsR0FBRyxDQUFDSixPQUFPLENBQUNJLEdBQUcsQ0FBQztNQUN2QjtNQUVBLElBQUlKLE9BQU8sQ0FBQ0ssSUFBSSxFQUFFO1FBQ2hCLElBQUksQ0FBQ0EsSUFBSSxDQUFDTCxPQUFPLENBQUNLLElBQUksQ0FBQztNQUN6QjtNQUVBLElBQUlMLE9BQU8sQ0FBQ00sa0JBQWtCLEtBQUssS0FBSyxFQUFFO1FBQ3hDLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7TUFDeEI7SUFDRjtFQUNGOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLFlBQVlBLENBQUVDLEdBQUcsRUFBRTtJQUNqQixNQUFNQyxPQUFPLEdBQUdELEdBQUcsQ0FBQ0UsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUN6QyxJQUFJRCxPQUFPLEVBQUU7TUFBQSxJQUFBRSxZQUFBO01BQ1gsTUFBTUMsR0FBRyxHQUFHLElBQUlDLEdBQUcsQ0FBQyxFQUFBRixZQUFBLEdBQUFILEdBQUcsQ0FBQ2IsT0FBTyxjQUFBZ0IsWUFBQSx1QkFBWEEsWUFBQSxDQUFhQyxHQUFHLEtBQUksRUFBRSxDQUFDO01BQzNDLElBQUksQ0FBQ1osR0FBRyxDQUFDYyxVQUFVLENBQUNMLE9BQU8sRUFBRUcsR0FBRyxDQUFDRyxRQUFRLEVBQUVILEdBQUcsQ0FBQ0ksUUFBUSxDQUFDO0lBQzFEO0VBQ0Y7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLGNBQWNBLENBQUVDLFFBQVEsRUFBRTtJQUN4QixNQUFNTixHQUFHLEdBQUcsSUFBSUMsR0FBRyxDQUFDSyxRQUFRLENBQUNOLEdBQUcsQ0FBQztJQUNqQyxNQUFNTyxNQUFNLEdBQUcsSUFBSTFCLGdCQUFnQixDQUNqQ21CLEdBQUcsQ0FBQ0csUUFBUSxFQUNaSCxHQUFHLENBQUNJLFFBQVEsRUFDWkosR0FBRyxDQUFDUSxRQUFRLEtBQUssUUFDbkIsQ0FBQztJQUNELE1BQU1YLE9BQU8sR0FBRyxJQUFJLENBQUNULEdBQUcsQ0FBQ3FCLFVBQVUsQ0FBQ0YsTUFBTSxDQUFDLENBQUNHLGFBQWEsQ0FBQyxDQUFDO0lBQzNESixRQUFRLENBQUNULE9BQU8sR0FBR0EsT0FBTztFQUM1QjtBQUNGO0FBRUEsS0FBSyxNQUFNYyxJQUFJLElBQUk3QixPQUFPLEVBQUU7RUFDMUIsTUFBTThCLE1BQU0sR0FBR0QsSUFBSSxDQUFDRSxXQUFXLENBQUMsQ0FBQztFQUNqQyxJQUFJRCxNQUFNLEtBQUssT0FBTyxFQUFFO0VBQ3hCM0IsS0FBSyxDQUFDNkIsU0FBUyxDQUFDSCxJQUFJLENBQUMsR0FBRyxVQUFVWCxHQUFHLEVBQUVlLEVBQUUsRUFBRTtJQUN6QyxNQUFNVCxRQUFRLEdBQUcsSUFBSXZCLE9BQU8sQ0FBQ2lDLE9BQU8sQ0FBQ0osTUFBTSxFQUFFWixHQUFHLENBQUM7SUFFakRNLFFBQVEsQ0FBQ1csRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUN0QixZQUFZLENBQUN1QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckRaLFFBQVEsQ0FBQ1csRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUN0QixZQUFZLENBQUN1QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckRaLFFBQVEsQ0FBQ1csRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUNaLGNBQWMsQ0FBQ2EsSUFBSSxDQUFDLElBQUksRUFBRVosUUFBUSxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDYSxZQUFZLENBQUNiLFFBQVEsQ0FBQztJQUMzQixJQUFJLENBQUNELGNBQWMsQ0FBQ0MsUUFBUSxDQUFDO0lBRTdCLElBQUlTLEVBQUUsRUFBRTtNQUNOVCxRQUFRLENBQUNjLEdBQUcsQ0FBQ0wsRUFBRSxDQUFDO0lBQ2xCO0lBRUEsT0FBT1QsUUFBUTtFQUNqQixDQUFDO0FBQ0g7QUFFQXJCLEtBQUssQ0FBQzZCLFNBQVMsQ0FBQ08sR0FBRyxHQUFHcEMsS0FBSyxDQUFDNkIsU0FBUyxDQUFDUSxNQUFNOztBQUU1QztBQUNBO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLElBQUlDLEtBQUssQ0FBQ3ZDLEtBQUssRUFBRTtFQUNsQ3dDLEtBQUtBLENBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUU7SUFDckMsT0FBTyxJQUFJRixNQUFNLENBQUMsR0FBR0UsYUFBYSxDQUFDO0VBQ3JDO0FBQ0YsQ0FBQyxDQUFDO0FBRUZDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHUCxVQUFVIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst qs = require('qs');\nmodule.exports = (res, fn) => {\n res.text = '';\n res.setEncoding('ascii');\n res.on('data', chunk => {\n res.text += chunk;\n });\n res.on('end', () => {\n try {\n fn(null, qs.parse(res.text));\n } catch (err) {\n fn(err);\n }\n });\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJxcyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIiwicGFyc2UiLCJlcnIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZS9wYXJzZXJzL3VybGVuY29kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHFzID0gcmVxdWlyZSgncXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAocmVzLCBmbikgPT4ge1xuICByZXMudGV4dCA9ICcnO1xuICByZXMuc2V0RW5jb2RpbmcoJ2FzY2lpJyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKG51bGwsIHFzLnBhcnNlKHJlcy50ZXh0KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbihlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxFQUFFLEdBQUdDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFFeEJDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLENBQUNDLEdBQUcsRUFBRUMsRUFBRSxLQUFLO0VBQzVCRCxHQUFHLENBQUNFLElBQUksR0FBRyxFQUFFO0VBQ2JGLEdBQUcsQ0FBQ0csV0FBVyxDQUFDLE9BQU8sQ0FBQztFQUN4QkgsR0FBRyxDQUFDSSxFQUFFLENBQUMsTUFBTSxFQUFHQyxLQUFLLElBQUs7SUFDeEJMLEdBQUcsQ0FBQ0UsSUFBSSxJQUFJRyxLQUFLO0VBQ25CLENBQUMsQ0FBQztFQUNGTCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTTtJQUNsQixJQUFJO01BQ0ZILEVBQUUsQ0FBQyxJQUFJLEVBQUVMLEVBQUUsQ0FBQ1UsS0FBSyxDQUFDTixHQUFHLENBQUNFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQyxPQUFPSyxHQUFHLEVBQUU7TUFDWk4sRUFBRSxDQUFDTSxHQUFHLENBQUM7SUFDVDtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=","\"use strict\";\n\nmodule.exports = function (res, fn) {\n res.text = '';\n res.setEncoding('utf8');\n res.on('data', chunk => {\n res.text += chunk;\n });\n res.on('end', () => {\n let body;\n let error;\n try {\n body = res.text && JSON.parse(res.text);\n } catch (err) {\n error = err;\n // issue #675: return the raw response if the response parsing fails\n error.rawResponse = res.text || null;\n // issue #876: return the http status code if the response parsing fails\n error.statusCode = res.statusCode;\n } finally {\n fn(error, body);\n }\n });\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIiwiYm9keSIsImVycm9yIiwiSlNPTiIsInBhcnNlIiwiZXJyIiwicmF3UmVzcG9uc2UiLCJzdGF0dXNDb2RlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25vZGUvcGFyc2Vycy9qc29uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcywgZm4pIHtcbiAgcmVzLnRleHQgPSAnJztcbiAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgbGV0IGJvZHk7XG4gICAgbGV0IGVycm9yO1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gcmVzLnRleHQgJiYgSlNPTi5wYXJzZShyZXMudGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVycjtcbiAgICAgIC8vIGlzc3VlICM2NzU6IHJldHVybiB0aGUgcmF3IHJlc3BvbnNlIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICBlcnJvci5yYXdSZXNwb25zZSA9IHJlcy50ZXh0IHx8IG51bGw7XG4gICAgICAvLyBpc3N1ZSAjODc2OiByZXR1cm4gdGhlIGh0dHAgc3RhdHVzIGNvZGUgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSByZXMuc3RhdHVzQ29kZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZm4oZXJyb3IsIGJvZHkpO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFVQyxHQUFHLEVBQUVDLEVBQUUsRUFBRTtFQUNsQ0QsR0FBRyxDQUFDRSxJQUFJLEdBQUcsRUFBRTtFQUNiRixHQUFHLENBQUNHLFdBQVcsQ0FBQyxNQUFNLENBQUM7RUFDdkJILEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLE1BQU0sRUFBR0MsS0FBSyxJQUFLO0lBQ3hCTCxHQUFHLENBQUNFLElBQUksSUFBSUcsS0FBSztFQUNuQixDQUFDLENBQUM7RUFDRkwsR0FBRyxDQUFDSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDbEIsSUFBSUUsSUFBSTtJQUNSLElBQUlDLEtBQUs7SUFDVCxJQUFJO01BQ0ZELElBQUksR0FBR04sR0FBRyxDQUFDRSxJQUFJLElBQUlNLElBQUksQ0FBQ0MsS0FBSyxDQUFDVCxHQUFHLENBQUNFLElBQUksQ0FBQztJQUN6QyxDQUFDLENBQUMsT0FBT1EsR0FBRyxFQUFFO01BQ1pILEtBQUssR0FBR0csR0FBRztNQUNYO01BQ0FILEtBQUssQ0FBQ0ksV0FBVyxHQUFHWCxHQUFHLENBQUNFLElBQUksSUFBSSxJQUFJO01BQ3BDO01BQ0FLLEtBQUssQ0FBQ0ssVUFBVSxHQUFHWixHQUFHLENBQUNZLFVBQVU7SUFDbkMsQ0FBQyxTQUFTO01BQ1JYLEVBQUUsQ0FBQ00sS0FBSyxFQUFFRCxJQUFJLENBQUM7SUFDakI7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\nmodule.exports = (res, fn) => {\n res.text = '';\n res.setEncoding('utf8');\n res.on('data', chunk => {\n res.text += chunk;\n });\n res.on('end', fn);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25vZGUvcGFyc2Vycy90ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gKHJlcywgZm4pID0+IHtcbiAgcmVzLnRleHQgPSAnJztcbiAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCBmbik7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxDQUFDQyxHQUFHLEVBQUVDLEVBQUUsS0FBSztFQUM1QkQsR0FBRyxDQUFDRSxJQUFJLEdBQUcsRUFBRTtFQUNiRixHQUFHLENBQUNHLFdBQVcsQ0FBQyxNQUFNLENBQUM7RUFDdkJILEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLE1BQU0sRUFBR0MsS0FBSyxJQUFLO0lBQ3hCTCxHQUFHLENBQUNFLElBQUksSUFBSUcsS0FBSztFQUNuQixDQUFDLENBQUM7RUFDRkwsR0FBRyxDQUFDSSxFQUFFLENBQUMsS0FBSyxFQUFFSCxFQUFFLENBQUM7QUFDbkIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==","\"use strict\";\n\nmodule.exports = (res, fn) => {\n const data = []; // Binary data needs binary storage\n\n res.on('data', chunk => {\n data.push(chunk);\n });\n res.on('end', () => {\n fn(null, Buffer.concat(data));\n });\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJkYXRhIiwib24iLCJjaHVuayIsInB1c2giLCJCdWZmZXIiLCJjb25jYXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZS9wYXJzZXJzL2ltYWdlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gKHJlcywgZm4pID0+IHtcbiAgY29uc3QgZGF0YSA9IFtdOyAvLyBCaW5hcnkgZGF0YSBuZWVkcyBiaW5hcnkgc3RvcmFnZVxuXG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGRhdGEucHVzaChjaHVuayk7XG4gIH0pO1xuICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICBmbihudWxsLCBCdWZmZXIuY29uY2F0KGRhdGEpKTtcbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxDQUFDQyxHQUFHLEVBQUVDLEVBQUUsS0FBSztFQUM1QixNQUFNQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7O0VBRWpCRixHQUFHLENBQUNHLEVBQUUsQ0FBQyxNQUFNLEVBQUdDLEtBQUssSUFBSztJQUN4QkYsSUFBSSxDQUFDRyxJQUFJLENBQUNELEtBQUssQ0FBQztFQUNsQixDQUFDLENBQUM7RUFDRkosR0FBRyxDQUFDRyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDbEJGLEVBQUUsQ0FBQyxJQUFJLEVBQUVLLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxJQUFJLENBQUMsQ0FBQztFQUMvQixDQUFDLENBQUM7QUFDSixDQUFDIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\nexports['application/x-www-form-urlencoded'] = require('./urlencoded');\nexports['application/json'] = require('./json');\nexports.text = require('./text');\nexports['application/json-seq'] = exports.text;\nconst binary = require('./image');\nexports['application/octet-stream'] = binary;\nexports['application/pdf'] = binary;\nexports.image = binary;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwicmVxdWlyZSIsInRleHQiLCJiaW5hcnkiLCJpbWFnZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3BhcnNlcnMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0c1snYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ10gPSByZXF1aXJlKCcuL3VybGVuY29kZWQnKTtcbmV4cG9ydHNbJ2FwcGxpY2F0aW9uL2pzb24nXSA9IHJlcXVpcmUoJy4vanNvbicpO1xuZXhwb3J0cy50ZXh0ID0gcmVxdWlyZSgnLi90ZXh0Jyk7XG5cbmV4cG9ydHNbJ2FwcGxpY2F0aW9uL2pzb24tc2VxJ10gPSBleHBvcnRzLnRleHQ7XG5cbmNvbnN0IGJpbmFyeSA9IHJlcXVpcmUoJy4vaW1hZ2UnKTtcblxuZXhwb3J0c1snYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ10gPSBiaW5hcnk7XG5leHBvcnRzWydhcHBsaWNhdGlvbi9wZGYnXSA9IGJpbmFyeTtcbmV4cG9ydHMuaW1hZ2UgPSBiaW5hcnk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUFBLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxHQUFHQyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ3RFRCxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBR0MsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUMvQ0QsT0FBTyxDQUFDRSxJQUFJLEdBQUdELE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFFaENELE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHQSxPQUFPLENBQUNFLElBQUk7QUFFOUMsTUFBTUMsTUFBTSxHQUFHRixPQUFPLENBQUMsU0FBUyxDQUFDO0FBRWpDRCxPQUFPLENBQUMsMEJBQTBCLENBQUMsR0FBR0csTUFBTTtBQUM1Q0gsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUdHLE1BQU07QUFDbkNILE9BQU8sQ0FBQ0ksS0FBSyxHQUFHRCxNQUFNIiwiaWdub3JlTGlzdCI6W119","\"use strict\";\n\n/**\n * Module dependencies.\n */\n\nconst {\n format\n} = require('url');\nconst Stream = require('stream');\nconst https = require('https');\nconst http = require('http');\nconst fs = require('fs');\nconst zlib = require('zlib');\nconst util = require('util');\nconst qs = require('qs');\nconst mime = require('mime');\nlet methods = require('methods');\nconst FormData = require('form-data');\nconst formidable = require('formidable');\nconst debug = require('debug')('superagent');\nconst CookieJar = require('cookiejar');\nconst safeStringify = require('fast-safe-stringify');\nconst utils = require('../utils');\nconst RequestBase = require('../request-base');\nconst http2 = require('./http2wrapper');\nconst {\n decompress\n} = require('./unzip');\nconst Response = require('./response');\nconst {\n mixin,\n hasOwn,\n isBrotliEncoding,\n isGzipOrDeflateEncoding\n} = utils;\nconst {\n chooseDecompresser\n} = require('./decompress');\nfunction request(method, url) {\n // callback\n if (typeof url === 'function') {\n return new exports.Request('GET', method).end(url);\n }\n\n // url first\n if (arguments.length === 1) {\n return new exports.Request('GET', method);\n }\n return new exports.Request(method, url);\n}\nmodule.exports = request;\nexports = module.exports;\n\n/**\n * Expose `Request`.\n */\n\nexports.Request = Request;\n\n/**\n * Expose the agent function\n */\n\nexports.agent = require('./agent');\n\n/**\n * Noop.\n */\n\nfunction noop() {}\n\n/**\n * Expose `Response`.\n */\n\nexports.Response = Response;\n\n/**\n * Define \"form\" mime type.\n */\n\nmime.define({\n 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data']\n}, true);\n\n/**\n * Protocol map.\n */\n\nexports.protocols = {\n 'http:': http,\n 'https:': https,\n 'http2:': http2\n};\n\n/**\n * Default serialization map.\n *\n * superagent.serialize['application/xml'] = function(obj){\n * return 'generated xml here';\n * };\n *\n */\n\nexports.serialize = {\n 'application/x-www-form-urlencoded': obj => {\n return qs.stringify(obj, {\n indices: false,\n strictNullHandling: true\n });\n },\n 'application/json': safeStringify\n};\n\n/**\n * Default parsers.\n *\n * superagent.parse['application/xml'] = function(res, fn){\n * fn(null, res);\n * };\n *\n */\n\nexports.parse = require('./parsers');\n\n/**\n * Default buffering map. Can be used to set certain\n * response types to buffer/not buffer.\n *\n * superagent.buffer['application/xml'] = true;\n */\nexports.buffer = {};\n\n/**\n * Initialize internal header tracking properties on a request instance.\n *\n * @param {Object} req the instance\n * @api private\n */\nfunction _initHeaders(request_) {\n request_._header = {\n // coerces header names to lowercase\n };\n request_.header = {\n // preserves header name case\n };\n}\n\n/**\n * Initialize a new `Request` with the given `method` and `url`.\n *\n * @param {String} method\n * @param {String|Object} url\n * @api public\n */\n\nfunction Request(method, url) {\n Stream.call(this);\n if (typeof url !== 'string') url = format(url);\n this._enableHttp2 = Boolean(process.env.HTTP2_TEST); // internal only\n this._agent = false;\n this._formData = null;\n this.method = method;\n this.url = url;\n _initHeaders(this);\n this.writable = true;\n this._redirects = 0;\n this.redirects(method === 'HEAD' ? 0 : 5);\n this.cookies = '';\n this.qs = {};\n this._query = [];\n this.qsRaw = this._query; // Unused, for backwards compatibility only\n this._redirectList = [];\n this._streamRequest = false;\n this._lookup = undefined;\n this.once('end', this.clearTimeout.bind(this));\n}\n\n/**\n * Inherit from `Stream` (which inherits from `EventEmitter`).\n * Mixin `RequestBase`.\n */\nutil.inherits(Request, Stream);\nmixin(Request.prototype, RequestBase.prototype);\n\n/**\n * Enable or Disable http2.\n *\n * Enable http2.\n *\n * ``` js\n * request.get('http://localhost/')\n * .http2()\n * .end(callback);\n *\n * request.get('http://localhost/')\n * .http2(true)\n * .end(callback);\n * ```\n *\n * Disable http2.\n *\n * ``` js\n * request = request.http2();\n * request.get('http://localhost/')\n * .http2(false)\n * .end(callback);\n * ```\n *\n * @param {Boolean} enable\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.http2 = function (bool) {\n if (exports.protocols['http2:'] === undefined) {\n throw new Error('superagent: this version of Node.js does not support http2');\n }\n this._enableHttp2 = bool === undefined ? true : bool;\n return this;\n};\n\n/**\n * Queue the given `file` as an attachment to the specified `field`,\n * with optional `options` (or filename).\n *\n * ``` js\n * request.post('http://localhost/upload')\n * .attach('field', Buffer.from('<b>Hello world</b>'), 'hello.html')\n * .end(callback);\n * ```\n *\n * A filename may also be used:\n *\n * ``` js\n * request.post('http://localhost/upload')\n * .attach('files', 'image.jpg')\n * .end(callback);\n * ```\n *\n * @param {String} field\n * @param {String|fs.ReadStream|Buffer} file\n * @param {String|Object} options\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.attach = function (field, file, options) {\n if (file) {\n if (this._data) {\n throw new Error(\"superagent can't mix .send() and .attach()\");\n }\n let o = options || {};\n if (typeof options === 'string') {\n o = {\n filename: options\n };\n }\n if (typeof file === 'string') {\n if (!o.filename) o.filename = file;\n debug('creating `fs.ReadStream` instance for file: %s', file);\n file = fs.createReadStream(file);\n file.on('error', error => {\n const formData = this._getFormData();\n formData.emit('error', error);\n });\n } else if (!o.filename && file.path) {\n o.filename = file.path;\n }\n this._getFormData().append(field, file, o);\n }\n return this;\n};\nRequest.prototype._getFormData = function () {\n if (!this._formData) {\n this._formData = new FormData();\n this._formData.on('error', error => {\n debug('FormData error', error);\n if (this.called) {\n // The request has already finished and the callback was called.\n // Silently ignore the error.\n return;\n }\n this.callback(error);\n this.abort();\n });\n }\n return this._formData;\n};\n\n/**\n * Gets/sets the `Agent` to use for this HTTP request. The default (if this\n * function is not called) is to opt out of connection pooling (`agent: false`).\n *\n * @param {http.Agent} agent\n * @return {http.Agent}\n * @api public\n */\n\nRequest.prototype.agent = function (agent) {\n if (arguments.length === 0) return this._agent;\n this._agent = agent;\n return this;\n};\n\n/**\n * Gets/sets the `lookup` function to use custom DNS resolver.\n *\n * @param {Function} lookup\n * @return {Function}\n * @api public\n */\n\nRequest.prototype.lookup = function (lookup) {\n if (arguments.length === 0) return this._lookup;\n this._lookup = lookup;\n return this;\n};\n\n/**\n * Set _Content-Type_ response header passed through `mime.getType()`.\n *\n * Examples:\n *\n * request.post('/')\n * .type('xml')\n * .send(xmlstring)\n * .end(callback);\n *\n * request.post('/')\n * .type('json')\n * .send(jsonstring)\n * .end(callback);\n *\n * request.post('/')\n * .type('application/json')\n * .send(jsonstring)\n * .end(callback);\n *\n * @param {String} type\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.type = function (type) {\n return this.set('Content-Type', type.includes('/') ? type : mime.getType(type));\n};\n\n/**\n * Set _Accept_ response header passed through `mime.getType()`.\n *\n * Examples:\n *\n * superagent.types.json = 'application/json';\n *\n * request.get('/agent')\n * .accept('json')\n * .end(callback);\n *\n * request.get('/agent')\n * .accept('application/json')\n * .end(callback);\n *\n * @param {String} accept\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.accept = function (type) {\n return this.set('Accept', type.includes('/') ? type : mime.getType(type));\n};\n\n/**\n * Add query-string `val`.\n *\n * Examples:\n *\n * request.get('/shoes')\n * .query('size=10')\n * .query({ color: 'blue' })\n *\n * @param {Object|String} val\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.query = function (value) {\n if (typeof value === 'string') {\n this._query.push(value);\n } else {\n Object.assign(this.qs, value);\n }\n return this;\n};\n\n/**\n * Write raw `data` / `encoding` to the socket.\n *\n * @param {Buffer|String} data\n * @param {String} encoding\n * @return {Boolean}\n * @api public\n */\n\nRequest.prototype.write = function (data, encoding) {\n const request_ = this.request();\n if (!this._streamRequest) {\n this._streamRequest = true;\n }\n return request_.write(data, encoding);\n};\n\n/**\n * Pipe the request body to `stream`.\n *\n * @param {Stream} stream\n * @param {Object} options\n * @return {Stream}\n * @api public\n */\n\nRequest.prototype.pipe = function (stream, options) {\n this.piped = true; // HACK...\n this.buffer(false);\n this.end();\n return this._pipeContinue(stream, options);\n};\nRequest.prototype._pipeContinue = function (stream, options) {\n this.req.once('response', res => {\n // redirect\n if (isRedirect(res.statusCode) && this._redirects++ !== this._maxRedirects) {\n return this._redirect(res) === this ? this._pipeContinue(stream, options) : undefined;\n }\n this.res = res;\n this._emitResponse();\n if (this._aborted) return;\n if (this._shouldDecompress(res)) {\n let decompresser = chooseDecompresser(res);\n decompresser.on('error', error => {\n if (error && error.code === 'Z_BUF_ERROR') {\n // unexpected end of file is ignored by browsers and curl\n stream.emit('end');\n return;\n }\n stream.emit('error', error);\n });\n res.pipe(decompresser).pipe(stream, options);\n // don't emit 'end' until decompresser has completed writing all its data.\n decompresser.once('end', () => this.emit('end'));\n } else {\n res.pipe(stream, options);\n res.once('end', () => this.emit('end'));\n }\n });\n return stream;\n};\n\n/**\n * Enable / disable buffering.\n *\n * @return {Boolean} [val]\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.buffer = function (value) {\n this._buffer = value !== false;\n return this;\n};\n\n/**\n * Redirect to `url\n *\n * @param {IncomingMessage} res\n * @return {Request} for chaining\n * @api private\n */\n\nRequest.prototype._redirect = function (res) {\n let url = res.headers.location;\n if (!url) {\n return this.callback(new Error('No location header for redirect'), res);\n }\n debug('redirect %s -> %s', this.url, url);\n\n // location\n url = new URL(url, this.url).href;\n\n // ensure the response is being consumed\n // this is required for Node v0.10+\n res.resume();\n let headers = this.req.getHeaders ? this.req.getHeaders() : this.req._headers;\n const changesOrigin = new URL(url).host !== new URL(this.url).host;\n\n // implementation of 302 following defacto standard\n if (res.statusCode === 301 || res.statusCode === 302) {\n // strip Content-* related fields\n // in case of POST etc\n headers = utils.cleanHeader(headers, changesOrigin);\n\n // force GET\n this.method = this.method === 'HEAD' ? 'HEAD' : 'GET';\n\n // clear data\n this._data = null;\n }\n\n // 303 is always GET\n if (res.statusCode === 303) {\n // strip Content-* related fields\n // in case of POST etc\n headers = utils.cleanHeader(headers, changesOrigin);\n\n // force method\n this.method = 'GET';\n\n // clear data\n this._data = null;\n }\n\n // 307 preserves method\n // 308 preserves method\n delete headers.host;\n delete this.req;\n delete this._formData;\n\n // remove all add header except User-Agent\n _initHeaders(this);\n\n // redirect\n this.res = res;\n this._endCalled = false;\n this.url = url;\n this.qs = {};\n this._query.length = 0;\n this.set(headers);\n this._emitRedirect();\n this._redirectList.push(this.url);\n this.end(this._callback);\n return this;\n};\n\n/**\n * Set Authorization field value with `user` and `pass`.\n *\n * Examples:\n *\n * .auth('tobi', 'learnboost')\n * .auth('tobi:learnboost')\n * .auth('tobi')\n * .auth(accessToken, { type: 'bearer' })\n *\n * @param {String} user\n * @param {String} [pass]\n * @param {Object} [options] options with authorization type 'basic' or 'bearer' ('basic' is default)\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.auth = function (user, pass, options) {\n if (arguments.length === 1) pass = '';\n if (typeof pass === 'object' && pass !== null) {\n // pass is optional and can be replaced with options\n options = pass;\n pass = '';\n }\n if (!options) {\n options = {\n type: 'basic'\n };\n }\n const encoder = string => Buffer.from(string).toString('base64');\n return this._auth(user, pass, options, encoder);\n};\n\n/**\n * Set the certificate authority option for https request.\n *\n * @param {Buffer | Array} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.ca = function (cert) {\n this._ca = cert;\n return this;\n};\n\n/**\n * Set the client certificate key option for https request.\n *\n * @param {Buffer | String} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.key = function (cert) {\n this._key = cert;\n return this;\n};\n\n/**\n * Set the key, certificate, and CA certs of the client in PFX or PKCS12 format.\n *\n * @param {Buffer | String} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.pfx = function (cert) {\n if (typeof cert === 'object' && !Buffer.isBuffer(cert)) {\n this._pfx = cert.pfx;\n this._passphrase = cert.passphrase;\n } else {\n this._pfx = cert;\n }\n return this;\n};\n\n/**\n * Set the client certificate option for https request.\n *\n * @param {Buffer | String} cert\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.cert = function (cert) {\n this._cert = cert;\n return this;\n};\n\n/**\n * Do not reject expired or invalid TLS certs.\n * sets `rejectUnauthorized=true`. Be warned that this allows MITM attacks.\n *\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype.disableTLSCerts = function () {\n this._disableTLSCerts = true;\n return this;\n};\n\n/**\n * Return an http[s] request.\n *\n * @return {OutgoingMessage}\n * @api private\n */\n\n// eslint-disable-next-line complexity\nRequest.prototype.request = function () {\n if (this.req) return this.req;\n const options = {};\n try {\n const query = qs.stringify(this.qs, {\n indices: false,\n strictNullHandling: true\n });\n if (query) {\n this.qs = {};\n this._query.push(query);\n }\n this._finalizeQueryString();\n } catch (err) {\n return this.emit('error', err);\n }\n let {\n url: urlString\n } = this;\n const retries = this._retries;\n\n // default to http://\n if (urlString.indexOf('http') !== 0) urlString = `http://${urlString}`;\n const url = new URL(urlString);\n let {\n protocol\n } = url;\n let path = `${url.pathname}${url.search}`;\n\n // support unix sockets\n if (/^https?\\+unix:/.test(protocol) === true) {\n // get the protocol\n protocol = `${protocol.split('+')[0]}:`;\n\n // get the socket path\n options.socketPath = url.hostname.replace(/%2F/g, '/');\n url.host = '';\n url.hostname = '';\n }\n\n // Override IP address of a hostname\n if (this._connectOverride) {\n const {\n hostname\n } = url;\n const match = hostname in this._connectOverride ? this._connectOverride[hostname] : this._connectOverride['*'];\n if (match) {\n // backup the real host\n if (!this._header.host) {\n this.set('host', url.host);\n }\n let newHost;\n let newPort;\n if (typeof match === 'object') {\n newHost = match.host;\n newPort = match.port;\n } else {\n newHost = match;\n newPort = url.port;\n }\n\n // wrap [ipv6]\n url.host = /:/.test(newHost) ? `[${newHost}]` : newHost;\n if (newPort) {\n url.host += `:${newPort}`;\n url.port = newPort;\n }\n url.hostname = newHost;\n }\n }\n\n // options\n options.method = this.method;\n options.port = url.port;\n options.path = path;\n options.host = utils.normalizeHostname(url.hostname); // ex: [::1] -> ::1\n options.ca = this._ca;\n options.key = this._key;\n options.pfx = this._pfx;\n options.cert = this._cert;\n options.passphrase = this._passphrase;\n options.agent = this._agent;\n options.lookup = this._lookup;\n options.rejectUnauthorized = typeof this._disableTLSCerts === 'boolean' ? !this._disableTLSCerts : process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0';\n\n // Allows request.get('https://1.2.3.4/').set('Host', 'example.com')\n if (this._header.host) {\n options.servername = this._header.host.replace(/:\\d+$/, '');\n }\n if (this._trustLocalhost && /^(?:localhost|127\\.0\\.0\\.\\d+|(0*:)+:0*1)$/.test(url.hostname)) {\n options.rejectUnauthorized = false;\n }\n\n // initiate request\n const module_ = this._enableHttp2 ? exports.protocols['http2:'].setProtocol(protocol) : exports.protocols[protocol];\n\n // request\n this.req = module_.request(options);\n const {\n req\n } = this;\n\n // set tcp no delay\n req.setNoDelay(true);\n if (options.method !== 'HEAD') {\n req.setHeader('Accept-Encoding', 'gzip, deflate');\n }\n this.protocol = protocol;\n this.host = url.host;\n\n // expose events\n req.once('drain', () => {\n this.emit('drain');\n });\n req.on('error', error => {\n // flag abortion here for out timeouts\n // because node will emit a faux-error \"socket hang up\"\n // when request is aborted before a connection is made\n if (this._aborted) return;\n // if not the same, we are in the **old** (cancelled) request,\n // so need to continue (same as for above)\n if (this._retries !== retries) return;\n // if we've received a response then we don't want to let\n // an error in the request blow up the response\n if (this.response) return;\n this.callback(error);\n });\n\n // auth\n if (url.username || url.password) {\n this.auth(url.username, url.password);\n }\n if (this.username && this.password) {\n this.auth(this.username, this.password);\n }\n for (const key in this.header) {\n if (hasOwn(this.header, key)) req.setHeader(key, this.header[key]);\n }\n\n // add cookies\n if (this.cookies) {\n if (hasOwn(this._header, 'cookie')) {\n // merge\n const temporaryJar = new CookieJar.CookieJar();\n temporaryJar.setCookies(this._header.cookie.split('; '));\n temporaryJar.setCookies(this.cookies.split('; '));\n req.setHeader('Cookie', temporaryJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString());\n } else {\n req.setHeader('Cookie', this.cookies);\n }\n }\n return req;\n};\n\n/**\n * Invoke the callback with `err` and `res`\n * and handle arity check.\n *\n * @param {Error} err\n * @param {Response} res\n * @api private\n */\n\nRequest.prototype.callback = function (error, res) {\n if (this._shouldRetry(error, res)) {\n return this._retry();\n }\n\n // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime.\n const fn = this._callback || noop;\n this.clearTimeout();\n if (this.called) return console.warn('superagent: double callback bug');\n this.called = true;\n if (!error) {\n try {\n if (!this._isResponseOK(res)) {\n let message = 'Unsuccessful HTTP response';\n if (res) {\n message = http.STATUS_CODES[res.status] || message;\n }\n error = new Error(message);\n error.status = res ? res.status : undefined;\n }\n } catch (err) {\n error = err;\n error.status = error.status || (res ? res.status : undefined);\n }\n }\n\n // It's important that the callback is called outside try/catch\n // to avoid double callback\n if (!error) {\n return fn(null, res);\n }\n error.response = res;\n if (this._maxRetries) error.retries = this._retries - 1;\n\n // only emit error event if there is a listener\n // otherwise we assume the callback to `.end()` will get the error\n if (error && this.listeners('error').length > 0) {\n this.emit('error', error);\n }\n fn(error, res);\n};\n\n/**\n * Check if `obj` is a host object,\n *\n * @param {Object} obj host object\n * @return {Boolean} is a host object\n * @api private\n */\nRequest.prototype._isHost = function (object) {\n return Buffer.isBuffer(object) || object instanceof Stream || object instanceof FormData;\n};\n\n/**\n * Initiate request, invoking callback `fn(err, res)`\n * with an instanceof `Response`.\n *\n * @param {Function} fn\n * @return {Request} for chaining\n * @api public\n */\n\nRequest.prototype._emitResponse = function (body, files) {\n const response = new Response(this);\n this.response = response;\n response.redirects = this._redirectList;\n if (undefined !== body) {\n response.body = body;\n }\n response.files = files;\n if (this._endCalled) {\n response.pipe = function () {\n throw new Error(\"end() has already been called, so it's too late to start piping\");\n };\n }\n this.emit('response', response);\n return response;\n};\n\n/**\n * Emit `redirect` event, passing an instanceof `Response`.\n *\n * @api private\n */\n\nRequest.prototype._emitRedirect = function () {\n const response = new Response(this);\n response.redirects = this._redirectList;\n this.emit('redirect', response);\n};\nRequest.prototype.end = function (fn) {\n this.request();\n debug('%s %s', this.method, this.url);\n if (this._endCalled) {\n throw new Error('.end() was called twice. This is not supported in superagent');\n }\n this._endCalled = true;\n\n // store callback\n this._callback = fn || noop;\n this._end();\n};\nRequest.prototype._end = function () {\n if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called'));\n let data = this._data;\n const {\n req\n } = this;\n const {\n method\n } = this;\n this._setTimeouts();\n\n // body\n if (method !== 'HEAD' && !req._headerSent) {\n // serialize stuff\n if (typeof data !== 'string') {\n let contentType = req.getHeader('Content-Type');\n // Parse out just the content type from the header (ignore the charset)\n if (contentType) contentType = contentType.split(';')[0];\n let serialize = this._serializer || exports.serialize[contentType];\n if (!serialize && isJSON(contentType)) {\n serialize = exports.serialize['application/json'];\n }\n if (serialize) data = serialize(data);\n }\n\n // content-length\n if (data && !req.getHeader('Content-Length')) {\n req.setHeader('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data));\n }\n }\n\n // response\n // eslint-disable-next-line complexity\n req.once('response', res => {\n debug('%s %s -> %s', this.method, this.url, res.statusCode);\n if (this._responseTimeoutTimer) {\n clearTimeout(this._responseTimeoutTimer);\n }\n if (this.piped) {\n return;\n }\n const max = this._maxRedirects;\n const mime = utils.type(res.headers['content-type'] || '') || 'text/plain';\n let type = mime.split('/')[0];\n if (type) type = type.toLowerCase().trim();\n const multipart = type === 'multipart';\n const redirect = isRedirect(res.statusCode);\n const responseType = this._responseType;\n this.res = res;\n\n // redirect\n if (redirect && this._redirects++ !== max) {\n return this._redirect(res);\n }\n if (this.method === 'HEAD') {\n this.emit('end');\n this.callback(null, this._emitResponse());\n return;\n }\n\n // zlib support\n if (this._shouldDecompress(res)) {\n decompress(req, res);\n }\n let buffer = this._buffer;\n if (buffer === undefined && mime in exports.buffer) {\n buffer = Boolean(exports.buffer[mime]);\n }\n let parser = this._parser;\n if (undefined === buffer && parser) {\n console.warn(\"A custom superagent parser has been set, but buffering strategy for the parser hasn't been configured. Call `req.buffer(true or false)` or set `superagent.buffer[mime] = true or false`\");\n buffer = true;\n }\n if (!parser) {\n if (responseType) {\n parser = exports.parse.image; // It's actually a generic Buffer\n buffer = true;\n } else if (multipart) {\n const form = formidable.formidable();\n parser = (res, callback) => {\n // Create a PassThrough stream that acts as a proper HTTP request\n const bridgeStream = new Stream.PassThrough();\n\n // Add HTTP request properties from the current request context\n bridgeStream.method = this.method || 'POST';\n bridgeStream.url = this.url || '/';\n bridgeStream.httpVersion = res.httpVersion || '1.1';\n bridgeStream.headers = res.headers || {};\n bridgeStream.socket = res.socket || {\n readable: true\n };\n\n // Pipe the response data through the bridge stream\n res.pipe(bridgeStream);\n form.parse(bridgeStream, (err, fields, files) => {\n if (err) return callback(err);\n\n // Formidable v3 always returns arrays, but SuperAgent expects single values\n // Flatten single-item arrays to maintain backward compatibility\n const flattenedFields = {};\n if (fields) {\n for (const key in fields) {\n const value = fields[key];\n flattenedFields[key] = Array.isArray(value) && value.length === 1 ? value[0] : value;\n }\n }\n const flattenedFiles = {};\n if (files) {\n for (const key in files) {\n const value = files[key];\n flattenedFiles[key] = Array.isArray(value) && value.length === 1 ? value[0] : value;\n }\n }\n\n // Return flattened fields as the object parameter to match SuperAgent's expected format\n callback(null, flattenedFields, flattenedFiles);\n });\n };\n buffer = true;\n } else if (isBinary(mime)) {\n parser = exports.parse.image;\n buffer = true; // For backwards-compatibility buffering default is ad-hoc MIME-dependent\n } else if (exports.parse[mime]) {\n parser = exports.parse[mime];\n } else if (type === 'text') {\n parser = exports.parse.text;\n buffer = buffer !== false;\n // everyone wants their own white-labeled json\n } else if (isJSON(mime)) {\n parser = exports.parse['application/json'];\n buffer = buffer !== false;\n } else if (buffer) {\n parser = exports.parse.text;\n } else if (undefined === buffer) {\n parser = exports.parse.image; // It's actually a generic Buffer\n buffer = true;\n }\n }\n\n // by default only buffer text/*, json and messed up thing from hell\n if (undefined === buffer && isText(mime) || isJSON(mime)) {\n buffer = true;\n }\n this._resBuffered = buffer;\n let parserHandlesEnd = false;\n if (buffer) {\n // Protectiona against zip bombs and other nuisance\n let responseBytesLeft = this._maxResponseSize || 200000000;\n res.on('data', buf => {\n responseBytesLeft -= buf.byteLength || buf.length > 0 ? buf.length : 0;\n if (responseBytesLeft < 0) {\n // This will propagate through error event\n const error = new Error('Maximum response size reached');\n error.code = 'ETOOLARGE';\n // Parsers aren't required to observe error event,\n // so would incorrectly report success\n parserHandlesEnd = false;\n // Will not emit error event\n res.destroy(error);\n // so we do callback now\n this.callback(error, null);\n }\n });\n }\n if (parser) {\n try {\n // Unbuffered parsers are supposed to emit response early,\n // which is weird BTW, because response.body won't be there.\n parserHandlesEnd = buffer;\n parser(res, (error, object, files) => {\n if (this.timedout) {\n // Timeout has already handled all callbacks\n return;\n }\n\n // Intentional (non-timeout) abort is supposed to preserve partial response,\n // even if it doesn't parse.\n if (error && !this._aborted) {\n return this.callback(error);\n }\n if (parserHandlesEnd) {\n this.emit('end');\n this.callback(null, this._emitResponse(object, files));\n }\n });\n } catch (err) {\n this.callback(err);\n return;\n }\n }\n this.res = res;\n\n // unbuffered\n if (!buffer) {\n debug('unbuffered %s %s', this.method, this.url);\n this.callback(null, this._emitResponse());\n if (multipart) return; // allow multipart to handle end event\n res.once('end', () => {\n debug('end %s %s', this.method, this.url);\n this.emit('end');\n });\n return;\n }\n\n // terminating events\n res.once('error', error => {\n parserHandlesEnd = false;\n this.callback(error, null);\n });\n if (!parserHandlesEnd) res.once('end', () => {\n debug('end %s %s', this.method, this.url);\n // TODO: unless buffering emit earlier to stream\n this.emit('end');\n this.callback(null, this._emitResponse());\n });\n });\n this.emit('request', this);\n const getProgressMonitor = () => {\n const lengthComputable = true;\n const total = req.getHeader('Content-Length');\n let loaded = 0;\n const progress = new Stream.Transform();\n progress._transform = (chunk, encoding, callback) => {\n loaded += chunk.length;\n this.emit('progress', {\n direction: 'upload',\n lengthComputable,\n loaded,\n total\n });\n callback(null, chunk);\n };\n return progress;\n };\n const bufferToChunks = buffer => {\n const chunkSize = 16 * 1024; // default highWaterMark value\n const chunking = new Stream.Readable();\n const totalLength = buffer.length;\n const remainder = totalLength % chunkSize;\n const cutoff = totalLength - remainder;\n for (let i = 0; i < cutoff; i += chunkSize) {\n const chunk = buffer.slice(i, i + chunkSize);\n chunking.push(chunk);\n }\n if (remainder > 0) {\n const remainderBuffer = buffer.slice(-remainder);\n chunking.push(remainderBuffer);\n }\n chunking.push(null); // no more data\n\n return chunking;\n };\n\n // if a FormData instance got created, then we send that as the request body\n const formData = this._formData;\n if (formData) {\n // set headers\n const headers = formData.getHeaders();\n for (const i in headers) {\n if (hasOwn(headers, i)) {\n debug('setting FormData header: \"%s: %s\"', i, headers[i]);\n req.setHeader(i, headers[i]);\n }\n }\n\n // attempt to get \"Content-Length\" header\n formData.getLength((error, length) => {\n // TODO: Add chunked encoding when no length (if err)\n if (error) debug('formData.getLength had error', error, length);\n debug('got FormData Content-Length: %s', length);\n if (typeof length === 'number') {\n req.setHeader('Content-Length', length);\n }\n formData.pipe(getProgressMonitor()).pipe(req);\n });\n } else if (Buffer.isBuffer(data)) {\n bufferToChunks(data).pipe(getProgressMonitor()).pipe(req);\n } else {\n req.end(data);\n }\n};\n\n// Check whether response has a non-0-sized gzip-encoded body\nRequest.prototype._shouldDecompress = res => {\n return hasNonEmptyResponseContent(res) && (isGzipOrDeflateEncoding(res) || isBrotliEncoding(res));\n};\n\n/**\n * Overrides DNS for selected hostnames. Takes object mapping hostnames to IP addresses.\n *\n * When making a request to a URL with a hostname exactly matching a key in the object,\n * use the given IP address to connect, instead of using DNS to resolve the hostname.\n *\n * A special host `*` matches every hostname (keep redirects in mind!)\n *\n * request.connect({\n * 'test.example.com': '127.0.0.1',\n * 'ipv6.example.com': '::1',\n * })\n */\nRequest.prototype.connect = function (connectOverride) {\n if (typeof connectOverride === 'string') {\n this._connectOverride = {\n '*': connectOverride\n };\n } else if (typeof connectOverride === 'object') {\n this._connectOverride = connectOverride;\n } else {\n this._connectOverride = undefined;\n }\n return this;\n};\nRequest.prototype.trustLocalhost = function (toggle) {\n this._trustLocalhost = toggle === undefined ? true : toggle;\n return this;\n};\n\n// generate HTTP verb methods\nif (!methods.includes('del')) {\n // create a copy so we don't cause conflicts with\n // other packages using the methods package and\n // npm 3.x\n methods = [...methods];\n methods.push('del');\n}\nfor (let method of methods) {\n const name = method;\n method = method === 'del' ? 'delete' : method;\n method = method.toUpperCase();\n request[name] = (url, data, fn) => {\n const request_ = request(method, url);\n if (typeof data === 'function') {\n fn = data;\n data = null;\n }\n if (data) {\n if (method === 'GET' || method === 'HEAD') {\n request_.query(data);\n } else {\n request_.send(data);\n }\n }\n if (fn) request_.end(fn);\n return request_;\n };\n}\n\n/**\n * Check if `mime` is text and should be buffered.\n *\n * @param {String} mime\n * @return {Boolean}\n * @api public\n */\n\nfunction isText(mime) {\n const parts = mime.split('/');\n let type = parts[0];\n if (type) type = type.toLowerCase().trim();\n let subtype = parts[1];\n if (subtype) subtype = subtype.toLowerCase().trim();\n return type === 'text' || subtype === 'x-www-form-urlencoded';\n}\n\n// This is not a catchall, but a start. It might be useful\n// in the long run to have file that includes all binary\n// content types from https://www.iana.org/assignments/media-types/media-types.xhtml\nfunction isBinary(mime) {\n let [registry, name] = mime.split('/');\n if (registry) registry = registry.toLowerCase().trim();\n if (name) name = name.toLowerCase().trim();\n return ['audio', 'font', 'image', 'video'].includes(registry) || ['gz', 'gzip'].includes(name);\n}\n\n/**\n * Check if `mime` is json or has +json structured syntax suffix.\n *\n * @param {String} mime\n * @return {Boolean}\n * @api private\n */\n\nfunction isJSON(mime) {\n // should match /json or +json\n // but not /json-seq\n return /[/+]json($|[^-\\w])/i.test(mime);\n}\n\n/**\n * Check if we should follow the redirect `code`.\n *\n * @param {Number} code\n * @return {Boolean}\n * @api private\n */\n\nfunction isRedirect(code) {\n return [301, 302, 303, 305, 307, 308].includes(code);\n}\nfunction hasNonEmptyResponseContent(res) {\n if (res.statusCode === 204 || res.statusCode === 304) {\n // These aren't supposed to have any body\n return false;\n }\n\n // header content is a string, and distinction between 0 and no information is crucial\n if (res.headers['content-length'] === '0') {\n // We know that the body is empty (unfortunately, this check does not cover chunked encoding)\n return false;\n }\n return true;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXQiLCJyZXF1aXJlIiwiU3RyZWFtIiwiaHR0cHMiLCJodHRwIiwiZnMiLCJ6bGliIiwidXRpbCIsInFzIiwibWltZSIsIm1ldGhvZHMiLCJGb3JtRGF0YSIsImZvcm1pZGFibGUiLCJkZWJ1ZyIsIkNvb2tpZUphciIsInNhZmVTdHJpbmdpZnkiLCJ1dGlscyIsIlJlcXVlc3RCYXNlIiwiaHR0cDIiLCJkZWNvbXByZXNzIiwiUmVzcG9uc2UiLCJtaXhpbiIsImhhc093biIsImlzQnJvdGxpRW5jb2RpbmciLCJpc0d6aXBPckRlZmxhdGVFbmNvZGluZyIsImNob29zZURlY29tcHJlc3NlciIsInJlcXVlc3QiLCJtZXRob2QiLCJ1cmwiLCJleHBvcnRzIiwiUmVxdWVzdCIsImVuZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm1vZHVsZSIsImFnZW50Iiwibm9vcCIsImRlZmluZSIsInByb3RvY29scyIsInNlcmlhbGl6ZSIsIm9iaiIsInN0cmluZ2lmeSIsImluZGljZXMiLCJzdHJpY3ROdWxsSGFuZGxpbmciLCJwYXJzZSIsImJ1ZmZlciIsIl9pbml0SGVhZGVycyIsInJlcXVlc3RfIiwiX2hlYWRlciIsImhlYWRlciIsImNhbGwiLCJfZW5hYmxlSHR0cDIiLCJCb29sZWFuIiwicHJvY2VzcyIsImVudiIsIkhUVFAyX1RFU1QiLCJfYWdlbnQiLCJfZm9ybURhdGEiLCJ3cml0YWJsZSIsIl9yZWRpcmVjdHMiLCJyZWRpcmVjdHMiLCJjb29raWVzIiwiX3F1ZXJ5IiwicXNSYXciLCJfcmVkaXJlY3RMaXN0IiwiX3N0cmVhbVJlcXVlc3QiLCJfbG9va3VwIiwidW5kZWZpbmVkIiwib25jZSIsImNsZWFyVGltZW91dCIsImJpbmQiLCJpbmhlcml0cyIsInByb3RvdHlwZSIsImJvb2wiLCJFcnJvciIsImF0dGFjaCIsImZpZWxkIiwiZmlsZSIsIm9wdGlvbnMiLCJfZGF0YSIsIm8iLCJmaWxlbmFtZSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJvbiIsImVycm9yIiwiZm9ybURhdGEiLCJfZ2V0Rm9ybURhdGEiLCJlbWl0IiwicGF0aCIsImFwcGVuZCIsImNhbGxlZCIsImNhbGxiYWNrIiwiYWJvcnQiLCJsb29rdXAiLCJ0eXBlIiwic2V0IiwiaW5jbHVkZXMiLCJnZXRUeXBlIiwiYWNjZXB0IiwicXVlcnkiLCJ2YWx1ZSIsInB1c2giLCJPYmplY3QiLCJhc3NpZ24iLCJ3cml0ZSIsImRhdGEiLCJlbmNvZGluZyIsInBpcGUiLCJzdHJlYW0iLCJwaXBlZCIsIl9waXBlQ29udGludWUiLCJyZXEiLCJyZXMiLCJpc1JlZGlyZWN0Iiwic3RhdHVzQ29kZSIsIl9tYXhSZWRpcmVjdHMiLCJfcmVkaXJlY3QiLCJfZW1pdFJlc3BvbnNlIiwiX2Fib3J0ZWQiLCJfc2hvdWxkRGVjb21wcmVzcyIsImRlY29tcHJlc3NlciIsImNvZGUiLCJfYnVmZmVyIiwiaGVhZGVycyIsImxvY2F0aW9uIiwiVVJMIiwiaHJlZiIsInJlc3VtZSIsImdldEhlYWRlcnMiLCJfaGVhZGVycyIsImNoYW5nZXNPcmlnaW4iLCJob3N0IiwiY2xlYW5IZWFkZXIiLCJfZW5kQ2FsbGVkIiwiX2VtaXRSZWRpcmVjdCIsIl9jYWxsYmFjayIsImF1dGgiLCJ1c2VyIiwicGFzcyIsImVuY29kZXIiLCJzdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJfYXV0aCIsImNhIiwiY2VydCIsIl9jYSIsImtleSIsIl9rZXkiLCJwZngiLCJpc0J1ZmZlciIsIl9wZngiLCJfcGFzc3BocmFzZSIsInBhc3NwaHJhc2UiLCJfY2VydCIsImRpc2FibGVUTFNDZXJ0cyIsIl9kaXNhYmxlVExTQ2VydHMiLCJfZmluYWxpemVRdWVyeVN0cmluZyIsImVyciIsInVybFN0cmluZyIsInJldHJpZXMiLCJfcmV0cmllcyIsImluZGV4T2YiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwic2VhcmNoIiwidGVzdCIsInNwbGl0Iiwic29ja2V0UGF0aCIsImhvc3RuYW1lIiwicmVwbGFjZSIsIl9jb25uZWN0T3ZlcnJpZGUiLCJtYXRjaCIsIm5ld0hvc3QiLCJuZXdQb3J0IiwicG9ydCIsIm5vcm1hbGl6ZUhvc3RuYW1lIiwicmVqZWN0VW5hdXRob3JpemVkIiwiTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCIsInNlcnZlcm5hbWUiLCJfdHJ1c3RMb2NhbGhvc3QiLCJtb2R1bGVfIiwic2V0UHJvdG9jb2wiLCJzZXROb0RlbGF5Iiwic2V0SGVhZGVyIiwicmVzcG9uc2UiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidGVtcG9yYXJ5SmFyIiwic2V0Q29va2llcyIsImNvb2tpZSIsImdldENvb2tpZXMiLCJDb29raWVBY2Nlc3NJbmZvIiwiQWxsIiwidG9WYWx1ZVN0cmluZyIsIl9zaG91bGRSZXRyeSIsIl9yZXRyeSIsImZuIiwiY29uc29sZSIsIndhcm4iLCJfaXNSZXNwb25zZU9LIiwibWVzc2FnZSIsIlNUQVRVU19DT0RFUyIsInN0YXR1cyIsIl9tYXhSZXRyaWVzIiwibGlzdGVuZXJzIiwiX2lzSG9zdCIsIm9iamVjdCIsImJvZHkiLCJmaWxlcyIsIl9lbmQiLCJfc2V0VGltZW91dHMiLCJfaGVhZGVyU2VudCIsImNvbnRlbnRUeXBlIiwiZ2V0SGVhZGVyIiwiX3NlcmlhbGl6ZXIiLCJpc0pTT04iLCJieXRlTGVuZ3RoIiwiX3Jlc3BvbnNlVGltZW91dFRpbWVyIiwibWF4IiwidG9Mb3dlckNhc2UiLCJ0cmltIiwibXVsdGlwYXJ0IiwicmVkaXJlY3QiLCJyZXNwb25zZVR5cGUiLCJfcmVzcG9uc2VUeXBlIiwicGFyc2VyIiwiX3BhcnNlciIsImltYWdlIiwiZm9ybSIsImJyaWRnZVN0cmVhbSIsIlBhc3NUaHJvdWdoIiwiaHR0cFZlcnNpb24iLCJzb2NrZXQiLCJyZWFkYWJsZSIsImZpZWxkcyIsImZsYXR0ZW5lZEZpZWxkcyIsIkFycmF5IiwiaXNBcnJheSIsImZsYXR0ZW5lZEZpbGVzIiwiaXNCaW5hcnkiLCJ0ZXh0IiwiaXNUZXh0IiwiX3Jlc0J1ZmZlcmVkIiwicGFyc2VySGFuZGxlc0VuZCIsInJlc3BvbnNlQnl0ZXNMZWZ0IiwiX21heFJlc3BvbnNlU2l6ZSIsImJ1ZiIsImRlc3Ryb3kiLCJ0aW1lZG91dCIsImdldFByb2dyZXNzTW9uaXRvciIsImxlbmd0aENvbXB1dGFibGUiLCJ0b3RhbCIsImxvYWRlZCIsInByb2dyZXNzIiwiVHJhbnNmb3JtIiwiX3RyYW5zZm9ybSIsImNodW5rIiwiZGlyZWN0aW9uIiwiYnVmZmVyVG9DaHVua3MiLCJjaHVua1NpemUiLCJjaHVua2luZyIsIlJlYWRhYmxlIiwidG90YWxMZW5ndGgiLCJyZW1haW5kZXIiLCJjdXRvZmYiLCJpIiwic2xpY2UiLCJyZW1haW5kZXJCdWZmZXIiLCJnZXRMZW5ndGgiLCJoYXNOb25FbXB0eVJlc3BvbnNlQ29udGVudCIsImNvbm5lY3QiLCJjb25uZWN0T3ZlcnJpZGUiLCJ0cnVzdExvY2FsaG9zdCIsInRvZ2dsZSIsIm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNlbmQiLCJwYXJ0cyIsInN1YnR5cGUiLCJyZWdpc3RyeSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB7IGZvcm1hdCB9ID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbmNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IHFzID0gcmVxdWlyZSgncXMnKTtcbmNvbnN0IG1pbWUgPSByZXF1aXJlKCdtaW1lJyk7XG5sZXQgbWV0aG9kcyA9IHJlcXVpcmUoJ21ldGhvZHMnKTtcbmNvbnN0IEZvcm1EYXRhID0gcmVxdWlyZSgnZm9ybS1kYXRhJyk7XG5jb25zdCBmb3JtaWRhYmxlID0gcmVxdWlyZSgnZm9ybWlkYWJsZScpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzdXBlcmFnZW50Jyk7XG5jb25zdCBDb29raWVKYXIgPSByZXF1aXJlKCdjb29raWVqYXInKTtcbmNvbnN0IHNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5Jyk7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbmNvbnN0IFJlcXVlc3RCYXNlID0gcmVxdWlyZSgnLi4vcmVxdWVzdC1iYXNlJyk7XG5jb25zdCBodHRwMiA9IHJlcXVpcmUoJy4vaHR0cDJ3cmFwcGVyJyk7XG5jb25zdCB7IGRlY29tcHJlc3MgfSA9IHJlcXVpcmUoJy4vdW56aXAnKTtcbmNvbnN0IFJlc3BvbnNlID0gcmVxdWlyZSgnLi9yZXNwb25zZScpO1xuXG5jb25zdCB7IG1peGluLCBoYXNPd24sIGlzQnJvdGxpRW5jb2RpbmcsIGlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nIH0gPSB1dGlscztcbmNvbnN0IHsgY2hvb3NlRGVjb21wcmVzc2VyIH0gPSByZXF1aXJlKCcuL2RlY29tcHJlc3MnKTtcblxuZnVuY3Rpb24gcmVxdWVzdChtZXRob2QsIHVybCkge1xuICAvLyBjYWxsYmFja1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KCdHRVQnLCBtZXRob2QpLmVuZCh1cmwpO1xuICB9XG5cbiAgLy8gdXJsIGZpcnN0XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCk7XG4gIH1cblxuICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdChtZXRob2QsIHVybCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdDtcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBFeHBvc2UgYFJlcXVlc3RgLlxuICovXG5cbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogRXhwb3NlIHRoZSBhZ2VudCBmdW5jdGlvblxuICovXG5cbmV4cG9ydHMuYWdlbnQgPSByZXF1aXJlKCcuL2FnZW50Jyk7XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlYC5cbiAqL1xuXG5leHBvcnRzLlJlc3BvbnNlID0gUmVzcG9uc2U7XG5cbi8qKlxuICogRGVmaW5lIFwiZm9ybVwiIG1pbWUgdHlwZS5cbiAqL1xuXG5taW1lLmRlZmluZShcbiAge1xuICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOiBbJ2Zvcm0nLCAndXJsZW5jb2RlZCcsICdmb3JtLWRhdGEnXVxuICB9LFxuICB0cnVlXG4pO1xuXG4vKipcbiAqIFByb3RvY29sIG1hcC5cbiAqL1xuXG5leHBvcnRzLnByb3RvY29scyA9IHtcbiAgJ2h0dHA6JzogaHR0cCxcbiAgJ2h0dHBzOic6IGh0dHBzLFxuICAnaHR0cDI6JzogaHR0cDJcbn07XG5cbi8qKlxuICogRGVmYXVsdCBzZXJpYWxpemF0aW9uIG1hcC5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL3htbCddID0gZnVuY3Rpb24ob2JqKXtcbiAqICAgICAgIHJldHVybiAnZ2VuZXJhdGVkIHhtbCBoZXJlJztcbiAqICAgICB9O1xuICpcbiAqL1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHtcbiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IChvYmopID0+IHtcbiAgICByZXR1cm4gcXMuc3RyaW5naWZ5KG9iaiwgeyBpbmRpY2VzOiBmYWxzZSwgc3RyaWN0TnVsbEhhbmRsaW5nOiB0cnVlIH0pO1xuICB9LFxuICAnYXBwbGljYXRpb24vanNvbic6IHNhZmVTdHJpbmdpZnlcbn07XG5cbi8qKlxuICogRGVmYXVsdCBwYXJzZXJzLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnBhcnNlWydhcHBsaWNhdGlvbi94bWwnXSA9IGZ1bmN0aW9uKHJlcywgZm4pe1xuICogICAgICAgZm4obnVsbCwgcmVzKTtcbiAqICAgICB9O1xuICpcbiAqL1xuXG5leHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZXJzJyk7XG5cbi8qKlxuICogRGVmYXVsdCBidWZmZXJpbmcgbWFwLiBDYW4gYmUgdXNlZCB0byBzZXQgY2VydGFpblxuICogcmVzcG9uc2UgdHlwZXMgdG8gYnVmZmVyL25vdCBidWZmZXIuXG4gKlxuICogICAgIHN1cGVyYWdlbnQuYnVmZmVyWydhcHBsaWNhdGlvbi94bWwnXSA9IHRydWU7XG4gKi9cbmV4cG9ydHMuYnVmZmVyID0ge307XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBoZWFkZXIgdHJhY2tpbmcgcHJvcGVydGllcyBvbiBhIHJlcXVlc3QgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcSB0aGUgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5pdEhlYWRlcnMocmVxdWVzdF8pIHtcbiAgcmVxdWVzdF8uX2hlYWRlciA9IHtcbiAgICAvLyBjb2VyY2VzIGhlYWRlciBuYW1lcyB0byBsb3dlcmNhc2VcbiAgfTtcbiAgcmVxdWVzdF8uaGVhZGVyID0ge1xuICAgIC8vIHByZXNlcnZlcyBoZWFkZXIgbmFtZSBjYXNlXG4gIH07XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVxdWVzdGAgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAgYW5kIGB1cmxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdXJsXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QobWV0aG9kLCB1cmwpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykgdXJsID0gZm9ybWF0KHVybCk7XG4gIHRoaXMuX2VuYWJsZUh0dHAyID0gQm9vbGVhbihwcm9jZXNzLmVudi5IVFRQMl9URVNUKTsgLy8gaW50ZXJuYWwgb25seVxuICB0aGlzLl9hZ2VudCA9IGZhbHNlO1xuICB0aGlzLl9mb3JtRGF0YSA9IG51bGw7XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnVybCA9IHVybDtcbiAgX2luaXRIZWFkZXJzKHRoaXMpO1xuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5fcmVkaXJlY3RzID0gMDtcbiAgdGhpcy5yZWRpcmVjdHMobWV0aG9kID09PSAnSEVBRCcgPyAwIDogNSk7XG4gIHRoaXMuY29va2llcyA9ICcnO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5ID0gW107XG4gIHRoaXMucXNSYXcgPSB0aGlzLl9xdWVyeTsgLy8gVW51c2VkLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seVxuICB0aGlzLl9yZWRpcmVjdExpc3QgPSBbXTtcbiAgdGhpcy5fc3RyZWFtUmVxdWVzdCA9IGZhbHNlO1xuICB0aGlzLl9sb29rdXAgPSB1bmRlZmluZWQ7XG4gIHRoaXMub25jZSgnZW5kJywgdGhpcy5jbGVhclRpbWVvdXQuYmluZCh0aGlzKSk7XG59XG5cbi8qKlxuICogSW5oZXJpdCBmcm9tIGBTdHJlYW1gICh3aGljaCBpbmhlcml0cyBmcm9tIGBFdmVudEVtaXR0ZXJgKS5cbiAqIE1peGluIGBSZXF1ZXN0QmFzZWAuXG4gKi9cbnV0aWwuaW5oZXJpdHMoUmVxdWVzdCwgU3RyZWFtKTtcblxubWl4aW4oUmVxdWVzdC5wcm90b3R5cGUsIFJlcXVlc3RCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogRW5hYmxlIG9yIERpc2FibGUgaHR0cDIuXG4gKlxuICogRW5hYmxlIGh0dHAyLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5nZXQoJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAqICAgLmh0dHAyKClcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogcmVxdWVzdC5nZXQoJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAqICAgLmh0dHAyKHRydWUpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogRGlzYWJsZSBodHRwMi5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QgPSByZXF1ZXN0Lmh0dHAyKCk7XG4gKiByZXF1ZXN0LmdldCgnaHR0cDovL2xvY2FsaG9zdC8nKVxuICogICAuaHR0cDIoZmFsc2UpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBlbmFibGVcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5odHRwMiA9IGZ1bmN0aW9uIChib29sKSB7XG4gIGlmIChleHBvcnRzLnByb3RvY29sc1snaHR0cDI6J10gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdzdXBlcmFnZW50OiB0aGlzIHZlcnNpb24gb2YgTm9kZS5qcyBkb2VzIG5vdCBzdXBwb3J0IGh0dHAyJ1xuICAgICk7XG4gIH1cblxuICB0aGlzLl9lbmFibGVIdHRwMiA9IGJvb2wgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBib29sO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUXVldWUgdGhlIGdpdmVuIGBmaWxlYCBhcyBhbiBhdHRhY2htZW50IHRvIHRoZSBzcGVjaWZpZWQgYGZpZWxkYCxcbiAqIHdpdGggb3B0aW9uYWwgYG9wdGlvbnNgIChvciBmaWxlbmFtZSkuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmllbGQnLCBCdWZmZXIuZnJvbSgnPGI+SGVsbG8gd29ybGQ8L2I+JyksICdoZWxsby5odG1sJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBBIGZpbGVuYW1lIG1heSBhbHNvIGJlIHVzZWQ6XG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmlsZXMnLCAnaW1hZ2UuanBnJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfGZzLlJlYWRTdHJlYW18QnVmZmVyfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAoZmllbGQsIGZpbGUsIG9wdGlvbnMpIHtcbiAgaWYgKGZpbGUpIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3VwZXJhZ2VudCBjYW4ndCBtaXggLnNlbmQoKSBhbmQgLmF0dGFjaCgpXCIpO1xuICAgIH1cblxuICAgIGxldCBvID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvID0geyBmaWxlbmFtZTogb3B0aW9ucyB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghby5maWxlbmFtZSkgby5maWxlbmFtZSA9IGZpbGU7XG4gICAgICBkZWJ1ZygnY3JlYXRpbmcgYGZzLlJlYWRTdHJlYW1gIGluc3RhbmNlIGZvciBmaWxlOiAlcycsIGZpbGUpO1xuICAgICAgZmlsZSA9IGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZSk7XG4gICAgICBmaWxlLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuX2dldEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghby5maWxlbmFtZSAmJiBmaWxlLnBhdGgpIHtcbiAgICAgIG8uZmlsZW5hbWUgPSBmaWxlLnBhdGg7XG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0Rm9ybURhdGEoKS5hcHBlbmQoZmllbGQsIGZpbGUsIG8pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fZ2V0Rm9ybURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5fZm9ybURhdGEpIHtcbiAgICB0aGlzLl9mb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIHRoaXMuX2Zvcm1EYXRhLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgZGVidWcoJ0Zvcm1EYXRhIGVycm9yJywgZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuY2FsbGVkKSB7XG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkIGFuZCB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZC5cbiAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIHRoZSBlcnJvci5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbiAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9mb3JtRGF0YTtcbn07XG5cbi8qKlxuICogR2V0cy9zZXRzIHRoZSBgQWdlbnRgIHRvIHVzZSBmb3IgdGhpcyBIVFRQIHJlcXVlc3QuIFRoZSBkZWZhdWx0IChpZiB0aGlzXG4gKiBmdW5jdGlvbiBpcyBub3QgY2FsbGVkKSBpcyB0byBvcHQgb3V0IG9mIGNvbm5lY3Rpb24gcG9vbGluZyAoYGFnZW50OiBmYWxzZWApLlxuICpcbiAqIEBwYXJhbSB7aHR0cC5BZ2VudH0gYWdlbnRcbiAqIEByZXR1cm4ge2h0dHAuQWdlbnR9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmFnZW50ID0gZnVuY3Rpb24gKGFnZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5fYWdlbnQ7XG4gIHRoaXMuX2FnZW50ID0gYWdlbnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBHZXRzL3NldHMgdGhlIGBsb29rdXBgIGZ1bmN0aW9uIHRvIHVzZSBjdXN0b20gRE5TIHJlc29sdmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxvb2t1cFxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uIChsb29rdXApIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLl9sb29rdXA7XG4gIHRoaXMuX2xvb2t1cCA9IGxvb2t1cDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCBfQ29udGVudC1UeXBlXyByZXNwb25zZSBoZWFkZXIgcGFzc2VkIHRocm91Z2ggYG1pbWUuZ2V0VHlwZSgpYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnLycpXG4gKiAgICAgICAgLnR5cGUoJ3htbCcpXG4gKiAgICAgICAgLnNlbmQoeG1sc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgnanNvbicpXG4gKiAgICAgICAgLnNlbmQoanNvbnN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnLycpXG4gKiAgICAgICAgLnR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICogICAgICAgIC5zZW5kKGpzb25zdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS50eXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgcmV0dXJuIHRoaXMuc2V0KFxuICAgICdDb250ZW50LVR5cGUnLFxuICAgIHR5cGUuaW5jbHVkZXMoJy8nKSA/IHR5cGUgOiBtaW1lLmdldFR5cGUodHlwZSlcbiAgKTtcbn07XG5cbi8qKlxuICogU2V0IF9BY2NlcHRfIHJlc3BvbnNlIGhlYWRlciBwYXNzZWQgdGhyb3VnaCBgbWltZS5nZXRUeXBlKClgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgc3VwZXJhZ2VudC50eXBlcy5qc29uID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy9hZ2VudCcpXG4gKiAgICAgICAgLmFjY2VwdCgnanNvbicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWNjZXB0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgcmV0dXJuIHRoaXMuc2V0KCdBY2NlcHQnLCB0eXBlLmluY2x1ZGVzKCcvJykgPyB0eXBlIDogbWltZS5nZXRUeXBlKHR5cGUpKTtcbn07XG5cbi8qKlxuICogQWRkIHF1ZXJ5LXN0cmluZyBgdmFsYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIHJlcXVlc3QuZ2V0KCcvc2hvZXMnKVxuICogICAgIC5xdWVyeSgnc2l6ZT0xMCcpXG4gKiAgICAgLnF1ZXJ5KHsgY29sb3I6ICdibHVlJyB9KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLl9xdWVyeS5wdXNoKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucXMsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSByYXcgYGRhdGFgIC8gYGVuY29kaW5nYCB0byB0aGUgc29ja2V0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZ30gZGF0YVxuICogQHBhcmFtIHtTdHJpbmd9IGVuY29kaW5nXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCByZXF1ZXN0XyA9IHRoaXMucmVxdWVzdCgpO1xuICBpZiAoIXRoaXMuX3N0cmVhbVJlcXVlc3QpIHtcbiAgICB0aGlzLl9zdHJlYW1SZXF1ZXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZXF1ZXN0Xy53cml0ZShkYXRhLCBlbmNvZGluZyk7XG59O1xuXG4vKipcbiAqIFBpcGUgdGhlIHJlcXVlc3QgYm9keSB0byBgc3RyZWFtYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyZWFtfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKHN0cmVhbSwgb3B0aW9ucykge1xuICB0aGlzLnBpcGVkID0gdHJ1ZTsgLy8gSEFDSy4uLlxuICB0aGlzLmJ1ZmZlcihmYWxzZSk7XG4gIHRoaXMuZW5kKCk7XG4gIHJldHVybiB0aGlzLl9waXBlQ29udGludWUoc3RyZWFtLCBvcHRpb25zKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9waXBlQ29udGludWUgPSBmdW5jdGlvbiAoc3RyZWFtLCBvcHRpb25zKSB7XG4gIHRoaXMucmVxLm9uY2UoJ3Jlc3BvbnNlJywgKHJlcykgPT4ge1xuICAgIC8vIHJlZGlyZWN0XG4gICAgaWYgKFxuICAgICAgaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkgJiZcbiAgICAgIHRoaXMuX3JlZGlyZWN0cysrICE9PSB0aGlzLl9tYXhSZWRpcmVjdHNcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdChyZXMpID09PSB0aGlzXG4gICAgICAgID8gdGhpcy5fcGlwZUNvbnRpbnVlKHN0cmVhbSwgb3B0aW9ucylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG4gICAgdGhpcy5fZW1pdFJlc3BvbnNlKCk7XG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9zaG91bGREZWNvbXByZXNzKHJlcykpIHtcblxuICAgICAgbGV0IGRlY29tcHJlc3NlciA9IGNob29zZURlY29tcHJlc3NlcihyZXMpO1xuXG4gICAgICBkZWNvbXByZXNzZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSAnWl9CVUZfRVJST1InKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpcyBpZ25vcmVkIGJ5IGJyb3dzZXJzIGFuZCBjdXJsXG4gICAgICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLnBpcGUoZGVjb21wcmVzc2VyKS5waXBlKHN0cmVhbSwgb3B0aW9ucyk7XG4gICAgICAvLyBkb24ndCBlbWl0ICdlbmQnIHVudGlsIGRlY29tcHJlc3NlciBoYXMgY29tcGxldGVkIHdyaXRpbmcgYWxsIGl0cyBkYXRhLlxuICAgICAgZGVjb21wcmVzc2VyLm9uY2UoJ2VuZCcsICgpID0+IHRoaXMuZW1pdCgnZW5kJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xuICAgICAgcmVzLm9uY2UoJ2VuZCcsICgpID0+IHRoaXMuZW1pdCgnZW5kJykpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHJlYW07XG59O1xuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2FibGUgYnVmZmVyaW5nLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFt2YWxdXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYnVmZmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHRoaXMuX2J1ZmZlciA9IHZhbHVlICE9PSBmYWxzZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlZGlyZWN0IHRvIGB1cmxcbiAqXG4gKiBAcGFyYW0ge0luY29taW5nTWVzc2FnZX0gcmVzXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLl9yZWRpcmVjdCA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgbGV0IHVybCA9IHJlcy5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKG5ldyBFcnJvcignTm8gbG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdCcpLCByZXMpO1xuICB9XG5cbiAgZGVidWcoJ3JlZGlyZWN0ICVzIC0+ICVzJywgdGhpcy51cmwsIHVybCk7XG5cbiAgLy8gbG9jYXRpb25cbiAgdXJsID0gbmV3IFVSTCh1cmwsIHRoaXMudXJsKS5ocmVmO1xuXG4gIC8vIGVuc3VyZSB0aGUgcmVzcG9uc2UgaXMgYmVpbmcgY29uc3VtZWRcbiAgLy8gdGhpcyBpcyByZXF1aXJlZCBmb3IgTm9kZSB2MC4xMCtcbiAgcmVzLnJlc3VtZSgpO1xuXG4gIGxldCBoZWFkZXJzID0gdGhpcy5yZXEuZ2V0SGVhZGVycyA/IHRoaXMucmVxLmdldEhlYWRlcnMoKSA6IHRoaXMucmVxLl9oZWFkZXJzO1xuXG4gIGNvbnN0IGNoYW5nZXNPcmlnaW4gPSBuZXcgVVJMKHVybCkuaG9zdCAhPT0gbmV3IFVSTCh0aGlzLnVybCkuaG9zdDtcblxuICAvLyBpbXBsZW1lbnRhdGlvbiBvZiAzMDIgZm9sbG93aW5nIGRlZmFjdG8gc3RhbmRhcmRcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikge1xuICAgIC8vIHN0cmlwIENvbnRlbnQtKiByZWxhdGVkIGZpZWxkc1xuICAgIC8vIGluIGNhc2Ugb2YgUE9TVCBldGNcbiAgICBoZWFkZXJzID0gdXRpbHMuY2xlYW5IZWFkZXIoaGVhZGVycywgY2hhbmdlc09yaWdpbik7XG5cbiAgICAvLyBmb3JjZSBHRVRcbiAgICB0aGlzLm1ldGhvZCA9IHRoaXMubWV0aG9kID09PSAnSEVBRCcgPyAnSEVBRCcgOiAnR0VUJztcblxuICAgIC8vIGNsZWFyIGRhdGFcbiAgICB0aGlzLl9kYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8vIDMwMyBpcyBhbHdheXMgR0VUXG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMzAzKSB7XG4gICAgLy8gc3RyaXAgQ29udGVudC0qIHJlbGF0ZWQgZmllbGRzXG4gICAgLy8gaW4gY2FzZSBvZiBQT1NUIGV0Y1xuICAgIGhlYWRlcnMgPSB1dGlscy5jbGVhbkhlYWRlcihoZWFkZXJzLCBjaGFuZ2VzT3JpZ2luKTtcblxuICAgIC8vIGZvcmNlIG1ldGhvZFxuICAgIHRoaXMubWV0aG9kID0gJ0dFVCc7XG5cbiAgICAvLyBjbGVhciBkYXRhXG4gICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gIH1cblxuICAvLyAzMDcgcHJlc2VydmVzIG1ldGhvZFxuICAvLyAzMDggcHJlc2VydmVzIG1ldGhvZFxuICBkZWxldGUgaGVhZGVycy5ob3N0O1xuXG4gIGRlbGV0ZSB0aGlzLnJlcTtcbiAgZGVsZXRlIHRoaXMuX2Zvcm1EYXRhO1xuXG4gIC8vIHJlbW92ZSBhbGwgYWRkIGhlYWRlciBleGNlcHQgVXNlci1BZ2VudFxuICBfaW5pdEhlYWRlcnModGhpcyk7XG5cbiAgLy8gcmVkaXJlY3RcbiAgdGhpcy5yZXMgPSByZXM7XG4gIHRoaXMuX2VuZENhbGxlZCA9IGZhbHNlO1xuICB0aGlzLnVybCA9IHVybDtcbiAgdGhpcy5xcyA9IHt9O1xuICB0aGlzLl9xdWVyeS5sZW5ndGggPSAwO1xuICB0aGlzLnNldChoZWFkZXJzKTtcbiAgdGhpcy5fZW1pdFJlZGlyZWN0KCk7XG4gIHRoaXMuX3JlZGlyZWN0TGlzdC5wdXNoKHRoaXMudXJsKTtcbiAgdGhpcy5lbmQodGhpcy5fY2FsbGJhY2spO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IEF1dGhvcml6YXRpb24gZmllbGQgdmFsdWUgd2l0aCBgdXNlcmAgYW5kIGBwYXNzYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIC5hdXRoKCd0b2JpJywgJ2xlYXJuYm9vc3QnKVxuICogICAuYXV0aCgndG9iaTpsZWFybmJvb3N0JylcbiAqICAgLmF1dGgoJ3RvYmknKVxuICogICAuYXV0aChhY2Nlc3NUb2tlbiwgeyB0eXBlOiAnYmVhcmVyJyB9KVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gW3Bhc3NdXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgd2l0aCBhdXRob3JpemF0aW9uIHR5cGUgJ2Jhc2ljJyBvciAnYmVhcmVyJyAoJ2Jhc2ljJyBpcyBkZWZhdWx0KVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmF1dGggPSBmdW5jdGlvbiAodXNlciwgcGFzcywgb3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgcGFzcyA9ICcnO1xuICBpZiAodHlwZW9mIHBhc3MgPT09ICdvYmplY3QnICYmIHBhc3MgIT09IG51bGwpIHtcbiAgICAvLyBwYXNzIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHBhc3M7XG4gICAgcGFzcyA9ICcnO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHsgdHlwZTogJ2Jhc2ljJyB9O1xuICB9XG5cbiAgY29uc3QgZW5jb2RlciA9IChzdHJpbmcpID0+IEJ1ZmZlci5mcm9tKHN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIHJldHVybiB0aGlzLl9hdXRoKHVzZXIsIHBhc3MsIG9wdGlvbnMsIGVuY29kZXIpO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eSBvcHRpb24gZm9yIGh0dHBzIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBBcnJheX0gY2VydFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNhID0gZnVuY3Rpb24gKGNlcnQpIHtcbiAgdGhpcy5fY2EgPSBjZXJ0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjbGllbnQgY2VydGlmaWNhdGUga2V5IG9wdGlvbiBmb3IgaHR0cHMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IFN0cmluZ30gY2VydFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uIChjZXJ0KSB7XG4gIHRoaXMuX2tleSA9IGNlcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGtleSwgY2VydGlmaWNhdGUsIGFuZCBDQSBjZXJ0cyBvZiB0aGUgY2xpZW50IGluIFBGWCBvciBQS0NTMTIgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucGZ4ID0gZnVuY3Rpb24gKGNlcnQpIHtcbiAgaWYgKHR5cGVvZiBjZXJ0ID09PSAnb2JqZWN0JyAmJiAhQnVmZmVyLmlzQnVmZmVyKGNlcnQpKSB7XG4gICAgdGhpcy5fcGZ4ID0gY2VydC5wZng7XG4gICAgdGhpcy5fcGFzc3BocmFzZSA9IGNlcnQucGFzc3BocmFzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9wZnggPSBjZXJ0O1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIG9wdGlvbiBmb3IgaHR0cHMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IFN0cmluZ30gY2VydFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNlcnQgPSBmdW5jdGlvbiAoY2VydCkge1xuICB0aGlzLl9jZXJ0ID0gY2VydDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIERvIG5vdCByZWplY3QgZXhwaXJlZCBvciBpbnZhbGlkIFRMUyBjZXJ0cy5cbiAqIHNldHMgYHJlamVjdFVuYXV0aG9yaXplZD10cnVlYC4gQmUgd2FybmVkIHRoYXQgdGhpcyBhbGxvd3MgTUlUTSBhdHRhY2tzLlxuICpcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5kaXNhYmxlVExTQ2VydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2Rpc2FibGVUTFNDZXJ0cyA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gaHR0cFtzXSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm4ge091dGdvaW5nTWVzc2FnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5SZXF1ZXN0LnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5yZXEpIHJldHVybiB0aGlzLnJlcTtcblxuICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBxdWVyeSA9IHFzLnN0cmluZ2lmeSh0aGlzLnFzLCB7XG4gICAgICBpbmRpY2VzOiBmYWxzZSxcbiAgICAgIHN0cmljdE51bGxIYW5kbGluZzogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgdGhpcy5xcyA9IHt9O1xuICAgICAgdGhpcy5fcXVlcnkucHVzaChxdWVyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmluYWxpemVRdWVyeVN0cmluZygpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cblxuICBsZXQgeyB1cmw6IHVybFN0cmluZyB9ID0gdGhpcztcbiAgY29uc3QgcmV0cmllcyA9IHRoaXMuX3JldHJpZXM7XG5cbiAgLy8gZGVmYXVsdCB0byBodHRwOi8vXG4gIGlmICh1cmxTdHJpbmcuaW5kZXhPZignaHR0cCcpICE9PSAwKSB1cmxTdHJpbmcgPSBgaHR0cDovLyR7dXJsU3RyaW5nfWA7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTtcbiAgbGV0IHsgcHJvdG9jb2wgfSA9IHVybDtcbiAgbGV0IHBhdGggPSBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWA7XG5cbiAgLy8gc3VwcG9ydCB1bml4IHNvY2tldHNcbiAgaWYgKC9eaHR0cHM/XFwrdW5peDovLnRlc3QocHJvdG9jb2wpID09PSB0cnVlKSB7XG4gICAgLy8gZ2V0IHRoZSBwcm90b2NvbFxuICAgIHByb3RvY29sID0gYCR7cHJvdG9jb2wuc3BsaXQoJysnKVswXX06YDtcblxuICAgIC8vIGdldCB0aGUgc29ja2V0IHBhdGhcbiAgICBvcHRpb25zLnNvY2tldFBhdGggPSB1cmwuaG9zdG5hbWUucmVwbGFjZSgvJTJGL2csICcvJyk7XG4gICAgdXJsLmhvc3QgPSAnJztcbiAgICB1cmwuaG9zdG5hbWUgPSAnJztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIElQIGFkZHJlc3Mgb2YgYSBob3N0bmFtZVxuICBpZiAodGhpcy5fY29ubmVjdE92ZXJyaWRlKSB7XG4gICAgY29uc3QgeyBob3N0bmFtZSB9ID0gdXJsO1xuICAgIGNvbnN0IG1hdGNoID1cbiAgICAgIGhvc3RuYW1lIGluIHRoaXMuX2Nvbm5lY3RPdmVycmlkZVxuICAgICAgICA/IHRoaXMuX2Nvbm5lY3RPdmVycmlkZVtob3N0bmFtZV1cbiAgICAgICAgOiB0aGlzLl9jb25uZWN0T3ZlcnJpZGVbJyonXTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIGJhY2t1cCB0aGUgcmVhbCBob3N0XG4gICAgICBpZiAoIXRoaXMuX2hlYWRlci5ob3N0KSB7XG4gICAgICAgIHRoaXMuc2V0KCdob3N0JywgdXJsLmhvc3QpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3SG9zdDtcbiAgICAgIGxldCBuZXdQb3J0O1xuXG4gICAgICBpZiAodHlwZW9mIG1hdGNoID09PSAnb2JqZWN0Jykge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2guaG9zdDtcbiAgICAgICAgbmV3UG9ydCA9IG1hdGNoLnBvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2g7XG4gICAgICAgIG5ld1BvcnQgPSB1cmwucG9ydDtcbiAgICAgIH1cblxuICAgICAgLy8gd3JhcCBbaXB2Nl1cbiAgICAgIHVybC5ob3N0ID0gLzovLnRlc3QobmV3SG9zdCkgPyBgWyR7bmV3SG9zdH1dYCA6IG5ld0hvc3Q7XG4gICAgICBpZiAobmV3UG9ydCkge1xuICAgICAgICB1cmwuaG9zdCArPSBgOiR7bmV3UG9ydH1gO1xuICAgICAgICB1cmwucG9ydCA9IG5ld1BvcnQ7XG4gICAgICB9XG5cbiAgICAgIHVybC5ob3N0bmFtZSA9IG5ld0hvc3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gb3B0aW9uc1xuICBvcHRpb25zLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICBvcHRpb25zLnBvcnQgPSB1cmwucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gcGF0aDtcbiAgb3B0aW9ucy5ob3N0ID0gdXRpbHMubm9ybWFsaXplSG9zdG5hbWUodXJsLmhvc3RuYW1lKTsgLy8gZXg6IFs6OjFdIC0+IDo6MVxuICBvcHRpb25zLmNhID0gdGhpcy5fY2E7XG4gIG9wdGlvbnMua2V5ID0gdGhpcy5fa2V5O1xuICBvcHRpb25zLnBmeCA9IHRoaXMuX3BmeDtcbiAgb3B0aW9ucy5jZXJ0ID0gdGhpcy5fY2VydDtcbiAgb3B0aW9ucy5wYXNzcGhyYXNlID0gdGhpcy5fcGFzc3BocmFzZTtcbiAgb3B0aW9ucy5hZ2VudCA9IHRoaXMuX2FnZW50O1xuICBvcHRpb25zLmxvb2t1cCA9IHRoaXMuX2xvb2t1cDtcbiAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPVxuICAgIHR5cGVvZiB0aGlzLl9kaXNhYmxlVExTQ2VydHMgPT09ICdib29sZWFuJ1xuICAgICAgPyAhdGhpcy5fZGlzYWJsZVRMU0NlcnRzXG4gICAgICA6IHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgIT09ICcwJztcblxuICAvLyBBbGxvd3MgcmVxdWVzdC5nZXQoJ2h0dHBzOi8vMS4yLjMuNC8nKS5zZXQoJ0hvc3QnLCAnZXhhbXBsZS5jb20nKVxuICBpZiAodGhpcy5faGVhZGVyLmhvc3QpIHtcbiAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLl9oZWFkZXIuaG9zdC5yZXBsYWNlKC86XFxkKyQvLCAnJyk7XG4gIH1cblxuICBpZiAoXG4gICAgdGhpcy5fdHJ1c3RMb2NhbGhvc3QgJiZcbiAgICAvXig/OmxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLlxcZCt8KDAqOikrOjAqMSkkLy50ZXN0KHVybC5ob3N0bmFtZSlcbiAgKSB7XG4gICAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGluaXRpYXRlIHJlcXVlc3RcbiAgY29uc3QgbW9kdWxlXyA9IHRoaXMuX2VuYWJsZUh0dHAyXG4gICAgPyBleHBvcnRzLnByb3RvY29sc1snaHR0cDI6J10uc2V0UHJvdG9jb2wocHJvdG9jb2wpXG4gICAgOiBleHBvcnRzLnByb3RvY29sc1twcm90b2NvbF07XG5cbiAgLy8gcmVxdWVzdFxuICB0aGlzLnJlcSA9IG1vZHVsZV8ucmVxdWVzdChvcHRpb25zKTtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG5cbiAgLy8gc2V0IHRjcCBubyBkZWxheVxuICByZXEuc2V0Tm9EZWxheSh0cnVlKTtcblxuICBpZiAob3B0aW9ucy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIHJlcS5zZXRIZWFkZXIoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLCBkZWZsYXRlJyk7XG4gIH1cblxuICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gIHRoaXMuaG9zdCA9IHVybC5ob3N0O1xuXG4gIC8vIGV4cG9zZSBldmVudHNcbiAgcmVxLm9uY2UoJ2RyYWluJywgKCkgPT4ge1xuICAgIHRoaXMuZW1pdCgnZHJhaW4nKTtcbiAgfSk7XG5cbiAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgIC8vIGZsYWcgYWJvcnRpb24gaGVyZSBmb3Igb3V0IHRpbWVvdXRzXG4gICAgLy8gYmVjYXVzZSBub2RlIHdpbGwgZW1pdCBhIGZhdXgtZXJyb3IgXCJzb2NrZXQgaGFuZyB1cFwiXG4gICAgLy8gd2hlbiByZXF1ZXN0IGlzIGFib3J0ZWQgYmVmb3JlIGEgY29ubmVjdGlvbiBpcyBtYWRlXG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcbiAgICAvLyBpZiBub3QgdGhlIHNhbWUsIHdlIGFyZSBpbiB0aGUgKipvbGQqKiAoY2FuY2VsbGVkKSByZXF1ZXN0LFxuICAgIC8vIHNvIG5lZWQgdG8gY29udGludWUgKHNhbWUgYXMgZm9yIGFib3ZlKVxuICAgIGlmICh0aGlzLl9yZXRyaWVzICE9PSByZXRyaWVzKSByZXR1cm47XG4gICAgLy8gaWYgd2UndmUgcmVjZWl2ZWQgYSByZXNwb25zZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gbGV0XG4gICAgLy8gYW4gZXJyb3IgaW4gdGhlIHJlcXVlc3QgYmxvdyB1cCB0aGUgcmVzcG9uc2VcbiAgICBpZiAodGhpcy5yZXNwb25zZSkgcmV0dXJuO1xuICAgIHRoaXMuY2FsbGJhY2soZXJyb3IpO1xuICB9KTtcblxuICAvLyBhdXRoXG4gIGlmICh1cmwudXNlcm5hbWUgfHwgdXJsLnBhc3N3b3JkKSB7XG4gICAgdGhpcy5hdXRoKHVybC51c2VybmFtZSwgdXJsLnBhc3N3b3JkKTtcbiAgfVxuXG4gIGlmICh0aGlzLnVzZXJuYW1lICYmIHRoaXMucGFzc3dvcmQpIHtcbiAgICB0aGlzLmF1dGgodGhpcy51c2VybmFtZSwgdGhpcy5wYXNzd29yZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmhlYWRlcikge1xuICAgIGlmIChoYXNPd24odGhpcy5oZWFkZXIsIGtleSkpIHJlcS5zZXRIZWFkZXIoa2V5LCB0aGlzLmhlYWRlcltrZXldKTtcbiAgfVxuXG4gIC8vIGFkZCBjb29raWVzXG4gIGlmICh0aGlzLmNvb2tpZXMpIHtcbiAgICBpZiAoaGFzT3duKHRoaXMuX2hlYWRlciwgJ2Nvb2tpZScpKSB7XG4gICAgICAvLyBtZXJnZVxuICAgICAgY29uc3QgdGVtcG9yYXJ5SmFyID0gbmV3IENvb2tpZUphci5Db29raWVKYXIoKTtcbiAgICAgIHRlbXBvcmFyeUphci5zZXRDb29raWVzKHRoaXMuX2hlYWRlci5jb29raWUuc3BsaXQoJzsgJykpO1xuICAgICAgdGVtcG9yYXJ5SmFyLnNldENvb2tpZXModGhpcy5jb29raWVzLnNwbGl0KCc7ICcpKTtcbiAgICAgIHJlcS5zZXRIZWFkZXIoXG4gICAgICAgICdDb29raWUnLFxuICAgICAgICB0ZW1wb3JhcnlKYXIuZ2V0Q29va2llcyhDb29raWVKYXIuQ29va2llQWNjZXNzSW5mby5BbGwpLnRvVmFsdWVTdHJpbmcoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLnNldEhlYWRlcignQ29va2llJywgdGhpcy5jb29raWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVxO1xufTtcblxuLyoqXG4gKiBJbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggYGVycmAgYW5kIGByZXNgXG4gKiBhbmQgaGFuZGxlIGFyaXR5IGNoZWNrLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzKSB7XG4gIGlmICh0aGlzLl9zaG91bGRSZXRyeShlcnJvciwgcmVzKSkge1xuICAgIHJldHVybiB0aGlzLl9yZXRyeSgpO1xuICB9XG5cbiAgLy8gQXZvaWQgdGhlIGVycm9yIHdoaWNoIGlzIGVtaXR0ZWQgZnJvbSAnc29ja2V0IGhhbmcgdXAnIHRvIGNhdXNlIHRoZSBmbiB1bmRlZmluZWQgZXJyb3Igb24gSlMgcnVudGltZS5cbiAgY29uc3QgZm4gPSB0aGlzLl9jYWxsYmFjayB8fCBub29wO1xuICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICBpZiAodGhpcy5jYWxsZWQpIHJldHVybiBjb25zb2xlLndhcm4oJ3N1cGVyYWdlbnQ6IGRvdWJsZSBjYWxsYmFjayBidWcnKTtcbiAgdGhpcy5jYWxsZWQgPSB0cnVlO1xuXG4gIGlmICghZXJyb3IpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLl9pc1Jlc3BvbnNlT0socmVzKSkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9ICdVbnN1Y2Nlc3NmdWwgSFRUUCByZXNwb25zZSc7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBtZXNzYWdlID0gaHR0cC5TVEFUVVNfQ09ERVNbcmVzLnN0YXR1c10gfHwgbWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICBlcnJvci5zdGF0dXMgPSByZXMgPyByZXMuc3RhdHVzIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICBlcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXMgfHwgKHJlcyA/IHJlcy5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBvdXRzaWRlIHRyeS9jYXRjaFxuICAvLyB0byBhdm9pZCBkb3VibGUgY2FsbGJhY2tcbiAgaWYgKCFlcnJvcikge1xuICAgIHJldHVybiBmbihudWxsLCByZXMpO1xuICB9XG5cbiAgZXJyb3IucmVzcG9uc2UgPSByZXM7XG4gIGlmICh0aGlzLl9tYXhSZXRyaWVzKSBlcnJvci5yZXRyaWVzID0gdGhpcy5fcmV0cmllcyAtIDE7XG5cbiAgLy8gb25seSBlbWl0IGVycm9yIGV2ZW50IGlmIHRoZXJlIGlzIGEgbGlzdGVuZXJcbiAgLy8gb3RoZXJ3aXNlIHdlIGFzc3VtZSB0aGUgY2FsbGJhY2sgdG8gYC5lbmQoKWAgd2lsbCBnZXQgdGhlIGVycm9yXG4gIGlmIChlcnJvciAmJiB0aGlzLmxpc3RlbmVycygnZXJyb3InKS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgfVxuXG4gIGZuKGVycm9yLCByZXMpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIGhvc3Qgb2JqZWN0LFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogaG9zdCBvYmplY3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGlzIGEgaG9zdCBvYmplY3RcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5SZXF1ZXN0LnByb3RvdHlwZS5faXNIb3N0ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIEJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgU3RyZWFtIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgRm9ybURhdGFcbiAgKTtcbn07XG5cbi8qKlxuICogSW5pdGlhdGUgcmVxdWVzdCwgaW52b2tpbmcgY2FsbGJhY2sgYGZuKGVyciwgcmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuX2VtaXRSZXNwb25zZSA9IGZ1bmN0aW9uIChib2R5LCBmaWxlcykge1xuICBjb25zdCByZXNwb25zZSA9IG5ldyBSZXNwb25zZSh0aGlzKTtcbiAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdExpc3Q7XG4gIGlmICh1bmRlZmluZWQgIT09IGJvZHkpIHtcbiAgICByZXNwb25zZS5ib2R5ID0gYm9keTtcbiAgfVxuXG4gIHJlc3BvbnNlLmZpbGVzID0gZmlsZXM7XG4gIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICByZXNwb25zZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImVuZCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLCBzbyBpdCdzIHRvbyBsYXRlIHRvIHN0YXJ0IHBpcGluZ1wiXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICB0aGlzLmVtaXQoJ3Jlc3BvbnNlJywgcmVzcG9uc2UpO1xuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG4vKipcbiAqIEVtaXQgYHJlZGlyZWN0YCBldmVudCwgcGFzc2luZyBhbiBpbnN0YW5jZW9mIGBSZXNwb25zZWAuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuX2VtaXRSZWRpcmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UodGhpcyk7XG4gIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0TGlzdDtcbiAgdGhpcy5lbWl0KCdyZWRpcmVjdCcsIHJlc3BvbnNlKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChmbikge1xuICB0aGlzLnJlcXVlc3QoKTtcbiAgZGVidWcoJyVzICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsKTtcblxuICBpZiAodGhpcy5fZW5kQ2FsbGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJy5lbmQoKSB3YXMgY2FsbGVkIHR3aWNlLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gc3VwZXJhZ2VudCdcbiAgICApO1xuICB9XG5cbiAgdGhpcy5fZW5kQ2FsbGVkID0gdHJ1ZTtcblxuICAvLyBzdG9yZSBjYWxsYmFja1xuICB0aGlzLl9jYWxsYmFjayA9IGZuIHx8IG5vb3A7XG5cbiAgdGhpcy5fZW5kKCk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fYWJvcnRlZClcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhcbiAgICAgIG5ldyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCBldmVuIGJlZm9yZSAuZW5kKCkgd2FzIGNhbGxlZCcpXG4gICAgKTtcblxuICBsZXQgZGF0YSA9IHRoaXMuX2RhdGE7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gdGhpcztcblxuICB0aGlzLl9zZXRUaW1lb3V0cygpO1xuXG4gIC8vIGJvZHlcbiAgaWYgKG1ldGhvZCAhPT0gJ0hFQUQnICYmICFyZXEuX2hlYWRlclNlbnQpIHtcbiAgICAvLyBzZXJpYWxpemUgc3R1ZmZcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICAgIC8vIFBhcnNlIG91dCBqdXN0IHRoZSBjb250ZW50IHR5cGUgZnJvbSB0aGUgaGVhZGVyIChpZ25vcmUgdGhlIGNoYXJzZXQpXG4gICAgICBpZiAoY29udGVudFR5cGUpIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXTtcbiAgICAgIGxldCBzZXJpYWxpemUgPSB0aGlzLl9zZXJpYWxpemVyIHx8IGV4cG9ydHMuc2VyaWFsaXplW2NvbnRlbnRUeXBlXTtcbiAgICAgIGlmICghc2VyaWFsaXplICYmIGlzSlNPTihjb250ZW50VHlwZSkpIHtcbiAgICAgICAgc2VyaWFsaXplID0gZXhwb3J0cy5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlcmlhbGl6ZSkgZGF0YSA9IHNlcmlhbGl6ZShkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBjb250ZW50LWxlbmd0aFxuICAgIGlmIChkYXRhICYmICFyZXEuZ2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSB7XG4gICAgICByZXEuc2V0SGVhZGVyKFxuICAgICAgICAnQ29udGVudC1MZW5ndGgnLFxuICAgICAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YSkgPyBkYXRhLmxlbmd0aCA6IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlc3BvbnNlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHJlcS5vbmNlKCdyZXNwb25zZScsIChyZXMpID0+IHtcbiAgICBkZWJ1ZygnJXMgJXMgLT4gJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwsIHJlcy5zdGF0dXNDb2RlKTtcblxuICAgIGlmICh0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waXBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heCA9IHRoaXMuX21heFJlZGlyZWN0cztcbiAgICBjb25zdCBtaW1lID0gdXRpbHMudHlwZShyZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10gfHwgJycpIHx8ICd0ZXh0L3BsYWluJztcbiAgICBsZXQgdHlwZSA9IG1pbWUuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAodHlwZSkgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlwYXJ0ID0gdHlwZSA9PT0gJ211bHRpcGFydCc7XG4gICAgY29uc3QgcmVkaXJlY3QgPSBpc1JlZGlyZWN0KHJlcy5zdGF0dXNDb2RlKTtcbiAgICBjb25zdCByZXNwb25zZVR5cGUgPSB0aGlzLl9yZXNwb25zZVR5cGU7XG5cbiAgICB0aGlzLnJlcyA9IHJlcztcblxuICAgIC8vIHJlZGlyZWN0XG4gICAgaWYgKHJlZGlyZWN0ICYmIHRoaXMuX3JlZGlyZWN0cysrICE9PSBtYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdChyZXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2UoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gemxpYiBzdXBwb3J0XG4gICAgaWYgKHRoaXMuX3Nob3VsZERlY29tcHJlc3MocmVzKSkge1xuICAgICAgZGVjb21wcmVzcyhyZXEsIHJlcyk7XG4gICAgfVxuXG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuX2J1ZmZlcjtcbiAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgJiYgbWltZSBpbiBleHBvcnRzLmJ1ZmZlcikge1xuICAgICAgYnVmZmVyID0gQm9vbGVhbihleHBvcnRzLmJ1ZmZlclttaW1lXSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlciA9IHRoaXMuX3BhcnNlcjtcbiAgICBpZiAodW5kZWZpbmVkID09PSBidWZmZXIgJiYgcGFyc2VyKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiQSBjdXN0b20gc3VwZXJhZ2VudCBwYXJzZXIgaGFzIGJlZW4gc2V0LCBidXQgYnVmZmVyaW5nIHN0cmF0ZWd5IGZvciB0aGUgcGFyc2VyIGhhc24ndCBiZWVuIGNvbmZpZ3VyZWQuIENhbGwgYHJlcS5idWZmZXIodHJ1ZSBvciBmYWxzZSlgIG9yIHNldCBgc3VwZXJhZ2VudC5idWZmZXJbbWltZV0gPSB0cnVlIG9yIGZhbHNlYFwiXG4gICAgICApO1xuICAgICAgYnVmZmVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlcikge1xuICAgICAgaWYgKHJlc3BvbnNlVHlwZSkge1xuICAgICAgICBwYXJzZXIgPSBleHBvcnRzLnBhcnNlLmltYWdlOyAvLyBJdCdzIGFjdHVhbGx5IGEgZ2VuZXJpYyBCdWZmZXJcbiAgICAgICAgYnVmZmVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobXVsdGlwYXJ0KSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBmb3JtaWRhYmxlLmZvcm1pZGFibGUoKTtcbiAgICAgICAgcGFyc2VyID0gKHJlcywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBQYXNzVGhyb3VnaCBzdHJlYW0gdGhhdCBhY3RzIGFzIGEgcHJvcGVyIEhUVFAgcmVxdWVzdFxuICAgICAgICAgIGNvbnN0IGJyaWRnZVN0cmVhbSA9IG5ldyBTdHJlYW0uUGFzc1Rocm91Z2goKTtcblxuICAgICAgICAgIC8vIEFkZCBIVFRQIHJlcXVlc3QgcHJvcGVydGllcyBmcm9tIHRoZSBjdXJyZW50IHJlcXVlc3QgY29udGV4dFxuICAgICAgICAgIGJyaWRnZVN0cmVhbS5tZXRob2QgPSB0aGlzLm1ldGhvZCB8fCAnUE9TVCc7XG4gICAgICAgICAgYnJpZGdlU3RyZWFtLnVybCA9IHRoaXMudXJsIHx8ICcvJztcbiAgICAgICAgICBicmlkZ2VTdHJlYW0uaHR0cFZlcnNpb24gPSByZXMuaHR0cFZlcnNpb24gfHwgJzEuMSc7XG4gICAgICAgICAgYnJpZGdlU3RyZWFtLmhlYWRlcnMgPSByZXMuaGVhZGVycyB8fCB7fTtcbiAgICAgICAgICBicmlkZ2VTdHJlYW0uc29ja2V0ID0gcmVzLnNvY2tldCB8fCB7IHJlYWRhYmxlOiB0cnVlIH07XG5cbiAgICAgICAgICAvLyBQaXBlIHRoZSByZXNwb25zZSBkYXRhIHRocm91Z2ggdGhlIGJyaWRnZSBzdHJlYW1cbiAgICAgICAgICByZXMucGlwZShicmlkZ2VTdHJlYW0pO1xuXG4gICAgICAgICAgZm9ybS5wYXJzZShicmlkZ2VTdHJlYW0sIChlcnIsIGZpZWxkcywgZmlsZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXG4gICAgICAgICAgICAvLyBGb3JtaWRhYmxlIHYzIGFsd2F5cyByZXR1cm5zIGFycmF5cywgYnV0IFN1cGVyQWdlbnQgZXhwZWN0cyBzaW5nbGUgdmFsdWVzXG4gICAgICAgICAgICAvLyBGbGF0dGVuIHNpbmdsZS1pdGVtIGFycmF5cyB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWRGaWVsZHMgPSB7fTtcbiAgICAgICAgICAgIGlmIChmaWVsZHMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZHNba2V5XTtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWRGaWVsZHNba2V5XSA9IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkRmlsZXMgPSB7fTtcbiAgICAgICAgICAgIGlmIChmaWxlcykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsZXNba2V5XTtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWRGaWxlc1trZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXR1cm4gZmxhdHRlbmVkIGZpZWxkcyBhcyB0aGUgb2JqZWN0IHBhcmFtZXRlciB0byBtYXRjaCBTdXBlckFnZW50J3MgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBmbGF0dGVuZWRGaWVsZHMsIGZsYXR0ZW5lZEZpbGVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgYnVmZmVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNCaW5hcnkobWltZSkpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTtcbiAgICAgICAgYnVmZmVyID0gdHJ1ZTsgLy8gRm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGJ1ZmZlcmluZyBkZWZhdWx0IGlzIGFkLWhvYyBNSU1FLWRlcGVuZGVudFxuICAgICAgfSBlbHNlIGlmIChleHBvcnRzLnBhcnNlW21pbWVdKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2VbbWltZV07XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICBwYXJzZXIgPSBleHBvcnRzLnBhcnNlLnRleHQ7XG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlciAhPT0gZmFsc2U7XG4gICAgICAgIC8vIGV2ZXJ5b25lIHdhbnRzIHRoZWlyIG93biB3aGl0ZS1sYWJlbGVkIGpzb25cbiAgICAgIH0gZWxzZSBpZiAoaXNKU09OKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2VbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyICE9PSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UudGV4dDtcbiAgICAgIH0gZWxzZSBpZiAodW5kZWZpbmVkID09PSBidWZmZXIpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTsgLy8gSXQncyBhY3R1YWxseSBhIGdlbmVyaWMgQnVmZmVyXG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYnkgZGVmYXVsdCBvbmx5IGJ1ZmZlciB0ZXh0LyosIGpzb24gYW5kIG1lc3NlZCB1cCB0aGluZyBmcm9tIGhlbGxcbiAgICBpZiAoKHVuZGVmaW5lZCA9PT0gYnVmZmVyICYmIGlzVGV4dChtaW1lKSkgfHwgaXNKU09OKG1pbWUpKSB7XG4gICAgICBidWZmZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc0J1ZmZlcmVkID0gYnVmZmVyO1xuICAgIGxldCBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgaWYgKGJ1ZmZlcikge1xuICAgICAgLy8gUHJvdGVjdGlvbmEgYWdhaW5zdCB6aXAgYm9tYnMgYW5kIG90aGVyIG51aXNhbmNlXG4gICAgICBsZXQgcmVzcG9uc2VCeXRlc0xlZnQgPSB0aGlzLl9tYXhSZXNwb25zZVNpemUgfHwgMjAwMDAwMDAwO1xuICAgICAgcmVzLm9uKCdkYXRhJywgKGJ1ZikgPT4ge1xuICAgICAgICByZXNwb25zZUJ5dGVzTGVmdCAtPSBidWYuYnl0ZUxlbmd0aCB8fCBidWYubGVuZ3RoID4gMCA/IGJ1Zi5sZW5ndGggOiAwO1xuICAgICAgICBpZiAocmVzcG9uc2VCeXRlc0xlZnQgPCAwKSB7XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIHByb3BhZ2F0ZSB0aHJvdWdoIGVycm9yIGV2ZW50XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ01heGltdW0gcmVzcG9uc2Ugc2l6ZSByZWFjaGVkJyk7XG4gICAgICAgICAgZXJyb3IuY29kZSA9ICdFVE9PTEFSR0UnO1xuICAgICAgICAgIC8vIFBhcnNlcnMgYXJlbid0IHJlcXVpcmVkIHRvIG9ic2VydmUgZXJyb3IgZXZlbnQsXG4gICAgICAgICAgLy8gc28gd291bGQgaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3NcbiAgICAgICAgICBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgICAgICAgLy8gV2lsbCBub3QgZW1pdCBlcnJvciBldmVudFxuICAgICAgICAgIHJlcy5kZXN0cm95KGVycm9yKTtcbiAgICAgICAgICAvLyBzbyB3ZSBkbyBjYWxsYmFjayBub3dcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrKGVycm9yLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVW5idWZmZXJlZCBwYXJzZXJzIGFyZSBzdXBwb3NlZCB0byBlbWl0IHJlc3BvbnNlIGVhcmx5LFxuICAgICAgICAvLyB3aGljaCBpcyB3ZWlyZCBCVFcsIGJlY2F1c2UgcmVzcG9uc2UuYm9keSB3b24ndCBiZSB0aGVyZS5cbiAgICAgICAgcGFyc2VySGFuZGxlc0VuZCA9IGJ1ZmZlcjtcblxuICAgICAgICBwYXJzZXIocmVzLCAoZXJyb3IsIG9iamVjdCwgZmlsZXMpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy50aW1lZG91dCkge1xuICAgICAgICAgICAgLy8gVGltZW91dCBoYXMgYWxyZWFkeSBoYW5kbGVkIGFsbCBjYWxsYmFja3NcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJbnRlbnRpb25hbCAobm9uLXRpbWVvdXQpIGFib3J0IGlzIHN1cHBvc2VkIHRvIHByZXNlcnZlIHBhcnRpYWwgcmVzcG9uc2UsXG4gICAgICAgICAgLy8gZXZlbiBpZiBpdCBkb2Vzbid0IHBhcnNlLlxuICAgICAgICAgIGlmIChlcnJvciAmJiAhdGhpcy5fYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJzZXJIYW5kbGVzRW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2Uob2JqZWN0LCBmaWxlcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG5cbiAgICAvLyB1bmJ1ZmZlcmVkXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGRlYnVnKCd1bmJ1ZmZlcmVkICVzICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsKTtcbiAgICAgIHRoaXMuY2FsbGJhY2sobnVsbCwgdGhpcy5fZW1pdFJlc3BvbnNlKCkpO1xuICAgICAgaWYgKG11bHRpcGFydCkgcmV0dXJuOyAvLyBhbGxvdyBtdWx0aXBhcnQgdG8gaGFuZGxlIGVuZCBldmVudFxuICAgICAgcmVzLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZGVidWcoJ2VuZCAlcyAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCk7XG4gICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGluZyBldmVudHNcbiAgICByZXMub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIHBhcnNlckhhbmRsZXNFbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2FsbGJhY2soZXJyb3IsIG51bGwpO1xuICAgIH0pO1xuICAgIGlmICghcGFyc2VySGFuZGxlc0VuZClcbiAgICAgIHJlcy5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGRlYnVnKCdlbmQgJXMgJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwpO1xuICAgICAgICAvLyBUT0RPOiB1bmxlc3MgYnVmZmVyaW5nIGVtaXQgZWFybGllciB0byBzdHJlYW1cbiAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2UoKSk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdyZXF1ZXN0JywgdGhpcyk7XG5cbiAgY29uc3QgZ2V0UHJvZ3Jlc3NNb25pdG9yID0gKCkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0cnVlO1xuICAgIGNvbnN0IHRvdGFsID0gcmVxLmdldEhlYWRlcignQ29udGVudC1MZW5ndGgnKTtcbiAgICBsZXQgbG9hZGVkID0gMDtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFN0cmVhbS5UcmFuc2Zvcm0oKTtcbiAgICBwcm9ncmVzcy5fdHJhbnNmb3JtID0gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spID0+IHtcbiAgICAgIGxvYWRlZCArPSBjaHVuay5sZW5ndGg7XG4gICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywge1xuICAgICAgICBkaXJlY3Rpb246ICd1cGxvYWQnLFxuICAgICAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgICAgICBsb2FkZWQsXG4gICAgICAgIHRvdGFsXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGNodW5rKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9O1xuXG4gIGNvbnN0IGJ1ZmZlclRvQ2h1bmtzID0gKGJ1ZmZlcikgPT4ge1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IDE2ICogMTAyNDsgLy8gZGVmYXVsdCBoaWdoV2F0ZXJNYXJrIHZhbHVlXG4gICAgY29uc3QgY2h1bmtpbmcgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IHRvdGFsTGVuZ3RoICUgY2h1bmtTaXplO1xuICAgIGNvbnN0IGN1dG9mZiA9IHRvdGFsTGVuZ3RoIC0gcmVtYWluZGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXRvZmY7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGJ1ZmZlci5zbGljZShpLCBpICsgY2h1bmtTaXplKTtcbiAgICAgIGNodW5raW5nLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIGlmIChyZW1haW5kZXIgPiAwKSB7XG4gICAgICBjb25zdCByZW1haW5kZXJCdWZmZXIgPSBidWZmZXIuc2xpY2UoLXJlbWFpbmRlcik7XG4gICAgICBjaHVua2luZy5wdXNoKHJlbWFpbmRlckJ1ZmZlcik7XG4gICAgfVxuXG4gICAgY2h1bmtpbmcucHVzaChudWxsKTsgLy8gbm8gbW9yZSBkYXRhXG5cbiAgICByZXR1cm4gY2h1bmtpbmc7XG4gIH07XG5cbiAgLy8gaWYgYSBGb3JtRGF0YSBpbnN0YW5jZSBnb3QgY3JlYXRlZCwgdGhlbiB3ZSBzZW5kIHRoYXQgYXMgdGhlIHJlcXVlc3QgYm9keVxuICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuX2Zvcm1EYXRhO1xuICBpZiAoZm9ybURhdGEpIHtcbiAgICAvLyBzZXQgaGVhZGVyc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBmb3JtRGF0YS5nZXRIZWFkZXJzKCk7XG4gICAgZm9yIChjb25zdCBpIGluIGhlYWRlcnMpIHtcbiAgICAgIGlmIChoYXNPd24oaGVhZGVycywgaSkpIHtcbiAgICAgICAgZGVidWcoJ3NldHRpbmcgRm9ybURhdGEgaGVhZGVyOiBcIiVzOiAlc1wiJywgaSwgaGVhZGVyc1tpXSk7XG4gICAgICAgIHJlcS5zZXRIZWFkZXIoaSwgaGVhZGVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXR0ZW1wdCB0byBnZXQgXCJDb250ZW50LUxlbmd0aFwiIGhlYWRlclxuICAgIGZvcm1EYXRhLmdldExlbmd0aCgoZXJyb3IsIGxlbmd0aCkgPT4ge1xuICAgICAgLy8gVE9ETzogQWRkIGNodW5rZWQgZW5jb2Rpbmcgd2hlbiBubyBsZW5ndGggKGlmIGVycilcbiAgICAgIGlmIChlcnJvcikgZGVidWcoJ2Zvcm1EYXRhLmdldExlbmd0aCBoYWQgZXJyb3InLCBlcnJvciwgbGVuZ3RoKTtcblxuICAgICAgZGVidWcoJ2dvdCBGb3JtRGF0YSBDb250ZW50LUxlbmd0aDogJXMnLCBsZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJlcS5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgZm9ybURhdGEucGlwZShnZXRQcm9ncmVzc01vbml0b3IoKSkucGlwZShyZXEpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIGJ1ZmZlclRvQ2h1bmtzKGRhdGEpLnBpcGUoZ2V0UHJvZ3Jlc3NNb25pdG9yKCkpLnBpcGUocmVxKTtcbiAgfSBlbHNlIHtcbiAgICByZXEuZW5kKGRhdGEpO1xuICB9XG59O1xuXG4vLyBDaGVjayB3aGV0aGVyIHJlc3BvbnNlIGhhcyBhIG5vbi0wLXNpemVkIGd6aXAtZW5jb2RlZCBib2R5XG5SZXF1ZXN0LnByb3RvdHlwZS5fc2hvdWxkRGVjb21wcmVzcyA9IChyZXMpID0+IHtcbiAgcmV0dXJuIGhhc05vbkVtcHR5UmVzcG9uc2VDb250ZW50KHJlcykgJiYgKGlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nKHJlcykgfHwgaXNCcm90bGlFbmNvZGluZyhyZXMpKTtcbn07XG5cblxuLyoqXG4gKiBPdmVycmlkZXMgRE5TIGZvciBzZWxlY3RlZCBob3N0bmFtZXMuIFRha2VzIG9iamVjdCBtYXBwaW5nIGhvc3RuYW1lcyB0byBJUCBhZGRyZXNzZXMuXG4gKlxuICogV2hlbiBtYWtpbmcgYSByZXF1ZXN0IHRvIGEgVVJMIHdpdGggYSBob3N0bmFtZSBleGFjdGx5IG1hdGNoaW5nIGEga2V5IGluIHRoZSBvYmplY3QsXG4gKiB1c2UgdGhlIGdpdmVuIElQIGFkZHJlc3MgdG8gY29ubmVjdCwgaW5zdGVhZCBvZiB1c2luZyBETlMgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUuXG4gKlxuICogQSBzcGVjaWFsIGhvc3QgYCpgIG1hdGNoZXMgZXZlcnkgaG9zdG5hbWUgKGtlZXAgcmVkaXJlY3RzIGluIG1pbmQhKVxuICpcbiAqICAgICAgcmVxdWVzdC5jb25uZWN0KHtcbiAqICAgICAgICAndGVzdC5leGFtcGxlLmNvbSc6ICcxMjcuMC4wLjEnLFxuICogICAgICAgICdpcHY2LmV4YW1wbGUuY29tJzogJzo6MScsXG4gKiAgICAgIH0pXG4gKi9cblJlcXVlc3QucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoY29ubmVjdE92ZXJyaWRlKSB7XG4gIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IHsgJyonOiBjb25uZWN0T3ZlcnJpZGUgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IGNvbm5lY3RPdmVycmlkZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jb25uZWN0T3ZlcnJpZGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnRydXN0TG9jYWxob3N0ID0gZnVuY3Rpb24gKHRvZ2dsZSkge1xuICB0aGlzLl90cnVzdExvY2FsaG9zdCA9IHRvZ2dsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRvZ2dsZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBnZW5lcmF0ZSBIVFRQIHZlcmIgbWV0aG9kc1xuaWYgKCFtZXRob2RzLmluY2x1ZGVzKCdkZWwnKSkge1xuICAvLyBjcmVhdGUgYSBjb3B5IHNvIHdlIGRvbid0IGNhdXNlIGNvbmZsaWN0cyB3aXRoXG4gIC8vIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBtZXRob2RzIHBhY2thZ2UgYW5kXG4gIC8vIG5wbSAzLnhcbiAgbWV0aG9kcyA9IFsuLi5tZXRob2RzXTtcbiAgbWV0aG9kcy5wdXNoKCdkZWwnKTtcbn1cblxuZm9yIChsZXQgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbmFtZSA9IG1ldGhvZDtcbiAgbWV0aG9kID0gbWV0aG9kID09PSAnZGVsJyA/ICdkZWxldGUnIDogbWV0aG9kO1xuXG4gIG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICByZXF1ZXN0W25hbWVdID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QobWV0aG9kLCB1cmwpO1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm4gPSBkYXRhO1xuICAgICAgZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICAgIHJlcXVlc3RfLnF1ZXJ5KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyB0ZXh0IGFuZCBzaG91bGQgYmUgYnVmZmVyZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGlzVGV4dChtaW1lKSB7XG4gIGNvbnN0IHBhcnRzID0gbWltZS5zcGxpdCgnLycpO1xuICBsZXQgdHlwZSA9IHBhcnRzWzBdO1xuICBpZiAodHlwZSkgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGxldCBzdWJ0eXBlID0gcGFydHNbMV07XG4gIGlmIChzdWJ0eXBlKSBzdWJ0eXBlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICByZXR1cm4gdHlwZSA9PT0gJ3RleHQnIHx8IHN1YnR5cGUgPT09ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnO1xufVxuXG4vLyBUaGlzIGlzIG5vdCBhIGNhdGNoYWxsLCBidXQgYSBzdGFydC4gSXQgbWlnaHQgYmUgdXNlZnVsXG4vLyBpbiB0aGUgbG9uZyBydW4gdG8gaGF2ZSBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIGJpbmFyeVxuLy8gY29udGVudCB0eXBlcyBmcm9tIGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL21lZGlhLXR5cGVzLnhodG1sXG5mdW5jdGlvbiBpc0JpbmFyeShtaW1lKSB7XG4gIGxldCBbcmVnaXN0cnksIG5hbWVdID0gbWltZS5zcGxpdCgnLycpO1xuICBpZiAocmVnaXN0cnkpIHJlZ2lzdHJ5ID0gcmVnaXN0cnkudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGlmIChuYW1lKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIChcbiAgICBbJ2F1ZGlvJywgJ2ZvbnQnLCAnaW1hZ2UnLCAndmlkZW8nXS5pbmNsdWRlcyhyZWdpc3RyeSkgfHxcbiAgICBbJ2d6JywgJ2d6aXAnXS5pbmNsdWRlcyhuYW1lKVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyBqc29uIG9yIGhhcyAranNvbiBzdHJ1Y3R1cmVkIHN5bnRheCBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0pTT04obWltZSkge1xuICAvLyBzaG91bGQgbWF0Y2ggL2pzb24gb3IgK2pzb25cbiAgLy8gYnV0IG5vdCAvanNvbi1zZXFcbiAgcmV0dXJuIC9bLytdanNvbigkfFteLVxcd10pL2kudGVzdChtaW1lKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB3ZSBzaG91bGQgZm9sbG93IHRoZSByZWRpcmVjdCBgY29kZWAuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc1JlZGlyZWN0KGNvZGUpIHtcbiAgcmV0dXJuIFszMDEsIDMwMiwgMzAzLCAzMDUsIDMwNywgMzA4XS5pbmNsdWRlcyhjb2RlKTtcbn1cblxuZnVuY3Rpb24gaGFzTm9uRW1wdHlSZXNwb25zZUNvbnRlbnQocmVzKSB7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3Qgc3VwcG9zZWQgdG8gaGF2ZSBhbnkgYm9keVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGhlYWRlciBjb250ZW50IGlzIGEgc3RyaW5nLCBhbmQgZGlzdGluY3Rpb24gYmV0d2VlbiAwIGFuZCBubyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsXG4gIGlmIChyZXMuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSA9PT0gJzAnKSB7XG4gICAgLy8gV2Uga25vdyB0aGF0IHRoZSBib2R5IGlzIGVtcHR5ICh1bmZvcnR1bmF0ZWx5LCB0aGlzIGNoZWNrIGRvZXMgbm90IGNvdmVyIGNodW5rZWQgZW5jb2RpbmcpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBOztBQUVBLE1BQU07RUFBRUE7QUFBTyxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDakMsTUFBTUMsTUFBTSxHQUFHRCxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ2hDLE1BQU1FLEtBQUssR0FBR0YsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUM5QixNQUFNRyxJQUFJLEdBQUdILE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUksRUFBRSxHQUFHSixPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1LLElBQUksR0FBR0wsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNTSxJQUFJLEdBQUdOLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTU8sRUFBRSxHQUFHUCxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1RLElBQUksR0FBR1IsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QixJQUFJUyxPQUFPLEdBQUdULE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDaEMsTUFBTVUsUUFBUSxHQUFHVixPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3JDLE1BQU1X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","module.exports = function(size) {\n return new LruCache(size)\n}\n\nfunction LruCache(size) {\n this.capacity = size | 0\n this.map = Object.create(null)\n this.list = new DoublyLinkedList()\n}\n\nLruCache.prototype.get = function(key) {\n var node = this.map[key]\n if (node == null) return undefined\n this.used(node)\n return node.val\n}\n\nLruCache.prototype.set = function(key, val) {\n var node = this.map[key]\n if (node != null) {\n node.val = val\n } else {\n if (!this.capacity) this.prune()\n if (!this.capacity) return false\n node = new DoublyLinkedNode(key, val)\n this.map[key] = node\n this.capacity--\n }\n this.used(node)\n return true\n}\n\nLruCache.prototype.used = function(node) {\n this.list.moveToFront(node)\n}\n\nLruCache.prototype.prune = function() {\n var node = this.list.pop()\n if (node != null) {\n delete this.map[node.key]\n this.capacity++\n }\n}\n\n\nfunction DoublyLinkedList() {\n this.firstNode = null\n this.lastNode = null\n}\n\nDoublyLinkedList.prototype.moveToFront = function(node) {\n if (this.firstNode == node) return\n\n this.remove(node)\n\n if (this.firstNode == null) {\n this.firstNode = node\n this.lastNode = node\n node.prev = null\n node.next = null\n } else {\n node.prev = null\n node.next = this.firstNode\n node.next.prev = node\n this.firstNode = node\n }\n}\n\nDoublyLinkedList.prototype.pop = function() {\n var lastNode = this.lastNode\n if (lastNode != null) {\n this.remove(lastNode)\n }\n return lastNode\n}\n\nDoublyLinkedList.prototype.remove = function(node) {\n if (this.firstNode == node) {\n this.firstNode = node.next\n } else if (node.prev != null) {\n node.prev.next = node.next\n }\n if (this.lastNode == node) {\n this.lastNode = node.prev\n } else if (node.next != null) {\n node.next.prev = node.prev\n }\n}\n\n\nfunction DoublyLinkedNode(key, val) {\n this.key = key\n this.val = val\n this.prev = null\n this.next = null\n}\n","var aws4 = exports,\n url = require('url'),\n querystring = require('querystring'),\n crypto = require('crypto'),\n lru = require('./lru'),\n credentialsCache = lru(1000)\n\n// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html\n\nfunction hmac(key, string, encoding) {\n return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding)\n}\n\nfunction hash(string, encoding) {\n return crypto.createHash('sha256').update(string, 'utf8').digest(encoding)\n}\n\n// This function assumes the string has already been percent encoded\nfunction encodeRfc3986(urlEncodedString) {\n return urlEncodedString.replace(/[!'()*]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\nfunction encodeRfc3986Full(str) {\n return encodeRfc3986(encodeURIComponent(str))\n}\n\n// A bit of a combination of:\n// https://github.com/aws/aws-sdk-java-v2/blob/dc695de6ab49ad03934e1b02e7263abbd2354be0/core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java#L59\n// https://github.com/aws/aws-sdk-js/blob/18cb7e5b463b46239f9fdd4a65e2ff8c81831e8f/lib/signers/v4.js#L191-L199\n// https://github.com/mhart/aws4fetch/blob/b3aed16b6f17384cf36ea33bcba3c1e9f3bdfefd/src/main.js#L25-L34\nvar HEADERS_TO_IGNORE = {\n 'authorization': true,\n 'connection': true,\n 'x-amzn-trace-id': true,\n 'user-agent': true,\n 'expect': true,\n 'presigned-expires': true,\n 'range': true,\n}\n\n// request: { path | body, [host], [method], [headers], [service], [region] }\n// credentials: { accessKeyId, secretAccessKey, [sessionToken] }\nfunction RequestSigner(request, credentials) {\n\n if (typeof request === 'string') request = url.parse(request)\n\n var headers = request.headers = Object.assign({}, (request.headers || {})),\n hostParts = (!this.service || !this.region) && this.matchHost(request.hostname || request.host || headers.Host || headers.host)\n\n this.request = request\n this.credentials = credentials || this.defaultCredentials()\n\n this.service = request.service || hostParts[0] || ''\n this.region = request.region || hostParts[1] || 'us-east-1'\n\n // SES uses a different domain from the service name\n if (this.service === 'email') this.service = 'ses'\n\n if (!request.method && request.body)\n request.method = 'POST'\n\n if (!headers.Host && !headers.host) {\n headers.Host = request.hostname || request.host || this.createHost()\n\n // If a port is specified explicitly, use it as is\n if (request.port)\n headers.Host += ':' + request.port\n }\n if (!request.hostname && !request.host)\n request.hostname = headers.Host || headers.host\n\n this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT'\n\n this.extraHeadersToIgnore = request.extraHeadersToIgnore || Object.create(null)\n this.extraHeadersToInclude = request.extraHeadersToInclude || Object.create(null)\n}\n\nRequestSigner.prototype.matchHost = function(host) {\n var match = (host || '').match(/([^\\.]{1,63})\\.(?:([^\\.]{0,63})\\.)?amazonaws\\.com(\\.cn)?$/)\n var hostParts = (match || []).slice(1, 3)\n\n // ES's hostParts are sometimes the other way round, if the value that is expected\n // to be region equals ‘es’ switch them back\n // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com\n if (hostParts[1] === 'es' || hostParts[1] === 'aoss')\n hostParts = hostParts.reverse()\n\n if (hostParts[1] == 's3') {\n hostParts[0] = 's3'\n hostParts[1] = 'us-east-1'\n } else {\n for (var i = 0; i < 2; i++) {\n if (/^s3-/.test(hostParts[i])) {\n hostParts[1] = hostParts[i].slice(3)\n hostParts[0] = 's3'\n break\n }\n }\n }\n\n return hostParts\n}\n\n// http://docs.aws.amazon.com/general/latest/gr/rande.html\nRequestSigner.prototype.isSingleRegion = function() {\n // Special case for S3 and SimpleDB in us-east-1\n if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true\n\n return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts']\n .indexOf(this.service) >= 0\n}\n\nRequestSigner.prototype.createHost = function() {\n var region = this.isSingleRegion() ? '' : '.' + this.region,\n subdomain = this.service === 'ses' ? 'email' : this.service\n return subdomain + region + '.amazonaws.com'\n}\n\nRequestSigner.prototype.prepareRequest = function() {\n this.parsePath()\n\n var request = this.request, headers = request.headers, query\n\n if (request.signQuery) {\n\n this.parsedPath.query = query = this.parsedPath.query || {}\n\n if (this.credentials.sessionToken)\n query['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !query['X-Amz-Expires'])\n query['X-Amz-Expires'] = 86400\n\n if (query['X-Amz-Date'])\n this.datetime = query['X-Amz-Date']\n else\n query['X-Amz-Date'] = this.getDateTime()\n\n query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'\n query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString()\n query['X-Amz-SignedHeaders'] = this.signedHeaders()\n\n } else {\n\n if (!request.doNotModifyHeaders && !this.isCodeCommitGit) {\n if (request.body && !headers['Content-Type'] && !headers['content-type'])\n headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\n\n if (request.body && !headers['Content-Length'] && !headers['content-length'])\n headers['Content-Length'] = Buffer.byteLength(request.body)\n\n if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token'])\n headers['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256'])\n headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex')\n\n if (headers['X-Amz-Date'] || headers['x-amz-date'])\n this.datetime = headers['X-Amz-Date'] || headers['x-amz-date']\n else\n headers['X-Amz-Date'] = this.getDateTime()\n }\n\n delete headers.Authorization\n delete headers.authorization\n }\n}\n\nRequestSigner.prototype.sign = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n if (this.request.signQuery) {\n this.parsedPath.query['X-Amz-Signature'] = this.signature()\n } else {\n this.request.headers.Authorization = this.authHeader()\n }\n\n this.request.path = this.formatPath()\n\n return this.request\n}\n\nRequestSigner.prototype.getDateTime = function() {\n if (!this.datetime) {\n var headers = this.request.headers,\n date = new Date(headers.Date || headers.date || new Date)\n\n this.datetime = date.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '')\n\n // Remove the trailing 'Z' on the timestamp string for CodeCommit git access\n if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1)\n }\n return this.datetime\n}\n\nRequestSigner.prototype.getDate = function() {\n return this.getDateTime().substr(0, 8)\n}\n\nRequestSigner.prototype.authHeader = function() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(),\n 'SignedHeaders=' + this.signedHeaders(),\n 'Signature=' + this.signature(),\n ].join(', ')\n}\n\nRequestSigner.prototype.signature = function() {\n var date = this.getDate(),\n cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(),\n kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey)\n if (!kCredentials) {\n kDate = hmac('AWS4' + this.credentials.secretAccessKey, date)\n kRegion = hmac(kDate, this.region)\n kService = hmac(kRegion, this.service)\n kCredentials = hmac(kService, 'aws4_request')\n credentialsCache.set(cacheKey, kCredentials)\n }\n return hmac(kCredentials, this.stringToSign(), 'hex')\n}\n\nRequestSigner.prototype.stringToSign = function() {\n return [\n 'AWS4-HMAC-SHA256',\n this.getDateTime(),\n this.credentialString(),\n hash(this.canonicalString(), 'hex'),\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalString = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n var pathStr = this.parsedPath.path,\n query = this.parsedPath.query,\n headers = this.request.headers,\n queryStr = '',\n normalizePath = this.service !== 's3',\n decodePath = this.service === 's3' || this.request.doNotEncodePath,\n decodeSlashesInPath = this.service === 's3',\n firstValOnly = this.service === 's3',\n bodyHash\n\n if (this.service === 's3' && this.request.signQuery) {\n bodyHash = 'UNSIGNED-PAYLOAD'\n } else if (this.isCodeCommitGit) {\n bodyHash = ''\n } else {\n bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] ||\n hash(this.request.body || '', 'hex')\n }\n\n if (query) {\n var reducedQuery = Object.keys(query).reduce(function(obj, key) {\n if (!key) return obj\n obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] :\n (firstValOnly ? query[key][0] : query[key])\n return obj\n }, {})\n var encodedQueryPieces = []\n Object.keys(reducedQuery).sort().forEach(function(key) {\n if (!Array.isArray(reducedQuery[key])) {\n encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key]))\n } else {\n reducedQuery[key].map(encodeRfc3986Full).sort()\n .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) })\n }\n })\n queryStr = encodedQueryPieces.join('&')\n }\n if (pathStr !== '/') {\n if (normalizePath) pathStr = pathStr.replace(/\\/{2,}/g, '/')\n pathStr = pathStr.split('/').reduce(function(path, piece) {\n if (normalizePath && piece === '..') {\n path.pop()\n } else if (!normalizePath || piece !== '.') {\n if (decodePath) piece = decodeURIComponent(piece.replace(/\\+/g, ' '))\n path.push(encodeRfc3986Full(piece))\n }\n return path\n }, []).join('/')\n if (pathStr[0] !== '/') pathStr = '/' + pathStr\n if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/')\n }\n\n return [\n this.request.method || 'GET',\n pathStr,\n queryStr,\n this.canonicalHeaders() + '\\n',\n this.signedHeaders(),\n bodyHash,\n ].join('\\n')\n}\n\nRequestSigner.prototype.filterHeaders = function() {\n var headers = this.request.headers,\n extraHeadersToInclude = this.extraHeadersToInclude,\n extraHeadersToIgnore = this.extraHeadersToIgnore\n this.filteredHeaders = Object.keys(headers)\n .map(function(key) { return [key.toLowerCase(), headers[key]] })\n .filter(function(entry) {\n return extraHeadersToInclude[entry[0]] ||\n (HEADERS_TO_IGNORE[entry[0]] == null && !extraHeadersToIgnore[entry[0]])\n })\n .sort(function(a, b) { return a[0] < b[0] ? -1 : 1 })\n}\n\nRequestSigner.prototype.canonicalHeaders = function() {\n if (!this.filteredHeaders) this.filterHeaders()\n\n return this.filteredHeaders.map(function(entry) {\n return entry[0] + ':' + entry[1].toString().trim().replace(/\\s+/g, ' ')\n }).join('\\n')\n}\n\nRequestSigner.prototype.signedHeaders = function() {\n if (!this.filteredHeaders) this.filterHeaders()\n\n return this.filteredHeaders.map(function(entry) { return entry[0] }).join(';')\n}\n\nRequestSigner.prototype.credentialString = function() {\n return [\n this.getDate(),\n this.region,\n this.service,\n 'aws4_request',\n ].join('/')\n}\n\nRequestSigner.prototype.defaultCredentials = function() {\n var env = process.env\n return {\n accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY,\n secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY,\n sessionToken: env.AWS_SESSION_TOKEN,\n }\n}\n\nRequestSigner.prototype.parsePath = function() {\n var path = this.request.path || '/'\n\n // S3 doesn't always encode characters > 127 correctly and\n // all services don't encode characters > 255 correctly\n // So if there are non-reserved chars (and it's not already all % encoded), just encode them all\n if (/[^0-9A-Za-z;,/?:@&=+$\\-_.!~*'()#%]/.test(path)) {\n path = encodeURI(decodeURI(path))\n }\n\n var queryIx = path.indexOf('?'),\n query = null\n\n if (queryIx >= 0) {\n query = querystring.parse(path.slice(queryIx + 1))\n path = path.slice(0, queryIx)\n }\n\n this.parsedPath = {\n path: path,\n query: query,\n }\n}\n\nRequestSigner.prototype.formatPath = function() {\n var path = this.parsedPath.path,\n query = this.parsedPath.query\n\n if (!query) return path\n\n // Services don't support empty query string keys\n if (query[''] != null) delete query['']\n\n return path + '?' + encodeRfc3986(querystring.stringify(query))\n}\n\naws4.RequestSigner = RequestSigner\n\naws4.sign = function(request, credentials) {\n return new RequestSigner(request, credentials).sign()\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n/* global encodeURIComponent */\n\n'use strict';\n\nexport default class ParaObject {\n constructor(id, type) {\n this.id = id || null;\n this.type = type || 'sysprop';\n this.name = 'ParaObject';\n this.stored = true;\n this.indexed = true;\n this.cached = true;\n this.version = 0;\n }\n /**\n * The id of an object. Usually an autogenerated unique string of numbers.\n *\n * @return the id\n */\n getId() {\n return this.id;\n }\n /**\n * Sets a new id. Must not be null or empty.\n *\n * @param {String} id the new id\n */\n setId(id) {\n this.id = id;\n }\n /**\n * The name of the object. Can be anything.\n *\n * @return {String} the name. default: [type id]\n */\n getName() {\n return this.name;\n }\n /**\n * Sets a new name. Must not be null or empty.\n *\n * @param {String} name the new name\n */\n setName(name) {\n this.name = name;\n }\n /**\n * The application name. Added to support multiple separate apps.\n * Every object must belong to an app.\n *\n * @return {String} the app id (name). default: para\n */\n getAppid() {\n return this.appid;\n }\n /**\n * Sets a new app name. Must not be null or empty.\n *\n * @param {String} appid the new app id (name)\n */\n setAppid(appid) {\n this.appid = appid;\n }\n /**\n * The id of the parent object.\n *\n * @return {String} the id of the parent or null\n */\n getParentid() {\n return this.parentid;\n }\n /**\n * Sets a new parent id. Must not be null or empty.\n *\n * @param {String} parentid a new id\n */\n setParentid(parentid) {\n this.parentid = parentid;\n }\n /**\n * The name of the object's class. This is equivalent to {@link Class#getSimpleName()}.toLowerCase().\n *\n * @return {String} the simple name of the class\n */\n getType() {\n return this.type;\n }\n /**\n * Sets a new object type. Must not be null or empty.\n *\n * @param {String} type a new type\n */\n setType(type) {\n this.type = type;\n }\n /**\n * The id of the user who created this. Should point to a {@link User} id.\n *\n * @return {String} the id or null\n */\n getCreatorid() {\n return this.creatorid;\n }\n /**\n * Sets a new creator id. Must not be null or empty.\n *\n * @param {String} creatorid a new id\n */\n setCreatorid(creatorid) {\n this.creatorid = creatorid;\n }\n /**\n * The URI of this object. For example: /user/123.\n *\n * @return {String} the URI\n */\n getObjectURI() {\n var def = '/' + urlEncode(this.getType());\n return this.id ? def + '/' + urlEncode(this.id) : def;\n }\n /**\n * The time when the object was created, in milliseconds.\n *\n * @return {Number} the timestamp of creation\n */\n getTimestamp() {\n return this.timestamp;\n }\n /**\n * Sets the timestamp.\n *\n * @param {Number} timestamp a new timestamp in milliseconds.\n */\n setTimestamp(timestamp) {\n this.timestamp = timestamp;\n }\n /**\n * The last time this object was updated. Timestamp in ms.\n *\n * @return {Number} timestamp in milliseconds\n */\n getUpdated() {\n return this.updated;\n }\n /**\n * Sets the last updated timestamp.\n *\n * @param {Number} updated a new timestamp\n */\n setUpdated(updated) {\n this.updated = updated;\n }\n /**\n * The tags associated with this object. Tags must not be null or empty.\n *\n * @return {Array} a set of tags, or an empty set\n */\n getTags() {\n return this.id;\n }\n /**\n * Merges the given tags with existing tags.\n *\n * @param {Array} tags the additional tags, or clears all tags if set to null\n */\n setTags(tags) {\n this.tags = tags;\n }\n /**\n * The votes associated with this object.\n *\n * @return {Number} votes or 0\n */\n getVotes() {\n return this.votes;\n }\n /**\n * Sets the votes.\n *\n * @param {Number} votes\n */\n setVotes(votes) {\n this.votes = votes;\n }\n /**\n * The version of this object.\n *\n * @return {Number} version\n */\n getVersion() {\n return this.version;\n }\n /**\n * Sets the version.\n *\n * @param {Number} version\n */\n setVersion(version) {\n this.version = version;\n }\n /**\n * Boolean flag which controls whether this object is stored\n * in the database or not. Default is true.\n *\n * @return {Boolean} true if this object is stored in DB.\n */\n getStored() {\n return this.stored;\n }\n /**\n * Sets the \"isStored\" flag.\n *\n * @param {Boolean} isStored when set to true, object is stored in DB.\n */\n setStored(isStored) {\n this.stored = isStored;\n }\n /**\n * Boolean flat which controls whether this object is indexed\n * by the search engine. Default is true.\n *\n * @return {Boolean} true if this object is indexed\n */\n getIndexed() {\n return this.indexed;\n }\n /**\n * Sets the \"isIndexed\" flag.\n *\n * @param {Boolean} isIndexed when set to true, object is indexed.\n */\n setIndexed(isIndexed) {\n this.indexed = isIndexed;\n }\n /**\n * Boolean flat which controls whether this object is cached.\n * Default is true.\n *\n * @return {Boolean} true if this object is cached on update() and create().\n */\n getCached() {\n return this.cached;\n }\n /**\n * Sets the \"isCached\" flag.\n *\n * @param {Boolean} isCached when set to true, object is cached.\n */\n setCached(isCached) {\n this.cached = isCached;\n }\n /**\n * Populates this object with data from a map.\n * @param {Object} map\n * @return {ParaObject} this\n */\n setFields(map) {\n if (map && map instanceof Object) {\n for (var key in map) {\n this[key] = map[key];\n }\n }\n return this;\n }\n}\n\nfunction urlEncode(path) {\n return encodeURIComponent(path).replace(/[!'()*]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n'use strict';\n\n/**\n * This class stores pagination data. It limits the results for queries in the DAO\n * and Search objects and also counts the total number of results that are returned.\n * @author Alex Bogdanovski <alex@erudika.com>\n * @param {Number} page page number to start from\n * @param {String} sortby sort by field\n * @param {Boolean} desc sort in descending or ascending order\n * @param {Number} limit limits the results\n *\n * @property {Number} count the total number of results\n * @property {String} lastKey reserved use\n * @property {Array} select selected fields filter for returning only part of an object\n * @returns {Pager} a pager\n */\nexport default class Pager {\n constructor(page, sortby, desc, limit) {\n this.page = page || 1;\n this.count = 0;\n this.sortby = sortby || null;\n this.desc = desc || true;\n this.limit = limit || 30;\n this.name = '';\n this.lastKey = null;\n this.select = null; // [field1,field2]\n }\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n'use strict';\n\n/**\n * Represents a validation constraint.\n * @author Alex Bogdanovski <alex@erudika.com>\n * @param {String} constraintName name\n * @param {Object} constraintPayload payload\n * @returns {Constraint}\n */\nexport default class Constraint {\n constructor(constraintName, constraintPayload) {\n var name = constraintName;\n var payload = constraintPayload;\n\n /**\n * The constraint name.\n * @returns {String} a name\n */\n this.getName = function () {\n return name;\n };\n\n /**\n * Sets the name of the constraint.\n * @param {String} n name\n */\n this.setName = function (n) {\n name = n;\n };\n\n /**\n * The payload (a map)\n * @returns {Object} an object\n */\n this.getPayload = function () {\n return payload;\n };\n\n /**\n * Sets the payload.\n * @param {Object} p the payload object\n */\n this.setPayload = function (p) {\n payload = p;\n };\n }\n /**\n * The 'required' constraint - marks a field as required.\n * @returns {Constraint}\n */\n static required() {\n return new Constraint('required', { message: 'messages.required' });\n }\n /**\n * The 'min' constraint - field must contain a number larger than or equal to min.\n * @param {Number} min the minimum value\n * @returns {Constraint}\n */\n static min(min) {\n return new Constraint('min', {\n value: min || 0,\n message: 'messages.min'\n });\n }\n /**\n * The 'max' constraint - field must contain a number smaller than or equal to max.\n * @param {Number} max the maximum value\n * @returns {Constraint}\n */\n static max(max) {\n return new Constraint('max', {\n value: max || 0,\n message: 'messages.max'\n });\n }\n /**\n * The 'size' constraint - field must be a String, Object or Array\n * with a given minimum and maximum length.\n * @param {Number} min the minimum length\n * @param {Number} max the maximum length\n * @returns {Constraint}\n */\n static size(min, max) {\n return new Constraint('size', {\n min: min || 0,\n max: max || 0,\n message: 'messages.size'\n });\n }\n /**\n * The 'digits' constraint - field must be a Number or String containing digits where the\n * number of digits in the integral part is limited by 'integer', and the\n * number of digits for the fractional part is limited\n * by 'fraction'.\n * @param {Number} i the max number of digits for the integral part\n * @param {Number} f the max number of digits for the fractional part\n * @returns {Constraint}\n */\n static digits(i, f) {\n return new Constraint('digits', {\n integer: i || 0,\n fraction: f || 0,\n message: 'messages.digits'\n });\n }\n /**\n * The 'pattern' constraint - field must contain a value matching a regular expression.\n * @param {String} regex a regular expression\n * @returns {Constraint}\n */\n static pattern(regex) {\n return new Constraint('pattern', {\n value: regex || '',\n message: 'messages.pattern'\n });\n }\n /**\n * The 'email' constraint - field must contain a valid email.\n * @returns {Constraint}\n */\n static email() {\n return new Constraint('email', { message: 'messages.email' });\n }\n /**\n * The 'falsy' constraint - field value must not be equal to 'true'.\n * @returns {Constraint}\n */\n static falsy() {\n return new Constraint('false', { message: 'messages.false' });\n }\n /**\n * The 'truthy' constraint - field value must be equal to 'true'.\n * @returns {Constraint}\n */\n static truthy() {\n return new Constraint('true', { message: 'messages.true' });\n }\n /**\n * The 'future' constraint - field value must be a Date or a timestamp in the future.\n * @returns {Constraint}\n */\n static future() {\n return new Constraint('future', { message: 'messages.future' });\n }\n /**\n * The 'past' constraint - field value must be a Date or a timestamp in the past.\n * @returns {Constraint}\n */\n static past() {\n return new Constraint('past', { message: 'messages.past' });\n }\n /**\n * The 'url' constraint - field value must be a valid URL.\n * @returns {Constraint}\n */\n static url() {\n return new Constraint('url', { message: 'messages.url' });\n }\n}\n","/*\n * Copyright 2013-2026 Erudika. https://erudika.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * For issues and patches go to: https://github.com/erudika\n */\n/* global encodeURIComponent */\n\n'use strict';\n\nvar err = console.error;\nimport assert from 'assert';\nimport apiClient from 'superagent';\nimport aws4 from 'aws4';\nimport ParaObject from './ParaObject.js';\nimport Pager from './Pager.js';\nimport Constraint from './Constraint.js';\n\nconst DEFAULT_ENDPOINT = 'https://paraio.com';\nconst DEFAULT_PATH = '/v1/';\nconst JWT_PATH = '/jwt_auth';\nconst SEPARATOR = ':';\nconst { sign } = aws4;\n\n/**\n * JavaScript client for communicating with a Para API server.\n * @param {String} accessKey Para access key\n * @param {String} secretKey Para access key\n * @param {Object} options\n * @property {String} endpoint the API endpoint (default: paraio.com)\n * @property {String} apiPath the request path (default: /v1/)\n * @author Alex Bogdanovski <alex@erudika.com>\n */\nexport default class ParaClient {\n constructor(accessKey, secretKey, options) {\n if (!secretKey || isEmpty(secretKey.trim())) {\n console.warn(\"Secret key not provided. Make sure you call 'signIn()' first.\");\n }\n options = options || {};\n this.accessKey = accessKey;\n this.endpoint = options.endpoint || DEFAULT_ENDPOINT;\n this.apiPath = options.apiPath || DEFAULT_PATH;\n this.apiRequestTimeout = options.apiRequestTimeout || 120 * 1000;\n this.tokenKey = null;\n this.tokenKeyExpires = null;\n this.tokenKeyNextRefresh = null;\n if (!endsWith(this.apiPath, '/')) {\n this.apiPath += '/';\n }\n\n var that = this;\n var secret = secretKey;\n\n this.getFullPath = function (resourcePath) {\n if (resourcePath && startsWith(resourcePath, JWT_PATH)) {\n if ((that.apiPath.match(/\\//g) || []).length > 2) {\n return that.apiPath.substring(0, that.apiPath.indexOf('/', 1)) + resourcePath;\n }\n return resourcePath;\n }\n if (!resourcePath) {\n resourcePath = '';\n } else if (resourcePath[0] === '/') {\n resourcePath = resourcePath.substring(1);\n }\n return that.apiPath + resourcePath;\n };\n\n this.setSecret = function (sec) {\n secret = sec;\n };\n\n /**\n * Clears the JWT token from memory, if such exists.\n */\n this.clearAccessToken = function () {\n that.tokenKey = null;\n that.tokenKeyExpires = null;\n that.tokenKeyNextRefresh = null;\n };\n\n /**\n * @returns the JWT access token, or null if not signed in\n */\n this.getAccessToken = function () {\n return that.tokenKey;\n };\n\n /**\n * Sets the JWT access token.\n * @param {String} token a valid token\n */\n this.setAccessToken = function (token) {\n if (token && token.length > 1) {\n try {\n var parts = token.split('.');\n var decoded = JSON.parse(decode(parts[1]));\n if (decoded && decoded['exp']) {\n that.tokenKeyExpires = decoded['exp'];\n that.tokenKeyNextRefresh = decoded['refresh'];\n }\n } catch (e) {\n that.tokenKeyExpires = null;\n that.tokenKeyNextRefresh = null;\n }\n }\n that.tokenKey = token;\n };\n\n /**\n * @param {Function} fn callback (optional)\n * @returns {Promise} the version of Para server\n */\n this.getServerVersion = async function (fn) {\n fn = fn || noop;\n return that.getEntity(that.invokeGet('')).then(function (result) {\n var ver = result.version || 'unknown';\n fn(ver);\n return ver;\n });\n };\n\n /**\n * Invoke a GET request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} params query parameters\n * @returns {Object} response\n */\n this.invokeGet = async function (resourcePath, params) {\n return that.invokeSignedRequest(\n 'GET',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n params\n );\n };\n\n /**\n * Invoke a POST request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} entity request body\n * @returns {Object} response\n */\n this.invokePost = async function (resourcePath, entity) {\n return that.invokeSignedRequest(\n 'POST',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n null,\n entity\n );\n };\n\n /**\n * Invoke a PUT request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} entity request body\n * @returns {Object} response\n */\n this.invokePut = async function (resourcePath, entity) {\n return that.invokeSignedRequest(\n 'PUT',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n null,\n entity\n );\n };\n\n /**\n * Invoke a PATCH request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} entity request body\n * @returns {Object} response\n */\n this.invokePatch = async function (resourcePath, entity) {\n return that.invokeSignedRequest(\n 'PATCH',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n null,\n entity\n );\n };\n\n /**\n * Invoke a DELETE request to the Para API.\n * @param {String} resourcePath the subpath after '/v1/', should not start with '/'\n * @param {Object} params query parameters\n * @returns {Object} response\n */\n this.invokeDelete = async function (resourcePath, params) {\n return that.invokeSignedRequest(\n 'DELETE',\n that.endpoint,\n that.getFullPath(resourcePath),\n null,\n params\n );\n };\n\n this.invokeSignedRequest = async function (\n httpMethod,\n endpointURL,\n reqPath,\n headers,\n params,\n jsonEntity\n ) {\n if (!accessKey || isEmpty(accessKey.trim())) {\n throw new Error('Blank access key: ' + httpMethod + ' ' + reqPath);\n }\n var doSign = true;\n if (!secret && !that.tokenKey && isEmpty(headers)) {\n headers = { Authorization: 'Anonymous ' + accessKey };\n doSign = false;\n }\n var host = endpointURL;\n if (startsWith(endpointURL, 'http://')) {\n host = endpointURL.substring(7);\n } else if (startsWith(endpointURL, 'https://')) {\n host = endpointURL.substring(8);\n }\n\n var opts = {\n service: 'para',\n method: httpMethod,\n host: host,\n path: uriEncodeAWSV4(reqPath),\n headers: headers || {}\n };\n\n // make sure that only the first parameter value is used for generating the signature\n // multi-valued parameters are reduced to single value\n // there's no spec for this case, so choose first param in array\n if (params && params instanceof Object && !isEmpty(params)) {\n opts.path += '?';\n var paramsObj = {};\n for (var key in params) {\n var value = params[key];\n if (isArray(value)) {\n if (!isEmpty(value)) {\n paramsObj[key] = value[0] !== null ? value[0] : '';\n }\n } else {\n paramsObj[key] = value !== null ? value : '';\n }\n }\n opts.path += new URLSearchParams(paramsObj).toString();\n }\n\n if (jsonEntity) {\n opts.body = JSON.stringify(jsonEntity);\n opts.headers['Content-Type'] = 'application/json; charset=UTF-8';\n }\n\n if (that.tokenKey !== null) {\n // make sure you don't create an infinite loop!\n if (!(httpMethod === 'GET' && reqPath === JWT_PATH)) {\n await that.refreshToken();\n }\n opts.headers['Authorization'] = 'Bearer ' + that.tokenKey;\n } else if (doSign) {\n opts.doNotEncodePath = true;\n sign(opts, { accessKeyId: accessKey, secretAccessKey: secret });\n }\n\n if (typeof window !== 'undefined') {\n // don't set the 'Host' header, the browser does that.\n delete opts.headers['Host'];\n }\n opts.headers['User-Agent'] = 'Para client for JavaScript';\n try {\n return apiClient(opts.method, endpointURL + reqPath)\n .query(params)\n .set(opts.headers)\n .timeout({ response: that.apiRequestTimeout, deadline: that.apiRequestTimeout })\n .send(opts.body);\n } catch (e) {\n err('ParaClient request failed: ' + e);\n return Promise.reject(e);\n }\n };\n\n /**\n * Parses a search query response and extracts the objects from it.\n * @param {String} queryType type of search query\n * @param {Object} params query params\n * @param {Function} fn callback\n * @returns {Object} response\n */\n this.find = async function (queryType, params, fn) {\n if (params && params instanceof Object && !isEmpty(params)) {\n var qType = queryType ? '/' + queryType : '/default';\n if (!params['type']) {\n return that.getEntity(that.invokeGet('search' + qType, params), fn);\n } else {\n return that.getEntity(that.invokeGet(params['type'] + '/search' + qType, params), fn);\n }\n } else {\n var res = {\n items: [],\n totalHits: 0\n };\n fn(res);\n return resolve(res);\n }\n };\n\n /**\n * Deserializes a Response object to POJO of some type.\n * @param {Object} req request\n * @param {Function} callback callback\n * @param {Boolean} returnRawJSON true if raw JSON should be returned as string\n * @returns {Object} a ParaObject\n */\n this.getEntity = async function (req, callback, returnRawJSON) {\n callback = callback || noop;\n var rawJSON = isUndefined(returnRawJSON) ? true : returnRawJSON;\n return req.then(function (res) {\n //console.log(\"DEBUG \", req.method, req.url, res.status);\n var code = res.status;\n if (code === 200 || code === 201 || code === 304) {\n if (rawJSON) {\n var result;\n try {\n if (!isEmpty(res.body) || res.text === '{ }' || res.text === '{}') {\n result = res.body;\n } else {\n result = res.text;\n }\n } catch (exc) {\n result = res.text;\n }\n callback(result);\n return resolve(result);\n } else {\n var obj = new ParaObject();\n obj.setFields(res.body);\n callback(obj);\n return resolve(obj);\n }\n } else if (code !== 404 || code !== 304 || code !== 204) {\n var error = res.body || new Error('ParaClient request failed.');\n if (error && error['code']) {\n var msg = error['message'] ? error['message'] : 'error';\n err(msg + ' - ' + error['code']);\n } else {\n err(code + ' - ' + res.text);\n }\n callback(null, error);\n return Promise.reject(error);\n } else {\n var error1 = new Error('ParaClient request failed.');\n callback(null, error1);\n reject(error1);\n }\n });\n };\n\n /**\n * Deserializes ParaObjects from a JSON array (the \"items:[]\" field in search results).\n * @param {Array} items a list of deserialized maps\n * @returns {Array} a list of ParaObjects\n */\n this.getItemsFromList = function (items) {\n if (items && items instanceof Array && !isEmpty(items)) {\n var objects = [];\n for (var item of items) {\n if (item) {\n var p = new ParaObject();\n p.setFields(item);\n objects.push(p);\n }\n }\n return objects;\n }\n return [];\n };\n\n /**\n * Converts a list of Maps to a List of ParaObjects, at a given path within the JSON tree structure.\n * @param {Object} result the response body for an API request\n * @param {String} at the path (field) where the array of objects is located\n * @param {Pager} pager a pager\n * @returns {Array} a list of ParaObjects\n */\n this.getItemsAt = function (result, at, pager) {\n if (result && at && result[at]) {\n if (pager && result.totalHits) {\n pager.count = result.totalHits;\n }\n if (pager && result.lastKey) {\n pager.lastKey = result.lastKey;\n }\n return that.getItemsFromList(result[at]);\n }\n return [];\n };\n\n /**\n * Converts a list of Maps to a List of ParaObjects.\n * @param {Object} result the response body for an API request\n * @param {Pager} pager a pager\n * @returns {Array} a list of ParaObjects\n */\n this.getItems = function (result, pager) {\n return that.getItemsAt(result, 'items', pager);\n };\n\n /**\n * Converts a {Pager} object to query parameters.\n * @param {Pager} pager a pager\n * @returns {Object} parameters map\n */\n this.pagerToParams = function (pager) {\n var map = {};\n if (pager) {\n map['page'] = pager.page;\n map['desc'] = pager.desc;\n map['limit'] = pager.limit;\n if (pager.lastKey) {\n map['lastKey'] = pager.lastKey;\n }\n if (pager.sortby) {\n map['sort'] = pager.sortby;\n }\n if (pager.select && pager.select.length) {\n map['select'] = pager.select;\n }\n }\n return map;\n };\n }\n /**\n * Returns the App for the current access key (appid).\n * @param {Function} fn callback (optional)\n * @returns {Promise} a promise\n */\n async getApp(fn) {\n return this.me(fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\t PERSISTENCE\n /////////////////////////////////////////////\n /**\n * Persists an object to the data store. If the object's type and id are given,\n * then the request will be a PUT request and any existing object will be\n * overwritten.\n * @param {ParaObject} obj the object to create\n * @param {Function} fn callback (optional)\n * @returns {Promise} the same object with assigned id or null if not created.\n */\n async create(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj) {\n fn(null);\n return resolve(null);\n }\n if (!obj.getId() || !obj.getType()) {\n return this.getEntity(this.invokePost(urlEncode(obj.getType()), obj), fn, false);\n } else {\n return this.getEntity(this.invokePut(obj.getObjectURI(), obj), fn, false);\n }\n }\n /**\n * Retrieves an object from the data store.\n * @param {String} type the type of the object\n * @param {String} id the id of the object\n * @param {Function} fn callback (optional)\n * @returns {Promise} the retrieved object or null if not found\n */\n async read(type, id, fn) {\n fn = fn || noop;\n if (!id) {\n fn(null);\n return resolve(null);\n }\n if (!type) {\n return this.getEntity(this.invokeGet('_id/' + urlEncode(id)), fn, false);\n } else {\n return this.getEntity(this.invokeGet(urlEncode(type) + '/' + urlEncode(id)), fn, false);\n }\n }\n /**\n * Updates an object permanently. Supports partial updates.\n * @param {ParaObject} obj the object to update\n * @param {Function} fn callback (optional)\n * @returns {Promise} the updated object\n */\n async update(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj) {\n fn(null);\n return resolve(null);\n }\n return this.getEntity(this.invokePatch(obj.getObjectURI(), obj), fn, false);\n }\n /**\n * Deletes an object permanently.\n * @param {ParaObject} obj object to delete\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async delete(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (obj) {\n return this.getEntity(this.invokeDelete(obj.getObjectURI()), fn);\n } else {\n fn(null);\n return resolve(null);\n }\n }\n /**\n * Saves multiple objects to the data store.\n * @param {Array} objects a list of ParaObjects to create\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async createAll(objects, fn) {\n fn = fn || noop;\n checkParaObjects(objects);\n if (!objects || !isArray(objects) || !objects[0]) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokePost('_batch', objects)).then(function (result) {\n var res = that.getItemsFromList(result);\n fn(res);\n return res;\n });\n }\n /**\n * Retrieves multiple objects from the data store.\n * @param {Array} keys a list of object ids\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async readAll(keys, fn) {\n fn = fn || noop;\n if (!keys || !isArray(keys) || isEmpty(keys)) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokeGet('_batch', { ids: keys })).then(function (result) {\n var res = that.getItemsFromList(result);\n fn(res);\n return res;\n });\n }\n /**\n * Updates multiple objects.\n * @param {Array} objects a list of ParaObjects to update\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async updateAll(objects, fn) {\n fn = fn || noop;\n checkParaObjects(objects);\n if (!objects || !isArray(objects) || isEmpty(objects)) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokePatch('_batch', objects)).then(function (result) {\n var res = that.getItemsFromList(result);\n fn(res);\n return res;\n });\n }\n /**\n * Deletes multiple objects.\n * @param {Function} fn callback (optional)\n * @param {Array} keys the ids of the objects to delete\n * @returns {Promise} promise\n */\n async deleteAll(keys, fn) {\n fn = fn || noop;\n if (keys && isArray(keys)) {\n return this.getEntity(this.invokeDelete('_batch', { ids: keys }), fn);\n } else {\n fn(null);\n return resolve(null);\n }\n }\n /**\n * Returns a list all objects found for the given type.\n * The result is paginated so only one page of items is returned, at a time.\n * @param {String} type the type of objects to search for\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects\n */\n async list(type, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n if (!type) {\n fn([]);\n return resolve([]);\n }\n var that = this;\n return this.getEntity(this.invokeGet(urlEncode(type), this.pagerToParams(pager))).then(\n function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n }\n );\n }\n /////////////////////////////////////////////\n //\t\t\t\t SEARCH\n /////////////////////////////////////////////\n /**\n * Simple id search.\n * @param {String} id the id\n * @param {Function} fn callback (optional)\n * @returns {Promise} the object if found or null\n */\n async findById(id, fn) {\n fn = fn || noop;\n var that = this;\n return this.find('id', { id: id }).then(function (results) {\n var list = that.getItems(results);\n var res = isEmpty(list) ? null : list;\n fn(res);\n return res;\n });\n }\n /**\n * Simple multi id search.\n * @param {Array} ids a list of ids to search for\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of objects if found or []\n */\n async findByIds(ids, fn) {\n fn = fn || noop;\n var that = this;\n return this.find('ids', { ids: ids }).then(function (results) {\n var res = that.getItems(results);\n fn(res);\n return res;\n });\n }\n /**\n * Search for address objects in a radius of X km from a given point.\n * @param {String} type the type of object to search for\n * @param {String} query the query string\n * @param {Number} radius the radius of the search circle\n * @param {Number} lat latitude\n * @param {Number} lng longitude\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findNearby(type, query, radius, lat, lng, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n latlng: lat + ',' + lng,\n radius: radius,\n q: query,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('nearby', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have a property which value starts with a given prefix.\n * @param {String} type the type of object to search for\n * @param {String} field the property name of an object\n * @param {String} prefix the prefix\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findPrefix(type, field, prefix, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n field: field,\n prefix: prefix,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('prefix', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Simple query string search. This is the basic search method.\n * @param {String} type the type of object to search for\n * @param {String} query the query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findQuery(type, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n q: query,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches within a nested field. The objects of the given type must contain a nested field \"nstd\".\n * @param {String} type the type of object to search for\n * @param {String} field the name of the field to target (within a nested field \"nstd\")\n * @param {String} query the query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findNestedQuery(type, field, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n q: query,\n field: field,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('nested', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have similar property values to a given text. A \"find like this\" query.\n * @param {String} type the type of object to search for\n * @param {String} filterKey exclude an object with this key from the results (optional)\n * @param {Array} fields a list of property names\n * @param {String} liketext text to compare to\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findSimilar(type, filterKey, fields, liketext, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n fields: fields || null,\n filterid: filterKey,\n like: liketext,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('similar', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects tagged with one or more tags.\n * @param {String} type the type of object to search for\n * @param {Array} tags the list of tags\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTagged(type, tags, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n tags: tags || null,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('tagged', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for Tag objects.\n * This method might be deprecated in the future.\n * @param {String} keyword the tag keyword to search for\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTags(keyword, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n keyword = keyword ? keyword + '*' : '*';\n return this.findWildcard('tag', 'tag', keyword, pager, fn);\n }\n /**\n * Searches for objects having a property value that is in list of possible values.\n * @param {String} type the type of object to search for\n * @param {String} field the property name of an object\n * @param {Object} terms a map of terms (property values)\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTermInList(type, field, terms, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n field: field,\n terms: terms,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('in', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have properties matching some given values. A terms query.\n * @param {String} type the type of object to search for\n * @param {Object} terms a map of fields (property names) to terms (property values)\n * @param {Boolean} matchAll match all terms. If true - AND search, if false - OR search\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findTerms(type, terms, matchAll, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n terms = terms || {};\n matchAll = matchAll || true;\n var params = {\n matchall: matchAll\n };\n var list = [];\n for (var key in terms) {\n if (terms[key]) {\n list.push(key + SEPARATOR + terms[key]);\n }\n }\n if (!isEmpty(terms)) {\n params['terms'] = list;\n }\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('terms', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches for objects that have a property with a value matching a wildcard query.\n * @param {String} type the type of object to search for\n * @param {String} field the property name of an object\n * @param {String} wildcard wildcard query string. For example \"cat*\".\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of object found\n */\n async findWildcard(type, field, wildcard, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n var params = {\n field: field,\n q: wildcard,\n type: type\n };\n params = merge(params, this.pagerToParams(pager));\n var that = this;\n return this.find('wildcard', params).then(function (results) {\n var res = that.getItems(results, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Counts indexed objects matching a set of terms/values.\n * @param {String} type the type of object to search for\n * @param {Object} terms a map of fields (property names) to terms (property values)\n * @param {Function} fn callback (optional)\n * @returns {Promise} the number of results found\n */\n async getCount(type, terms, fn) {\n fn = fn || noop;\n if (type === null && terms === null) {\n fn(0);\n return resolve(0);\n }\n terms = terms || {};\n var params = {};\n var pager = new Pager();\n var that = this;\n params['type'] = type;\n if (isEmpty(terms)) {\n return this.find('count', params).then(function (results) {\n that.getItems(results, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n } else {\n var list = [];\n for (var key in terms) {\n if (terms[key]) {\n list.push(key + SEPARATOR + terms[key]);\n }\n }\n if (!isEmpty(terms)) {\n params['terms'] = list;\n }\n params['count'] = 'true';\n return this.find('terms', params).then(function (results) {\n that.getItems(results, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n }\n }\n /////////////////////////////////////////////\n //\t\t\t\t LINKS\n /////////////////////////////////////////////\n /**\n * Count the total number of links between this object and another type of object.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Function} fn callback (optional)\n * @returns {Promise} the number of links for the given object\n */\n async countLinks(obj, type2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn(0);\n return resolve(0);\n }\n var params = {};\n params['count'] = 'true';\n var pager = new Pager();\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n that.getItems(result, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n }\n /**\n * Returns all objects linked to the given one. Only applicable to many-to-many relationships.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of linked objects\n */\n async getLinkedObjects(obj, type2, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, this.pagerToParams(pager))).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Searches through all linked objects in many-to-many relationships.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} field the name of the field to target (within a nested field \"nstd\")\n * @param {String} query a query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of linked objects\n */\n async findLinkedObjects(obj, type2, field, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var params = {\n field: field,\n q: query || '*'\n };\n params = merge(params, this.pagerToParams(pager));\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Checks if this object is linked to another.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} id2 the other id\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if the two are linked\n */\n async isLinked(obj, type2, id2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2 || !id2) {\n fn(false);\n return resolve(false);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2) + '/' + urlEncode(id2);\n return this.getEntity(this.invokeGet(url)).then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n });\n }\n /**\n * Checks if a given object is linked to this one.\n * @param {ParaObject} obj the object to execute this method on\n * @param {ParaObject} toObj the other object\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if linked\n */\n async isLinkedToObject(obj, toObj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n checkParaObject(toObj);\n if (!obj || !obj.getId() || !toObj || !toObj.getId()) {\n fn(false);\n return resolve(false);\n }\n return this.isLinked(obj, toObj.getType(), toObj.getId(), fn);\n }\n /**\n * Links an object to this one in a many-to-many relationship.\n * Only a link is created. Objects are left untouched.\n * The type of the second object is automatically determined on read.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} id2 the other id\n * @param {Function} fn callback (optional)\n * @returns {Promise} the id of the Linker object that is created\n */\n async link(obj, id2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !id2) {\n fn(null);\n return resolve(null);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(id2);\n return this.getEntity(this.invokePost(url), fn);\n }\n /**\n * Unlinks an object from this one.\n * Only a link is deleted. Objects are left untouched.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} id2 the other id\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async unlink(obj, type2, id2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2 || !id2) {\n fn(null);\n return resolve(null);\n }\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2) + '/' + urlEncode(id2);\n return this.getEntity(this.invokeDelete(url), fn);\n }\n /**\n * Unlinks all objects that are linked to this one.\n * Deletes all Linker objects.\n * Only the links are deleted. Objects are left untouched.\n * @param {ParaObject} obj the object to execute this method on\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async unlinkAll(obj, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId()) {\n fn(null);\n return resolve(null);\n }\n var url = obj.getObjectURI() + '/links';\n return this.getEntity(this.invokeDelete(url), fn);\n }\n /**\n * Count the total number of child objects for this object.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Function} fn callback (optional)\n * @returns {Promise} the number of links\n */\n async countChildren(obj, type2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn(0);\n return resolve(0);\n }\n var params = {};\n params['count'] = 'true';\n params['childrenonly'] = 'true';\n var pager = new Pager();\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n that.getItems(result, pager);\n var res = pager.count;\n fn(res);\n return res;\n });\n }\n /**\n * Returns all child objects linked to this object.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} field the field name to use as filter\n * @param {String} term the field value to use as filter\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of ParaObject in a one-to-many relationship with this object\n */\n async getChildren(obj, type2, field, term, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var params = {};\n params['childrenonly'] = 'true';\n if (field) {\n params['field'] = field;\n }\n if (term) {\n params['term'] = term;\n }\n params = merge(params, this.pagerToParams(pager));\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Search through all child objects. Only searches child objects directly\n * connected to this parent via the `parentid` field.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {String} query a query string\n * @param {Pager} pager a Pager object\n * @param {Function} fn callback (optional)\n * @returns {Promise} a list of ParaObject in a one-to-many relationship with this object\n */\n async findChildren(obj, type2, query, pager, fn) {\n fn = fn || noop;\n fn = checkPager(pager, fn);\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn([]);\n return resolve([]);\n }\n var params = {\n childrenonly: 'true',\n q: query || '*'\n };\n params = merge(params, this.pagerToParams(pager));\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n var that = this;\n return this.getEntity(this.invokeGet(url, params)).then(function (result) {\n var res = that.getItems(result, pager);\n fn(res);\n return res;\n });\n }\n /**\n * Deletes all child objects permanently.\n * @param {ParaObject} obj the object to execute this method on\n * @param {String} type2 the other type of object\n * @param {Function} fn callback (optional)\n * @returns {Promise} promise\n */\n async deleteChildren(obj, type2, fn) {\n fn = fn || noop;\n checkParaObject(obj);\n if (!obj || !obj.getId() || !type2) {\n fn(null);\n return resolve(null);\n }\n var params = {};\n params['childrenonly'] = 'true';\n var url = obj.getObjectURI() + '/links/' + urlEncode(type2);\n return this.getEntity(this.invokeDelete(url, params), fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\t UTILS\n /////////////////////////////////////////////\n /**\n * Generates a new unique id.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a new id\n */\n async newId(fn) {\n fn = fn || noop;\n return this.getEntity(this.invokeGet('utils/newid')).then(function (result) {\n var res = result ? result : '';\n fn(res);\n return res;\n });\n }\n /**\n * Returns the current timestamp.\n * @param {Function} fn callback (optional)\n * @returns {Promise} timestamp in milliseconds\n */\n async getTimestamp(fn) {\n fn = fn || noop;\n return this.getEntity(this.invokeGet('utils/timestamp')).then(function (result) {\n var res = result ? result : 0;\n fn(res);\n return res;\n });\n }\n /**\n * Formats a date in a specific format.\n * @param {String} format the date format\n * @param {String} locale the locale instance\n * @param {Function} fn callback (optional)\n * @returns {Promise} a formatted date\n */\n async formatDate(format, locale, fn) {\n var params = { format: format || '', locale: locale || 'US' };\n return this.getEntity(this.invokeGet('utils/formatdate', params), fn);\n }\n /**\n * Converts spaces to dashes.\n * @param {String} str a string with spaces\n * @param {String} replaceWith a string to replace spaces with\n * @param {Function} fn callback (optional)\n * @returns {Promise} a string with no whitespace\n */\n async noSpaces(str, replaceWith, fn) {\n var params = { string: str || '', replacement: replaceWith || '' };\n return this.getEntity(this.invokeGet('utils/nospaces', params), fn);\n }\n /**\n * Strips all symbols, punctuation, whitespace and control chars from a string.\n * @param {String} str a dirty string\n * @param {Function} fn callback (optional)\n * @returns {Promise} a clean string\n */\n async stripAndTrim(str, fn) {\n var params = { string: str || '' };\n return this.getEntity(this.invokeGet('utils/nosymbols', params), fn);\n }\n /**\n * Converts Markdown to HTML\n * @param {String} markdownString some Markdown\n * @param {Function} fn callback (optional)\n * @returns {Promise} HTML\n */\n async markdownToHtml(markdownString, fn) {\n var params = { md: markdownString || '' };\n return this.getEntity(this.invokeGet('utils/md2html', params), fn);\n }\n /**\n * Returns the number of minutes, hours, months elapsed for a time delta (milliseconds).\n * @param {Number} delta the time delta between two events, in milliseconds\n * @param {Function} fn callback (optional)\n * @returns {Promise} a string like \"5m\", \"1h\"\n */\n async approximately(delta, fn) {\n var params = { delta: delta || 0 };\n return this.getEntity(this.invokeGet('utils/timeago', params), fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\t MISC\n /////////////////////////////////////////////\n /**\n * Generates a new set of access/secret keys.\n * Old keys are discarded and invalid after this.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of new credentials\n */\n async newKeys(fn) {\n fn = fn || noop;\n var that = this;\n return this.getEntity(this.invokePost('_newkeys')).then(function (result) {\n var res = result || {};\n if (res.secretKey && !isEmpty(res.secretKey.trim())) {\n that.setSecret(res.secretKey);\n }\n fn(res);\n return res;\n });\n }\n /**\n * Returns all registered types for this App.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of plural-singular form of all the registered types.\n */\n async types(fn) {\n return this.getEntity(this.invokeGet('_types'), fn);\n }\n /**\n * Returns the number of objects for each existing type in this App.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of singular object type to object count.\n */\n async typesCount(fn) {\n return this.getEntity(this.invokeGet('_types', { count: 'true' }), fn);\n }\n /**\n * Returns a User or an App that is currently authenticated.\n * @param {String} accessToken a valid JWT access token (optional)\n * @param {Function} fn callback (optional)\n * @returns {Promise} a ParaObject\n */\n async me(accessToken, fn) {\n fn = isFunction(accessToken) ? accessToken : fn || noop;\n if (accessToken && isString(accessToken)) {\n var auth = startsWith(accessToken, 'Bearer') ? accessToken : 'Bearer ' + accessToken;\n var headers = { Authorization: auth };\n return this.getEntity(\n this.invokeSignedRequest('GET', this.endpoint, this.getFullPath('_me'), headers),\n fn,\n false\n );\n } else {\n return this.getEntity(this.invokeGet('_me'), fn, false);\n }\n }\n /**\n * Upvote an object and register the vote in DB.\n * @param {ParaObject} obj the object to receive +1 votes\n * @param {String} voterid the userid of the voter\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if vote was successful\n */\n async voteUp(obj, voterid, expiresAfter, lockedAfter, fn) {\n fn = isFunction(expiresAfter) ? expiresAfter : fn || noop;\n if (!obj || isEmpty(voterid)) {\n fn(false);\n return resolve(false);\n }\n var body = { _voteup: voterid };\n if (isInteger(expiresAfter) && isInteger(lockedAfter)) {\n body['_vote_expires_after'] = expiresAfter;\n body['_vote_locked_after'] = lockedAfter;\n }\n return this.getEntity(this.invokePatch(obj.getObjectURI(), body)).then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n });\n }\n /**\n * Downvote an object and register the vote in DB.\n * @param {ParaObject} obj the object to receive +1 votes\n * @param {String} voterid the userid of the voter\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if vote was successful\n */\n async voteDown(obj, voterid, expiresAfter, lockedAfter, fn) {\n fn = isFunction(expiresAfter) ? expiresAfter : fn || noop;\n fn = fn || noop;\n if (!obj || isEmpty(voterid)) {\n fn(false);\n return resolve(false);\n }\n var body = { _votedown: voterid };\n if (isInteger(expiresAfter) && isInteger(lockedAfter)) {\n body['_vote_expires_after'] = expiresAfter;\n body['_vote_locked_after'] = lockedAfter;\n }\n return this.getEntity(this.invokePatch(obj.getObjectURI(), body)).then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n });\n }\n /**\n * Rebuilds the entire search index.\n * @param {String} destinationIndex an existing index as destination\n * @param {Function} fn callback (optional)\n * @returns {Promise} a response object with properties \"tookMillis\" and \"reindexed\"\n */\n async rebuildIndex(destinationIndex, fn) {\n fn = fn || noop;\n if (!destinationIndex) {\n return this.getEntity(this.invokePost('_reindex'), fn);\n } else {\n return this.getEntity(\n this.invokeSignedRequest(\n 'POST',\n this.endpoint,\n this.getFullPath('_reindex'),\n {},\n { destinationIndex: destinationIndex }\n ),\n fn\n );\n }\n }\n /////////////////////////////////////////////\n //\t\t\tValidation Constraints\n /////////////////////////////////////////////\n /**\n * Returns the validation constraints map.\n * @param {String} type a type\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map containing all validation constraints.\n */\n async validationConstraints(type, fn) {\n return this.getEntity(this.invokeGet('_constraints' + (type ? '/' + urlEncode(type) : '')), fn);\n }\n /**\n * Add a new constraint for a given field.\n * @param {String} type a type\n * @param {String} field a field name\n * @param {Constraint} cons the constraint\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map containing all validation constraints for this type.\n */\n async addValidationConstraint(type, field, cons, fn) {\n fn = fn || noop;\n checkConstraint(cons);\n if (!type || !field || !cons) {\n fn({});\n return resolve({});\n }\n return this.getEntity(\n this.invokePut(\n '_constraints/' + urlEncode(type) + '/' + field + '/' + cons.getName(),\n cons.getPayload()\n ),\n fn\n );\n }\n /**\n * Removes a validation constraint for a given field.\n * @param {String} type a type\n * @param {String} field a field name\n * @param {String} constraintName the name of the constraint to remove\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map containing all validation constraints for this type.\n */\n async removeValidationConstraint(type, field, constraintName, fn) {\n fn = fn || noop;\n if (!type || !field || !constraintName) {\n fn({});\n return resolve({});\n }\n return this.getEntity(\n this.invokeDelete('_constraints/' + urlEncode(type) + '/' + field + '/' + constraintName),\n fn\n );\n }\n /////////////////////////////////////////////\n //\t\t\tResource Permissions\n /////////////////////////////////////////////\n /**\n * Returns only the permissions for a given subject (user) of the current app.\n * If subject is not given returns the permissions for all subjects and resources for current app.\n * @param {String} subjectid the subject id (user id)\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of subject ids to resource names to a list of allowed methods\n */\n async resourcePermissions(subjectid, fn) {\n if (!subjectid) {\n return this.getEntity(this.invokeGet('_permissions'), fn);\n } else {\n return this.getEntity(this.invokeGet('_permissions/' + urlEncode(subjectid)), fn);\n }\n }\n /**\n * Grants a permission to a subject that allows them to call the specified HTTP methods on a given resource.\n * @param {String} subjectid subject id (user id)\n * @param {String} resourcePath resource path or object type\n * @param {Array} permission a set of HTTP methods\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async grantResourcePermission(subjectid, resourcePath, permission, fn) {\n return this.grantResourcePermissions(subjectid, resourcePath, permission, false, fn);\n }\n /**\n * Grants a permission to a subject that allows them to call the specified HTTP methods on a given resource.\n * @param {String} subjectid subject id (user id)\n * @param {String} resourcePath resource path or object type\n * @param {Array} permission a set of HTTP methods\n * @param {Boolean} allowGuestAccess if true - all unauthenticated requests will go through, 'false' by default.\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async grantResourcePermissions(subjectid, resourcePath, permission, allowGuestAccess, fn) {\n fn = fn || noop;\n if (!subjectid || !resourcePath || !permission || !isArray(permission)) {\n fn({});\n return resolve({});\n }\n if (allowGuestAccess && subjectid === '*') {\n permission.push('?');\n }\n resourcePath = base64Url(resourcePath);\n return this.getEntity(\n this.invokePut('_permissions/' + urlEncode(subjectid) + '/' + resourcePath, permission),\n fn\n );\n }\n /**\n * Revokes a permission for a subject, meaning they no longer will be able to access the given resource.\n * @param {String} subjectid subject id (user id)\n * @param {String} resourcePath resource path or object type\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async revokeResourcePermission(subjectid, resourcePath, fn) {\n fn = fn || noop;\n if (!subjectid || !resourcePath) {\n fn({});\n return resolve({});\n }\n resourcePath = base64Url(resourcePath);\n return this.getEntity(\n this.invokeDelete('_permissions/' + urlEncode(subjectid) + '/' + resourcePath),\n fn\n );\n }\n /**\n * Revokes all permission for a subject.\n * @param {String} subjectid subject id (user id)\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map of the permissions for this subject id\n */\n async revokeAllResourcePermissions(subjectid, fn) {\n fn = fn || noop;\n if (!subjectid) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokeDelete('_permissions/' + urlEncode(subjectid)), fn);\n }\n /**\n * Checks if a subject is allowed to call method X on resource Y.\n * @param {String} subjectid subject id\n * @param {String} resourcePath resource path or object type\n * @param {String} httpMethod HTTP method name\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if allowed\n */\n async isAllowedTo(subjectid, resourcePath, httpMethod, fn) {\n fn = fn || noop;\n if (!subjectid || !resourcePath || !httpMethod) {\n fn(false);\n return resolve(false);\n }\n resourcePath = base64Url(resourcePath);\n var url = '_permissions/' + urlEncode(subjectid) + '/' + resourcePath + '/' + httpMethod;\n return this.getEntity(this.invokeGet(url))\n .then(function (result) {\n var res = result === 'true';\n fn(res);\n return res;\n })\n .catch(function () {\n fn(false);\n return false;\n });\n }\n /////////////////////////////////////////////\n //\t\t\tResource Permissions\n /////////////////////////////////////////////\n /**\n * Returns the value of a specific app setting (property) or all settings if key is blank.\n * @param {String} key a key\n * @param {Function} fn callback (optional)\n * @returns {Promise} a map\n */\n async appSettings(key, fn) {\n fn = fn || noop;\n if (!key || isEmpty(key.trim())) {\n return this.getEntity(this.invokeGet('_settings'), fn);\n } else {\n return this.getEntity(this.invokeGet('_settings/' + key.trim()), fn);\n }\n }\n /**\n * Adds or overwrites an app-specific setting.\n * @param {String} key a key\n * @param {Object} value a value\n * @param {Function} fn callback (optional)\n * @returns {Promise} void\n */\n async addAppSetting(key, value, fn) {\n fn = fn || noop;\n if (!key || isEmpty(key.trim()) || !value || isEmpty(value)) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokePut('_settings/' + key.trim(), { value: value }), fn);\n }\n /**\n * Overwrites all app-specific settings.\n * @param {Object} settings a key-value map of properties\n * @param {Function} fn callback (optional)\n * @returns {Promise} void\n */\n async setAppSettings(settings, fn) {\n fn = fn || noop;\n if (!settings) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokePut('_settings', settings), fn);\n }\n /**\n * Removes an app-specific setting.\n * @param {String} key a key\n * @param {Function} fn callback (optional)\n * @returns {Promise} void\n */\n async removeAppSetting(key, fn) {\n fn = fn || noop;\n if (!key || isEmpty(key)) {\n fn({});\n return resolve({});\n }\n return this.getEntity(this.invokeDelete('_settings/' + key.trim()), fn);\n }\n /////////////////////////////////////////////\n //\t\t\t\tAccess Tokens\n /////////////////////////////////////////////\n /**\n * Takes an identity provider access token and fetches the user data from that provider.\n * A new User object is created if that user doesn't exist.\n * Access tokens are returned upon successful authentication using one of the SDKs from\n * Facebook, Google, Twitter, etc.\n * <b>Note:</b> Twitter uses OAuth 1 and gives you a token and a token secret.\n * <b>You must concatenate them like this: <code>{oauth_token}:{oauth_token_secret}</code> and\n * use that as the provider access token.</b>\n * @param {String} provider identity provider, e.g. 'facebook', 'google'...\n * @param {String} providerToken access token from a provider like Facebook, Google, Twitter\n * @param {Boolean} rememberJWT if true, the access token returned by Para will be saved and available via getAccessToken()\n * @param {Function} fn callback (optional)\n * @returns {Promise} a User object or null if something failed\n */\n async signIn(provider, providerToken, rememberJWT, fn) {\n var rememberToken = isBoolean(rememberJWT) ? rememberJWT : true;\n fn = isFunction(rememberJWT) ? rememberJWT : fn || noop;\n\n if (provider && providerToken) {\n var credentials = {};\n var that = this;\n credentials['appid'] = that.accessKey;\n credentials['provider'] = provider;\n credentials['token'] = providerToken;\n return this.getEntity(this.invokePost(JWT_PATH, credentials))\n .then(function (result) {\n if (result !== null && result['user'] && result['jwt']) {\n var jwtData = result['jwt'];\n if (jwtData && rememberToken) {\n that.tokenKey = jwtData['access_token'];\n that.tokenKeyExpires = jwtData['expires'];\n that.tokenKeyNextRefresh = jwtData['refresh'];\n }\n var user = new ParaObject();\n user.setFields(result['user']);\n fn(user);\n return user;\n } else {\n that.clearAccessToken();\n }\n fn(null);\n return null;\n })\n .catch(function () {\n fn(null);\n return null;\n });\n }\n fn(null);\n return Promise.reject(new Error('Provider and provider token are required.'));\n }\n /**\n * Clears the JWT access token but token is not revoked.\n * Tokens can be revoked globally per user with revokeAllTokens().\n */\n signOut() {\n this.clearAccessToken();\n }\n /**\n * Refreshes the JWT access token. This requires a valid existing token.\n * Call link signIn() first.\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if token was refreshed\n */\n async refreshToken(fn) {\n fn = fn || noop;\n var that = this;\n var now = new Date().getTime();\n var notExpired = that.tokenKeyExpires !== null && that.tokenKeyExpires > now;\n var canRefresh =\n that.tokenKeyNextRefresh !== null &&\n (that.tokenKeyNextRefresh < now || that.tokenKeyNextRefresh > that.tokenKeyExpires);\n // token present and NOT expired\n if (that.tokenKey !== null && notExpired && canRefresh) {\n return this.getEntity(this.invokeGet(JWT_PATH))\n .then(function (result) {\n if (result !== null && result['user'] && result['jwt']) {\n var jwtData = result['jwt'];\n that.tokenKey = jwtData['access_token'];\n that.tokenKeyExpires = jwtData['expires'];\n that.tokenKeyNextRefresh = jwtData['refresh'];\n fn(true);\n return true;\n } else {\n that.clearAccessToken();\n }\n fn(false);\n return false;\n })\n .catch(function () {\n fn(false);\n return false;\n });\n }\n fn(false);\n return Promise.resolve(false);\n }\n /**\n * Revokes all user tokens for a given user id.\n * This would be equivalent to \"logout everywhere\".\n * <b>Note:</b> Generating a new API secret on the server will also invalidate all client tokens.\n * Requires a valid existing token.\n * @param {Function} fn callback (optional)\n * @returns {Promise} true if successful\n */\n async revokeAllTokens(fn) {\n fn = fn || noop;\n return this.getEntity(this.invokeDelete(JWT_PATH))\n .then(function (result) {\n var res = result !== null;\n fn(res);\n return res;\n })\n .catch(function () {\n fn(false);\n return false;\n });\n }\n}\n\n/////////////////////////////////////////////\n//\t\t\t\tUtilities\n/////////////////////////////////////////////\n\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\nfunction isString(value) {\n return typeof value === 'string' || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nfunction isBoolean(value) {\n return typeof value === 'boolean' || value instanceof Boolean;\n}\n\nfunction isInteger(value) {\n return typeof value == 'number';\n}\n\nfunction startsWith(value, prefix) {\n if (value == null) {\n return false;\n }\n return String(value).startsWith(prefix);\n}\n\nfunction endsWith(value, suffix) {\n if (value == null) {\n return false;\n }\n return String(value).endsWith(suffix);\n}\n\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArray(value) || isString(value)) {\n return value.length === 0;\n }\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n if (typeof value === 'object') {\n for (var key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n }\n return true;\n}\n\nfunction noop() { }\n\nfunction merge(target) {\n var output = target;\n if (output == null || typeof output !== 'object') {\n output = {};\n }\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (source == null) {\n continue;\n }\n for (var key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue;\n }\n var sourceValue = source[key];\n var targetValue = output[key];\n if (\n sourceValue &&\n typeof sourceValue === 'object' &&\n !isArray(sourceValue) &&\n !(sourceValue instanceof Date)\n ) {\n if (!targetValue || typeof targetValue !== 'object' || isArray(targetValue)) {\n targetValue = {};\n }\n output[key] = merge(targetValue, sourceValue);\n } else {\n output[key] = sourceValue;\n }\n }\n }\n return output;\n}\n\nfunction urlEncode(path) {\n return encodeURIComponent(path).replace(/[!'()*]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\nfunction uriEncodeAWSV4(path) {\n if (!path || !isString(path)) {\n return '';\n }\n return urlEncode(path).replace(/%2F/g, '/');\n}\n\nfunction unescape(str) {\n return (str + '==='.slice((str.length + 3) % 4)).replace(/-/g, '+').replace(/_/g, '/');\n}\n\nfunction decode(str, encoding) {\n return Buffer.from(unescape(str), 'base64').toString(encoding || 'utf8');\n}\n\nfunction base64Url(str) {\n return Buffer.from(str).toString('base64url');\n}\n\nfunction resolve(obj) {\n return Promise.resolve(obj);\n}\n\nfunction checkParaObject(obj) {\n if (obj) {\n assert(obj instanceof ParaObject, 'Parameter must be a ParaObject.');\n }\n}\n\nfunction checkParaObjects(obj) {\n if (obj && isArray(obj) && !isEmpty(obj)) {\n assert(obj[0] instanceof ParaObject, 'Parameter must be an array of ParaObjects.');\n }\n}\n\nfunction checkPager(obj, fn) {\n if (obj) {\n if (isFunction(obj)) {\n return obj;\n } else {\n assert(obj instanceof Pager, 'Parameter must be a Pager object.');\n return fn || noop;\n }\n }\n return noop;\n}\n\nfunction checkConstraint(obj) {\n if (obj) {\n assert(obj instanceof Constraint, 'Parameter must be a Constraint object.');\n }\n}\n\nexport { ParaClient, ParaObject, Pager, Constraint };\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108],"mappings":"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"}