815 lines
1.6 MiB

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "vendor-chunks/@chainsafe";
exports.ids = ["vendor-chunks/@chainsafe"];
exports.modules = {
/***/ "(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/common/const.js":
/*!*************************************************************************!*\
!*** ./node_modules/@chainsafe/as-chacha20poly1305/lib/common/const.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.TAG_LENGTH = exports.DATA_CHUNK_LENGTH = exports.NONCE_LENGTH = exports.KEY_LENGTH = void 0;\nexports.KEY_LENGTH = 32;\nexports.NONCE_LENGTH = 12;\n// same to libp2p-noise\nexports.DATA_CHUNK_LENGTH = 65536;\nexports.TAG_LENGTH = 16; //# sourceMappingURL=const.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9jb21tb24vY29uc3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQUVHLE9BQU87QUFBSyxDQUFDLEVBQUM7QUFDN0RELGtCQUFrQixHQUFHQSx5QkFBeUIsR0FBR0Esb0JBQW9CLEdBQUdBLGtCQUFrQixHQUFHLEtBQUs7QUFDbEdBLGtCQUFrQixHQUFHO0FBQ3JCQSxvQkFBb0IsR0FBRztBQUN2Qix1QkFBdUI7QUFDdkJBLHlCQUF5QixHQUFHO0FBQzVCQSxrQkFBa0IsR0FBRyxJQUNyQixpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2FzLWNoYWNoYTIwcG9seTEzMDUvbGliL2NvbW1vbi9jb25zdC5qcz83OGNjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UQUdfTEVOR1RIID0gZXhwb3J0cy5EQVRBX0NIVU5LX0xFTkdUSCA9IGV4cG9ydHMuTk9OQ0VfTEVOR1RIID0gZXhwb3J0cy5LRVlfTEVOR1RIID0gdm9pZCAwO1xuZXhwb3J0cy5LRVlfTEVOR1RIID0gMzI7XG5leHBvcnRzLk5PTkNFX0xFTkdUSCA9IDEyO1xuLy8gc2FtZSB0byBsaWJwMnAtbm9pc2VcbmV4cG9ydHMuREFUQV9DSFVOS19MRU5HVEggPSA2NTUzNjtcbmV4cG9ydHMuVEFHX0xFTkdUSCA9IDE2O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3QuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiVEFHX0xFTkdUSCIsIkRBVEFfQ0hVTktfTEVOR1RIIiwiTk9OQ0VfTEVOR1RIIiwiS0VZX0xFTkdUSCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/common/const.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20.js":
/*!*************************************************************************!*\
!*** ./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.chacha20StreamXOR = void 0;\nconst wasm_1 = __webpack_require__(/*! ./wasm */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasm.js\");\nconst ctx = wasm_1.newInstance();\nconst wasmInputValue = ctx.chacha20Input.value;\nconst wasmOutputValue = ctx.chacha20Output.value;\nconst wasmKeyValue = ctx.chacha20Key.value;\nconst wasmCounterValue = ctx.chacha20Counter.value;\nconst { CHACHA20_INPUT_LENGTH, KEY_LENGTH, CHACHA20_COUNTER_LENGTH } = ctx;\nconst inputArr = new Uint8Array(ctx.memory.buffer, wasmInputValue, CHACHA20_INPUT_LENGTH);\nconst outputArr = new Uint8Array(ctx.memory.buffer, wasmOutputValue, CHACHA20_INPUT_LENGTH);\nconst keyArr = new Uint8Array(ctx.memory.buffer, wasmKeyValue, KEY_LENGTH);\nconst counterArr = new Uint8Array(ctx.memory.buffer, wasmCounterValue, CHACHA20_COUNTER_LENGTH);\n// const debugArray = new Uint32Array(ctx.memory.buffer, ctx.debug.value, 64);\n/**\n * chacha 20 function.\n * @param key a 32 byte Uint8Array\n * @param nonce a 16 byte Uint8Array\n * @param src\n * @returns\n */ function chacha20StreamXOR(key, nonce, src) {\n // We only support 256-bit keys.\n if (key.length != KEY_LENGTH) {\n throw new Error(\"ChaCha: key size must be 32 bytes, expected \" + KEY_LENGTH + \" got \" + key.length);\n }\n if (nonce.length != CHACHA20_COUNTER_LENGTH) {\n throw new Error(\"ChaCha nonce with counter must be 16 bytes\");\n }\n // init\n keyArr.set(key);\n counterArr.set(nonce);\n const output = new Uint8Array(src.length);\n // chunkify the work\n const loop = Math.floor(src.length / CHACHA20_INPUT_LENGTH);\n for(let i = 0; i <= loop; i++){\n const start = i * CHACHA20_INPUT_LENGTH;\n const end = Math.min((i + 1) * CHACHA20_INPUT_LENGTH, src.length);\n inputArr.set(loop === 0 ? src : src.subarray(start, end));\n const length = end - start;\n const dataLength = ctx.chacha20StreamXORUpdate(length);\n output.set(dataLength === CHACHA20_INPUT_LENGTH ? outputArr : outputArr.subarray(0, dataLength), start);\n }\n return output;\n}\nexports.chacha20StreamXOR = chacha20StreamXOR; //# sourceMappingURL=chacha20.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvY2hhY2hhMjAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQUVHLE9BQU87QUFBSyxDQUFDLEVBQUM7QUFDN0RELHlCQUF5QixHQUFHLEtBQUs7QUFDakMsTUFBTUcsU0FBU0MsbUJBQU9BLENBQUMsbUZBQVE7QUFDL0IsTUFBTUMsTUFBTUYsT0FBT0csV0FBVztBQUM5QixNQUFNQyxpQkFBaUJGLElBQUlHLGFBQWEsQ0FBQ1AsS0FBSztBQUM5QyxNQUFNUSxrQkFBa0JKLElBQUlLLGNBQWMsQ0FBQ1QsS0FBSztBQUNoRCxNQUFNVSxlQUFlTixJQUFJTyxXQUFXLENBQUNYLEtBQUs7QUFDMUMsTUFBTVksbUJBQW1CUixJQUFJUyxlQUFlLENBQUNiLEtBQUs7QUFDbEQsTUFBTSxFQUFFYyxxQkFBcUIsRUFBRUMsVUFBVSxFQUFFQyx1QkFBdUIsRUFBRSxHQUFHWjtBQUN2RSxNQUFNYSxXQUFXLElBQUlDLFdBQVdkLElBQUllLE1BQU0sQ0FBQ0MsTUFBTSxFQUFFZCxnQkFBZ0JRO0FBQ25FLE1BQU1PLFlBQVksSUFBSUgsV0FBV2QsSUFBSWUsTUFBTSxDQUFDQyxNQUFNLEVBQUVaLGlCQUFpQk07QUFDckUsTUFBTVEsU0FBUyxJQUFJSixXQUFXZCxJQUFJZSxNQUFNLENBQUNDLE1BQU0sRUFBRVYsY0FBY0s7QUFDL0QsTUFBTVEsYUFBYSxJQUFJTCxXQUFXZCxJQUFJZSxNQUFNLENBQUNDLE1BQU0sRUFBRVIsa0JBQWtCSTtBQUN2RSw4RUFBOEU7QUFDOUU7Ozs7OztDQU1DLEdBQ0QsU0FBU2Ysa0JBQWtCdUIsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLEdBQUc7SUFDdEMsZ0NBQWdDO0lBQ2hDLElBQUlGLElBQUlHLE1BQU0sSUFBSVosWUFBWTtRQUMxQixNQUFNLElBQUlhLE1BQU0saURBQWlEYixhQUFhLFVBQVVTLElBQUlHLE1BQU07SUFDdEc7SUFDQSxJQUFJRixNQUFNRSxNQUFNLElBQUlYLHlCQUF5QjtRQUN6QyxNQUFNLElBQUlZLE1BQU07SUFDcEI7SUFDQSxPQUFPO0lBQ1BOLE9BQU9PLEdBQUcsQ0FBQ0w7SUFDWEQsV0FBV00sR0FBRyxDQUFDSjtJQUNmLE1BQU1LLFNBQVMsSUFBSVosV0FBV1EsSUFBSUMsTUFBTTtJQUN4QyxvQkFBb0I7SUFDcEIsTUFBTUksT0FBT0MsS0FBS0MsS0FBSyxDQUFDUCxJQUFJQyxNQUFNLEdBQUdiO0lBQ3JDLElBQUssSUFBSW9CLElBQUksR0FBR0EsS0FBS0gsTUFBTUcsSUFBSztRQUM1QixNQUFNQyxRQUFRRCxJQUFJcEI7UUFDbEIsTUFBTXNCLE1BQU1KLEtBQUtLLEdBQUcsQ0FBQyxDQUFDSCxJQUFJLEtBQUtwQix1QkFBdUJZLElBQUlDLE1BQU07UUFDaEVWLFNBQVNZLEdBQUcsQ0FBQ0UsU0FBUyxJQUFJTCxNQUFNQSxJQUFJWSxRQUFRLENBQUNILE9BQU9DO1FBQ3BELE1BQU1ULFNBQVNTLE1BQU1EO1FBQ3JCLE1BQU1JLGFBQWFuQyxJQUFJb0MsdUJBQXVCLENBQUNiO1FBQy9DRyxPQUFPRCxHQUFHLENBQUNVLGVBQWV6Qix3QkFBd0JPLFlBQVlBLFVBQVVpQixRQUFRLENBQUMsR0FBR0MsYUFBYUo7SUFDckc7SUFDQSxPQUFPTDtBQUNYO0FBQ0EvQix5QkFBeUIsR0FBR0UsbUJBQzVCLG9DQUFvQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvYXMtY2hhY2hhMjBwb2x5MTMwNS9saWIvc3JjL2NoYWNoYTIwLmpzPzRmNTEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNoYWNoYTIwU3RyZWFtWE9SID0gdm9pZCAwO1xuY29uc3Qgd2FzbV8xID0gcmVxdWlyZShcIi4vd2FzbVwiKTtcbmNvbnN0IGN0eCA9IHdhc21fMS5uZXdJbnN0YW5jZSgpO1xuY29uc3Qgd2FzbUlucHV0VmFsdWUgPSBjdHguY2hhY2hhMjBJbnB1dC52YWx1ZTtcbmNvbnN0IHdhc21PdXRwdXRWYWx1ZSA9IGN0eC5jaGFjaGEyME91dHB1dC52YWx1ZTtcbmNvbnN0IHdhc21LZXlWYWx1ZSA9IGN0eC5jaGFjaGEyMEtleS52YWx1ZTtcbmNvbnN0IHdhc21Db3VudGVyVmFsdWUgPSBjdHguY2hhY2hhMjBDb3VudGVyLnZhbHVlO1xuY29uc3QgeyBDSEFDSEEyMF9JTlBVVF9MRU5HVEgsIEtFWV9MRU5HVEgsIENIQUNIQTIwX0NPVU5URVJfTEVOR1RIIH0gPSBjdHg7XG5jb25zdCBpbnB1dEFyciA9IG5ldyBVaW50OEFycmF5KGN0eC5tZW1vcnkuYnVmZmVyLCB3YXNtSW5wdXRWYWx1ZSwgQ0hBQ0hBMjBfSU5QVVRfTEVOR1RIKTtcbmNvbnN0IG91dHB1dEFyciA9IG5ldyBVaW50OEFycmF5KGN0eC5tZW1vcnkuYnVmZmVyLCB3YXNtT3V0cHV0VmFsdWUsIENIQUNIQTIwX0lOUFVUX0xFTkdUSCk7XG5jb25zdCBrZXlBcnIgPSBuZXcgVWludDhBcnJheShjdHgubWVtb3J5LmJ1ZmZlciwgd2FzbUtleVZhbHVlLCBLRVlfTEVOR1RIKTtcbmNvbnN0IGNvdW50ZXJBcnIgPSBuZXcgVWludDhBcnJheShjdHgubWVtb3J5LmJ1ZmZlciwgd2FzbUNvdW50ZXJWYWx1ZSwgQ0hBQ0hBMjBfQ09VTlRFUl9MRU5HVEgpO1xuLy8gY29uc3QgZGVidWdBcnJheSA9IG5ldyBVaW50MzJBcnJheShjdHgubWVtb3J5LmJ1ZmZlciwgY3R4LmRlYnVnLnZhbHVlLCA2NCk7XG4vKipcbiAqIGNoYWNoYSAyMCBmdW5jdGlvbi5cbiAqIEBwYXJhbSBrZXkgYSAzMiBieXRlIFVpbnQ4QXJyYXlcbiAqIEBwYXJhbSBub25jZSBhIDE2IGJ5dGUgVWludDhBcnJheVxuICogQHBhcmFtIHNyY1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gY2hhY2hhMjBTdHJlYW1YT1Ioa2V5LCBub25jZSwgc3JjKSB7XG4gICAgLy8gV2Ugb25seSBzdXBwb3J0IDI1Ni1iaXQga2V5cy5cbiAgICBpZiAoa2V5Lmxlbmd0aCAhPSBLRVlfTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoYUNoYToga2V5IHNpemUgbXVzdCBiZSAzMiBieXRlcywgZXhwZWN0ZWQgXCIgKyBLRVlfTEVOR1RIICsgXCIgZ290IFwiICsga2V5Lmxlbmd0aCk7XG4gICAgfVxuICAgIGlmIChub25jZS5sZW5ndGggIT0gQ0hBQ0hBMjBfQ09VTlRFUl9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhQ2hhIG5vbmNlIHdpdGggY291bnRlciBtdXN0IGJlIDE2IGJ5dGVzXCIpO1xuICAgIH1cbiAgICAvLyBpbml0XG4gICAga2V5QXJyLnNldChrZXkpO1xuICAgIGNvdW50ZXJBcnIuc2V0KG5vbmNlKTtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShzcmMubGVuZ3RoKTtcbiAgICAvLyBjaHVua2lmeSB0aGUgd29ya1xuICAgIGNvbnN0IGxvb3AgPSBNYXRoLmZsb29yKHNyYy5sZW5ndGggLyBDSEFDSEEyMF9JTlBVVF9MRU5HVEgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGxvb3A7IGkrKykge1xuICAgICAgICBjb25zdCBzdGFydCA9IGkgKiBDSEFDSEEyMF9JTlBVVF9MRU5HVEg7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKChpICsgMSkgKiBDSEFDSEEyMF9JTlBVVF9MRU5HVEgsIHNyYy5sZW5ndGgpO1xuICAgICAgICBpbnB1dEFyci5zZXQobG9vcCA9PT0gMCA/IHNyYyA6IHNyYy5zdWJhcnJheShzdGFydCwgZW5kKSk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGVuZCAtIHN0YXJ0O1xuICAgICAgICBjb25zdCBkYXRhTGVuZ3RoID0gY3R4LmNoYWNoYTIwU3RyZWFtWE9SVXBkYXRlKGxlbmd0aCk7XG4gICAgICAgIG91dHB1dC5zZXQoZGF0YUxlbmd0aCA9PT0gQ0hBQ0hBMjBfSU5QVVRfTEVOR1RIID8gb3V0cHV0QXJyIDogb3V0cHV0QXJyLnN1YmFycmF5KDAsIGRhdGFMZW5ndGgpLCBzdGFydCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5leHBvcnRzLmNoYWNoYTIwU3RyZWFtWE9SID0gY2hhY2hhMjBTdHJlYW1YT1I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGFjaGEyMC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJjaGFjaGEyMFN0cmVhbVhPUiIsIndhc21fMSIsInJlcXVpcmUiLCJjdHgiLCJuZXdJbnN0YW5jZSIsIndhc21JbnB1dFZhbHVlIiwiY2hhY2hhMjBJbnB1dCIsIndhc21PdXRwdXRWYWx1ZSIsImNoYWNoYTIwT3V0cHV0Iiwid2FzbUtleVZhbHVlIiwiY2hhY2hhMjBLZXkiLCJ3YXNtQ291bnRlclZhbHVlIiwiY2hhY2hhMjBDb3VudGVyIiwiQ0hBQ0hBMjBfSU5QVVRfTEVOR1RIIiwiS0VZX0xFTkdUSCIsIkNIQUNIQTIwX0NPVU5URVJfTEVOR1RIIiwiaW5wdXRBcnIiLCJVaW50OEFycmF5IiwibWVtb3J5IiwiYnVmZmVyIiwib3V0cHV0QXJyIiwia2V5QXJyIiwiY291bnRlckFyciIsImtleSIsIm5vbmNlIiwic3JjIiwibGVuZ3RoIiwiRXJyb3IiLCJzZXQiLCJvdXRwdXQiLCJsb29wIiwiTWF0aCIsImZsb29yIiwiaSIsInN0YXJ0IiwiZW5kIiwibWluIiwic3ViYXJyYXkiLCJkYXRhTGVuZ3RoIiwiY2hhY2hhMjBTdHJlYW1YT1JVcGRhdGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20poly1305.js":
/*!*********************************************************************************!*\
!*** ./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20poly1305.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.ChaCha20Poly1305 = void 0;\nconst const_1 = __webpack_require__(/*! ../common/const */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/common/const.js\");\nclass ChaCha20Poly1305 {\n constructor(ctx){\n this.ctx = ctx;\n const wasmKeyValue = ctx.cpKey.value;\n this.wasmKeyArr = new Uint8Array(ctx.memory.buffer, wasmKeyValue, const_1.KEY_LENGTH);\n const wasmNonceValue = ctx.cpNonce.value;\n this.wasmNonceArr = new Uint8Array(ctx.memory.buffer, wasmNonceValue, const_1.NONCE_LENGTH);\n const wasmAdValue = ctx.cpAssociatedData.value;\n // 32, same to KEY_LENGTH\n this.wasmAdArr = new Uint8Array(ctx.memory.buffer, wasmAdValue, const_1.KEY_LENGTH);\n const wasmSealedValue = ctx.cpInput.value;\n this.wasmInputArr = new Uint8Array(ctx.memory.buffer, wasmSealedValue, const_1.DATA_CHUNK_LENGTH);\n const wasmChacha20OutputValue = ctx.chacha20Output.value;\n this.wasmChacha20OutputArr = new Uint8Array(ctx.memory.buffer, wasmChacha20OutputValue, const_1.DATA_CHUNK_LENGTH);\n const wasmPoly1305OutputValue = ctx.poly1305Output.value;\n this.wasmPoly1305OutputArr = new Uint8Array(ctx.memory.buffer, wasmPoly1305OutputValue, const_1.TAG_LENGTH);\n const wasmDebugValue = ctx.debug.value;\n this.wasmDebugArr = new Uint32Array(ctx.memory.buffer, wasmDebugValue, 64);\n }\n /**\n * Encode function\n */ seal(key, nonce, plaintext, associatedData, dst) {\n this.init(key, nonce, associatedData);\n const resultLength = plaintext.length + const_1.TAG_LENGTH;\n let result;\n if (dst) {\n if (dst.length !== resultLength) {\n throw new Error(\"ChaCha20Poly1305: incorrect destination length\");\n }\n result = dst;\n } else {\n result = new Uint8Array(resultLength);\n }\n const asDataLength = associatedData?.length ?? 0;\n this.sealUpdate(plaintext, asDataLength, result);\n // wasmPoly1305OutputArr was updated after the last update() call\n result.set(this.wasmPoly1305OutputArr, plaintext.length);\n return result;\n }\n /**\n * Decode function\n */ open(key, nonce, sealed, associatedData, dst) {\n this.init(key, nonce, associatedData);\n const sealedNoTag = sealed.subarray(0, sealed.length - const_1.TAG_LENGTH);\n let result;\n if (dst) {\n if (dst.length !== sealedNoTag.length) {\n throw new Error(\"ChaCha20Poly1305: incorrect destination length\");\n }\n result = dst;\n } else {\n result = new Uint8Array(sealedNoTag.length);\n }\n const asDataLength = associatedData?.length ?? 0;\n this.openUpdate(sealedNoTag, asDataLength, result);\n const tag = sealed.subarray(sealed.length - const_1.TAG_LENGTH, sealed.length);\n // wasmPoly1305OutputArr was updated after the last update() call\n const isTagValid = this.isSameTag(tag);\n return isTagValid ? result : null;\n }\n init(key, nonce, ad = new Uint8Array(0)) {\n if (key.length != const_1.KEY_LENGTH) {\n throw Error(`Invalid chacha20poly1305 key length ${key.length}, expect ${const_1.KEY_LENGTH}`);\n }\n if (ad.length > const_1.KEY_LENGTH) {\n throw Error(`Invalid ad length ${ad.length}, expect <= ${const_1.KEY_LENGTH}`);\n }\n if (nonce.length !== const_1.NONCE_LENGTH) {\n throw Error(`Invalid nonce length ${nonce.length}, expect ${const_1.NONCE_LENGTH}`);\n }\n this.wasmKeyArr.set(key);\n this.wasmNonceArr.set(nonce);\n this.wasmAdArr.set(ad);\n // don't do the wasm init here, do it in the first openUpdate() or sealUpdate() to save one call\n }\n openUpdate(data, asDataLength, dst) {\n this.commonUpdate(data, this.ctx.openUpdate, asDataLength, dst);\n }\n sealUpdate(data, asDataLength, dst) {\n this.commonUpdate(data, this.ctx.sealUpdate, asDataLength, dst);\n }\n commonUpdate(data, updateFn, asDataLength, dst) {\n const length = data.length;\n if (data.length <= const_1.DATA_CHUNK_LENGTH) {\n this.wasmInputArr.set(data);\n updateFn(true, true, length, length, asDataLength);\n dst.set(length === const_1.DATA_CHUNK_LENGTH ? this.wasmChacha20OutputArr : this.wasmChacha20OutputArr.subarray(0, length));\n return;\n }\n for(let offset = 0; offset < length; offset += const_1.DATA_CHUNK_LENGTH){\n const end = Math.min(length, offset + const_1.DATA_CHUNK_LENGTH);\n this.wasmInputArr.set(data.subarray(offset, end));\n const isFirst = offset === 0;\n const isLast = offset + const_1.DATA_CHUNK_LENGTH >= length;\n updateFn(isFirst, isLast, end - offset, length, asDataLength);\n dst.set(end - offset === const_1.DATA_CHUNK_LENGTH ? this.wasmChacha20OutputArr : this.wasmChacha20OutputArr.subarray(0, end - offset), offset);\n }\n }\n isSameTag(tag) {\n // wasmPoly1305OutputArr is updated after the last digest() call\n let isSameTag = true;\n for(let i = 0; i < const_1.TAG_LENGTH; i++){\n if (this.wasmPoly1305OutputArr[i] !== tag[i]) {\n isSameTag = false;\n break;\n }\n }\n return isSameTag;\n }\n}\nexports.ChaCha20Poly1305 = ChaCha20Poly1305; //# sourceMappingURL=chacha20poly1305.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvY2hhY2hhMjBwb2x5MTMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFBRUcsT0FBTztBQUFLLENBQUMsRUFBQztBQUM3REQsd0JBQXdCLEdBQUcsS0FBSztBQUNoQyxNQUFNRyxVQUFVQyxtQkFBT0EsQ0FBQyxnR0FBaUI7QUFDekMsTUFBTUY7SUFDRkcsWUFBWUMsR0FBRyxDQUFFO1FBQ2IsSUFBSSxDQUFDQSxHQUFHLEdBQUdBO1FBQ1gsTUFBTUMsZUFBZUQsSUFBSUUsS0FBSyxDQUFDUCxLQUFLO1FBQ3BDLElBQUksQ0FBQ1EsVUFBVSxHQUFHLElBQUlDLFdBQVdKLElBQUlLLE1BQU0sQ0FBQ0MsTUFBTSxFQUFFTCxjQUFjSixRQUFRVSxVQUFVO1FBQ3BGLE1BQU1DLGlCQUFpQlIsSUFBSVMsT0FBTyxDQUFDZCxLQUFLO1FBQ3hDLElBQUksQ0FBQ2UsWUFBWSxHQUFHLElBQUlOLFdBQVdKLElBQUlLLE1BQU0sQ0FBQ0MsTUFBTSxFQUFFRSxnQkFBZ0JYLFFBQVFjLFlBQVk7UUFDMUYsTUFBTUMsY0FBY1osSUFBSWEsZ0JBQWdCLENBQUNsQixLQUFLO1FBQzlDLHlCQUF5QjtRQUN6QixJQUFJLENBQUNtQixTQUFTLEdBQUcsSUFBSVYsV0FBV0osSUFBSUssTUFBTSxDQUFDQyxNQUFNLEVBQUVNLGFBQWFmLFFBQVFVLFVBQVU7UUFDbEYsTUFBTVEsa0JBQWtCZixJQUFJZ0IsT0FBTyxDQUFDckIsS0FBSztRQUN6QyxJQUFJLENBQUNzQixZQUFZLEdBQUcsSUFBSWIsV0FBV0osSUFBSUssTUFBTSxDQUFDQyxNQUFNLEVBQUVTLGlCQUFpQmxCLFFBQVFxQixpQkFBaUI7UUFDaEcsTUFBTUMsMEJBQTBCbkIsSUFBSW9CLGNBQWMsQ0FBQ3pCLEtBQUs7UUFDeEQsSUFBSSxDQUFDMEIscUJBQXFCLEdBQUcsSUFBSWpCLFdBQVdKLElBQUlL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L0QsSUFBSSxDQUFDRCxZQUFZLENBQUMwQixHQUFHLENBQUNVLEtBQUtOLFFBQVEsQ0FBQ1MsUUFBUUM7WUFDNUMsTUFBTUcsVUFBVUosV0FBVztZQUMzQixNQUFNSyxTQUFTTCxTQUFTM0QsUUFBUXFCLGlCQUFpQixJQUFJb0I7WUFDckRpQixTQUFTSyxTQUFTQyxRQUFRSixNQUFNRCxRQUFRbEIsUUFBUUc7WUFDaEROLElBQUlRLEdBQUcsQ0FBQ2MsTUFBTUQsV0FBVzNELFFBQVFxQixpQkFBaUIsR0FDNUMsSUFBSSxDQUFDRyxxQkFBcUIsR0FDMUIsSUFBSSxDQUFDQSxxQkFBcUIsQ0FBQzBCLFFBQVEsQ0FBQyxHQUFHVSxNQUFNRCxTQUFTQTtRQUNoRTtJQUNKO0lBQ0FMLFVBQVVGLEdBQUcsRUFBRTtRQUNYLGdFQUFnRTtRQUNoRSxJQUFJRSxZQUFZO1FBQ2hCLElBQUssSUFBSVcsSUFBSSxHQUFHQSxJQUFJakUsUUFBUTRCLFVBQVUsRUFBRXFDLElBQUs7WUFDekMsSUFBSSxJQUFJLENBQUN0QyxxQkFBcUIsQ0FBQ3NDLEVBQUUsS0FBS2IsR0FBRyxDQUFDYSxFQUFFLEVBQUU7Z0JBQzFDWCxZQUFZO2dCQUNaO1lBQ0o7UUFDSjtRQUNBLE9BQU9BO0lBQ1g7QUFDSjtBQUNBekQsd0JBQXdCLEdBQUdFLGtCQUMzQiw0Q0FBNEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2FzLWNoYWNoYTIwcG9seTEzMDUvbGliL3NyYy9jaGFjaGEyMHBvbHkxMzA1LmpzP2FmZjAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkNoYUNoYTIwUG9seTEzMDUgPSB2b2lkIDA7XG5jb25zdCBjb25zdF8xID0gcmVxdWlyZShcIi4uL2NvbW1vbi9jb25zdFwiKTtcbmNsYXNzIENoYUNoYTIwUG9seTEzMDUge1xuICAgIGNvbnN0cnVjdG9yKGN0eCkge1xuICAgICAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICAgICAgY29uc3Qgd2FzbUtleVZhbHVlID0gY3R4LmNwS2V5LnZhbHVlO1xuICAgICAgICB0aGlzLndhc21LZXlBcnIgPSBuZXcgVWludDhBcnJheShjdHgubWVtb3J5LmJ1ZmZlciwgd2FzbUtleVZhbHVlLCBjb25zdF8xLktFWV9MRU5HVEgpO1xuICAgICAgICBjb25zdCB3YXNtTm9uY2VWYWx1ZSA9IGN0eC5jcE5vbmNlLnZhbHVlO1xuICAgICAgICB0aGlzLndhc21Ob25jZUFyciA9IG5ldyBVaW50OEFycmF5KGN0eC5tZW1vcnkuYnVmZmVyLCB3YXNtTm9uY2VWYWx1ZSwgY29uc3RfMS5OT05DRV9MRU5HVEgpO1xuICAgICAgICBjb25zdCB3YXNtQWRWYWx1ZSA9IGN0eC5jcEFzc29jaWF0ZWREYXRhLnZhbHVlO1xuICAgICAgICAvLyAzMiwgc2FtZSB0byBLRVlfTEVOR1RIXG4gICAgICAgIHRoaXMud2FzbUFkQXJyID0gbmV3IFVpbnQ4QXJyYXkoY3R4Lm1lbW9yeS5idWZmZXIsIHdhc21BZFZhbHVlLCBjb25zdF8xLktFWV9MRU5HVEgpO1xuICAgICAgICBjb25zdCB3YXNtU2VhbGVkVmFsdWUgPSBjdHguY3BJbnB1dC52YWx1ZTtcbiAgICAgICAgdGhpcy53YXNtSW5wdXRBcnIgPSBuZXcgVWludDhBcnJheShjdHgubWVtb3J5LmJ1ZmZlciwgd2FzbVNlYWxlZFZhbHVlLCBjb25zdF8xLkRBVEFfQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgY29uc3Qgd2FzbUNoYWNoYTIwT3V0cHV0VmFsdWUgPSBjdHguY2hhY2hhMjBPdXRwdXQudmFsdWU7XG4gICAgICAgIHRoaXMud2FzbUNoYWNoYTIwT3V0cHV0QXJyID0gbmV3IFVpbnQ4QXJyYXkoY3R4Lm1lbW9yeS5idWZmZXIsIHdhc21DaGFjaGEyME91dHB1dFZhbHVlLCBjb25zdF8xLkRBVEFfQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgY29uc3Qgd2FzbVBvbHkxMzA1T3V0cHV0VmFsdWUgPSBjdHgucG9seTEzMDVPdXRwdXQudmFsdWU7XG4gICAgICAgIHRoaXMud2FzbVBvbHkxMzA1T3V0cHV0QXJyID0gbmV3IFVpbnQ4QXJyYXkoY3R4Lm1lbW9yeS5idWZmZXIsIHdhc21Qb2x5MTMwNU91dHB1dFZhbHVlLCBjb25zdF8xLlRBR19MRU5HVEgpO1xuICAgICAgICBjb25zdCB3YXNtRGVidWdWYWx1ZSA9IGN0eC5kZWJ1Zy52YWx1ZTtcbiAgICAgICAgdGhpcy53YXNtRGVidWdBcnIgPSBuZXcgVWludDMyQXJyYXkoY3R4Lm1lbW9yeS5idWZmZXIsIHdhc21EZWJ1Z1ZhbHVlLCA2NCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEVuY29kZSBmdW5jdGlvblxuICAgICAqL1xuICAgIHNlYWwoa2V5LCBub25jZSwgcGxhaW50ZXh0LCBhc3NvY2lhdGVkRGF0YSwgZHN0KSB7XG4gICAgICAgIHRoaXMuaW5pdChrZXksIG5vbmNlLCBhc3NvY2lhdGVkRGF0YSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdExlbmd0aCA9IHBsYWludGV4dC5sZW5ndGggKyBjb25zdF8xLlRBR19MRU5HVEg7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmIChkc3QpIHtcbiAgICAgICAgICAgIGlmIChkc3QubGVuZ3RoICE9PSByZXN1bHRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGFDaGEyMFBvbHkxMzA1OiBpbmNvcnJlY3QgZGVzdGluYXRpb24gbGVuZ3RoXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gZHN0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0TGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc0RhdGFMZW5ndGggPSBhc3NvY2lhdGVkRGF0YT8ubGVuZ3RoID8/IDA7XG4gICAgICAgIHRoaXMuc2VhbFVwZGF0ZShwbGFpbnRleHQsIGFzRGF0YUxlbmd0aCwgcmVzdWx0KTtcbiAgICAgICAgLy8gd2FzbVBvbHkxMzA1T3V0cHV0QXJyIHdhcyB1cGRhdGVkIGFmdGVyIHRoZSBsYXN0IHVwZGF0ZSgpIGNhbGxcbiAgICAgICAgcmVzdWx0LnNldCh0aGlzLndhc21Qb2x5MTMwNU91dHB1dEFyciwgcGxhaW50ZXh0Lmxlbmd0aCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY29kZSBmdW5jdGlvblxuICAgICAqL1xuICAgIG9wZW4oa2V5LCBub25jZSwgc2VhbGVkLCBhc3NvY2lhdGVkRGF0YSwgZHN0KSB7XG4gICAgICAgIHRoaXMuaW5pdChrZXksIG5vbmNlLCBhc3NvY2lhdGVkRGF0YSk7XG4gICAgICAgIGNvbnN0IHNlYWxlZE5vVGFnID0gc2VhbGVkLnN1YmFycmF5KDAsIHNlYWxlZC5sZW5ndGggLSBjb25zdF8xLlRBR19MRU5HVEgpO1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBpZiAoZHN0KSB7XG4gICAgICAgICAgICBpZiAoZHN0Lmxlbmd0aCAhPT0gc2VhbGVkTm9UYWcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhQ2hhMjBQb2x5MTMwNTogaW5jb3JyZWN0IGRlc3RpbmF0aW9uIGxlbmd0aFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IGRzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KHNlYWxlZE5vVGFnLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXNEYXRhTGVuZ3RoID0gYXNzb2NpYXRlZERhdGE/Lmxlbmd0aCA/PyAwO1xuICAgICAgICB0aGlzLm9wZW5VcGRhdGUoc2VhbGVkTm9UYWcsIGFzRGF0YUxlbmd0aCwgcmVzdWx0KTtcbiAgICAgICAgY29uc3QgdGFnID0gc2VhbGVkLnN1YmFycmF5KHNlYWxlZC5sZW5ndGggLSBjb25zdF8xLlRBR19MRU5HVEgsIHNlYWxlZC5sZW5ndGgpO1xuICAgICAgICAvLyB3YXNtUG9seTEzMDVPdXRwdXRBcnIgd2FzIHVwZGF0ZWQgYWZ0ZXIgdGhlIGxhc3QgdXBkYXRlKCkgY2FsbFxuICAgICAgICBjb25zdCBpc1RhZ1ZhbGlkID0gdGhpcy5pc1NhbWVUYWcodGFnKTtcbiAgICAgICAgcmV0dXJuIGlzVGFnVmFsaWQgPyByZXN1bHQgOiBudWxsO1xuICAgIH1cbiAgICBpbml0KGtleSwgbm9uY2UsIGFkID0gbmV3IFVpbnQ4QXJyYXkoMCkpIHtcbiAgICAgICAgaWYgKGtleS5sZW5ndGggIT0gY29uc3RfMS5LRVlfTEVOR1RIKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBjaGFjaGEyMHBvbHkxMzA1IGtleSBsZW5ndGggJHtrZXkubGVuZ3RofSwgZXhwZWN0ICR7Y29uc3RfMS5LRVlfTEVOR1RIfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZC5sZW5ndGggPiBjb25zdF8xLktFWV9MRU5HVEgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGFkIGxlbmd0aCAke2FkLmxlbmd0aH0sIGV4cGVjdCA8PSAke2NvbnN0XzEuS0VZX0xFTkdUSH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9uY2UubGVuZ3RoICE9PSBjb25zdF8xLk5PTkNFX0xFTkdUSCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgbm9uY2UgbGVuZ3RoICR7bm9uY2UubGVuZ3RofSwgZXhwZWN0ICR7Y29uc3RfMS5OT05DRV9MRU5HVEh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YXNtS2V5QXJyLnNldChrZXkpO1xuICAgICAgICB0aGlzLndhc21Ob25jZUFyci5zZXQobm9uY2UpO1xuICAgICAgICB0aGlzLndhc21BZEFyci5zZXQoYWQpO1xuICAgICAgICAvLyBkb24ndCBkbyB0aGUgd2FzbSBpbml0IGhlcmUsIGRvIGl0IGluIHRoZSBmaXJzdCBvcGVuVXBkYXRlKCkgb3Igc2VhbFVwZGF0ZSgpIHRvIHNhdmUgb25lIGNhbGxcbiAgICB9XG4gICAgb3BlblVwZGF0ZShkYXRhLCBhc0RhdGFMZW5ndGgsIGRzdCkge1xuICAgICAgICB0aGlzLmNvbW1vblVwZGF0ZShkYXRhLCB0aGlzLmN0eC5vcGVuVXBkYXRlLCBhc0RhdGFMZW5ndGgsIGRzdCk7XG4gICAgfVxuICAgIHNlYWxVcGRhdGUoZGF0YSwgYXNEYXRhTGVuZ3RoLCBkc3QpIHtcbiAgICAgICAgdGhpcy5jb21tb25VcGRhdGUoZGF0YSwgdGhpcy5jdHguc2VhbFVwZGF0ZSwgYXNEYXRhTGVuZ3RoLCBkc3QpO1xuICAgIH1cbiAgICBjb21tb25VcGRhdGUoZGF0YSwgdXBkYXRlRm4sIGFzRGF0YUxlbmd0aCwgZHN0KSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPD0gY29uc3RfMS5EQVRBX0NIVU5LX0xFTkdUSCkge1xuICAgICAgICAgICAgdGhpcy53YXNtSW5wdXRBcnIuc2V0KGRhdGEpO1xuICAgICAgICAgICAgdXBkYXRlRm4odHJ1ZSwgdHJ1ZSwgbGVuZ3RoLCBsZW5ndGgsIGFzRGF0YUxlbmd0aCk7XG4gICAgICAgICAgICBkc3Quc2V0KGxlbmd0aCA9PT0gY29uc3RfMS5EQVRBX0NIVU5LX0xFTkdUSCA/IHRoaXMud2FzbUNoYWNoYTIwT3V0cHV0QXJyIDogdGhpcy53YXNtQ2hhY2hhMjBPdXRwdXRBcnIuc3ViYXJyYXkoMCwgbGVuZ3RoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuZ3RoOyBvZmZzZXQgKz0gY29uc3RfMS5EQVRBX0NIVU5LX0xFTkdUSCkge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4obGVuZ3RoLCBvZmZzZXQgKyBjb25zdF8xLkRBVEFfQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgICAgIHRoaXMud2FzbUlucHV0QXJyLnNldChkYXRhLnN1YmFycmF5KG9mZnNldCwgZW5kKSk7XG4gICAgICAgICAgICBjb25zdCBpc0ZpcnN0ID0gb2Zmc2V0ID09PSAwO1xuICAgICAgICAgICAgY29uc3QgaXNMYXN0ID0gb2Zmc2V0ICsgY29uc3RfMS5EQVRBX0NIVU5LX0xFTkdUSCA+PSBsZW5ndGg7XG4gICAgICAgICAgICB1cGRhdGVGbihpc0ZpcnN0LCBpc0xhc3QsIGVuZCAtIG9mZnNldCwgbGVuZ3RoLCBhc0RhdGFMZW5ndGgpO1xuICAgICAgICAgICAgZHN0LnNldChlbmQgLSBvZmZzZXQgPT09IGNvbnN0XzEuREFUQV9DSFVOS19MRU5HVEhcbiAgICAgICAgICAgICAgICA/IHRoaXMud2FzbUNoYWNoYTIwT3V0cHV0QXJyXG4gICAgICAgICAgICAgICAgOiB0aGlzLndhc21DaGFjaGEyME91dHB1dEFyci5zdWJhcnJheSgwLCBlbmQgLSBvZmZzZXQpLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzU2FtZVRhZyh0YWcpIHtcbiAgICAgICAgLy8gd2FzbVBvbHkxMzA1T3V0cHV0QXJyIGlzIHVwZGF0ZWQgYWZ0ZXIgdGhlIGxhc3QgZGlnZXN0KCkgY2FsbFxuICAgICAgICBsZXQgaXNTYW1lVGFnID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25zdF8xLlRBR19MRU5HVEg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMud2FzbVBvbHkxMzA1T3V0cHV0QXJyW2ldICE9PSB0YWdbaV0pIHtcbiAgICAgICAgICAgICAgICBpc1NhbWVUYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTYW1lVGFnO1xuICAgIH1cbn1cbmV4cG9ydHMuQ2hhQ2hhMjBQb2x5MTMwNSA9IENoYUNoYTIwUG9seTEzMDU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGFjaGEyMHBvbHkxMzA1LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIkNoYUNoYTIwUG9seTEzMDUiLCJjb25zdF8xIiwicmVxdWlyZSIsImNvbnN0cnVjdG9yIiwiY3R4Iiwid2FzbUtleVZhbHVlIiwiY3BLZXkiLCJ3YXNtS2V5QXJyIiwiVWludDhBcnJheSIsIm1lbW9yeSIsImJ1ZmZlciIsIktFWV9MRU5HVEgiLCJ3YXNtTm9uY2VWYWx1ZSIsImNwTm9uY2UiLCJ3YXNtTm9uY2VBcnIiLCJOT05DRV9MRU5HVEgiLCJ3YXNtQWRWYWx1ZSIsImNwQXNzb2NpYXRlZERhdGEiLCJ3YXNtQWRBcnIiLCJ3YXNtU2VhbGVkVmFsdWUiLCJjcElucHV0Iiwid2FzbUlucHV0QXJyIiwiREFUQV9DSFVOS19MRU5HVEgiLCJ3YXNtQ2hhY2hhMjBPdXRwdXRWYWx1ZSIsImNoYWNoYTIwT3V0cHV0Iiwid2FzbUNoYWNoYTIwT3V0cHV0QXJyIiwid2FzbVBvbHkxMzA1T3V0cHV0VmFsdWUiLCJwb2x5MTMwNU91dHB1dCIsIndhc21Qb2x5MTMwNU91dHB1dEFyciIsIlRBR19MRU5HVEgiLCJ3YXNtRGVidWdWYWx1ZSIsImRlYnVnIiwid2FzbURlYnVnQXJyIiwiVWludDMyQXJyYXkiLCJzZWFsIiwia2V5Iiwibm9uY2UiLCJwbGFpbnRleHQiLCJhc3NvY2lhdGVkRGF0YSIsImRzdCIsImluaXQiLCJyZXN1bHRMZW5ndGgiLCJsZW5ndGgiLCJyZXN1bHQiLCJFcnJvciIsImFzRGF0YUxlbmd0aCIsInNlYWxVcGRhdGUiLCJzZXQiLCJvcGVuIiwic2VhbGVkIiwic2VhbGVkTm9UYWciLCJzdWJhcnJheSIsIm9wZW5VcGRhdGUiLCJ0YWciLCJpc1RhZ1ZhbGlkIiwiaXNTYW1lVGFnIiwiYWQiLCJkYXRhIiwiY29tbW9uVXBkYXRlIiwidXBkYXRlRm4iLCJvZmZzZXQiLCJlbmQiLCJNYXRoIiwibWluIiwiaXNGaXJzdCIsImlzTGFzdCIsImkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20poly1305.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/index.js":
/*!**********************************************************************!*\
!*** ./node_modules/@chainsafe/as-chacha20poly1305/lib/src/index.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.newInstance = exports.chacha20StreamXOR = exports.Poly1305 = exports.ChaCha20Poly1305 = void 0;\nvar chacha20poly1305_1 = __webpack_require__(/*! ./chacha20poly1305 */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20poly1305.js\");\nObject.defineProperty(exports, \"ChaCha20Poly1305\", ({\n enumerable: true,\n get: function() {\n return chacha20poly1305_1.ChaCha20Poly1305;\n }\n}));\nvar poly1305_1 = __webpack_require__(/*! ./poly1305 */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/poly1305.js\");\nObject.defineProperty(exports, \"Poly1305\", ({\n enumerable: true,\n get: function() {\n return poly1305_1.Poly1305;\n }\n}));\nvar chacha20_1 = __webpack_require__(/*! ./chacha20 */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20.js\");\nObject.defineProperty(exports, \"chacha20StreamXOR\", ({\n enumerable: true,\n get: function() {\n return chacha20_1.chacha20StreamXOR;\n }\n}));\nvar wasm_1 = __webpack_require__(/*! ./wasm */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasm.js\");\nObject.defineProperty(exports, \"newInstance\", ({\n enumerable: true,\n get: function() {\n return wasm_1.newInstance;\n }\n})); //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQUVHLE9BQU87QUFBSyxDQUFDLEVBQUM7QUFDN0RELG1CQUFtQixHQUFHQSx5QkFBeUIsR0FBR0EsZ0JBQWdCLEdBQUdBLHdCQUF3QixHQUFHLEtBQUs7QUFDckcsSUFBSU0scUJBQXFCQyxtQkFBT0EsQ0FBQywyR0FBb0I7QUFDckRULG9EQUFtRDtJQUFFVSxZQUFZO0lBQU1DLEtBQUs7UUFBYyxPQUFPSCxtQkFBbUJELGdCQUFnQjtJQUFFO0FBQUUsQ0FBQyxFQUFDO0FBQzFJLElBQUlLLGFBQWFILG1CQUFPQSxDQUFDLDJGQUFZO0FBQ3JDVCw0Q0FBMkM7SUFBRVUsWUFBWTtJQUFNQyxLQUFLO1FBQWMsT0FBT0MsV0FBV04sUUFBUTtJQUFFO0FBQUUsQ0FBQyxFQUFDO0FBQ2xILElBQUlPLGFBQWFKLG1CQUFPQSxDQUFDLDJGQUFZO0FBQ3JDVCxxREFBb0Q7SUFBRVUsWUFBWTtJQUFNQyxLQUFLO1FBQWMsT0FBT0UsV0FBV1IsaUJBQWlCO0lBQUU7QUFBRSxDQUFDLEVBQUM7QUFDcEksSUFBSVMsU0FBU0wsbUJBQU9BLENBQUMsbUZBQVE7QUFDN0JULCtDQUE4QztJQUFFVSxZQUFZO0lBQU1DLEtBQUs7UUFBYyxPQUFPRyxPQUFPVixXQUFXO0lBQUU7QUFBRSxDQUFDLEVBQUMsRUFDcEgsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvaW5kZXguanM/NmIyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMubmV3SW5zdGFuY2UgPSBleHBvcnRzLmNoYWNoYTIwU3RyZWFtWE9SID0gZXhwb3J0cy5Qb2x5MTMwNSA9IGV4cG9ydHMuQ2hhQ2hhMjBQb2x5MTMwNSA9IHZvaWQgMDtcbnZhciBjaGFjaGEyMHBvbHkxMzA1XzEgPSByZXF1aXJlKFwiLi9jaGFjaGEyMHBvbHkxMzA1XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hhQ2hhMjBQb2x5MTMwNVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hhY2hhMjBwb2x5MTMwNV8xLkNoYUNoYTIwUG9seTEzMDU7IH0gfSk7XG52YXIgcG9seTEzMDVfMSA9IHJlcXVpcmUoXCIuL3BvbHkxMzA1XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUG9seTEzMDVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBvbHkxMzA1XzEuUG9seTEzMDU7IH0gfSk7XG52YXIgY2hhY2hhMjBfMSA9IHJlcXVpcmUoXCIuL2NoYWNoYTIwXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2hhY2hhMjBTdHJlYW1YT1JcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoYWNoYTIwXzEuY2hhY2hhMjBTdHJlYW1YT1I7IH0gfSk7XG52YXIgd2FzbV8xID0gcmVxdWlyZShcIi4vd2FzbVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5ld0luc3RhbmNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB3YXNtXzEubmV3SW5zdGFuY2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJuZXdJbnN0YW5jZSIsImNoYWNoYTIwU3RyZWFtWE9SIiwiUG9seTEzMDUiLCJDaGFDaGEyMFBvbHkxMzA1IiwiY2hhY2hhMjBwb2x5MTMwNV8xIiwicmVxdWlyZSIsImVudW1lcmFibGUiLCJnZXQiLCJwb2x5MTMwNV8xIiwiY2hhY2hhMjBfMSIsIndhc21fMSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/poly1305.js":
/*!*************************************************************************!*\
!*** ./node_modules/@chainsafe/as-chacha20poly1305/lib/src/poly1305.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.Poly1305 = void 0;\nconst const_1 = __webpack_require__(/*! ../common/const */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/common/const.js\");\nclass Poly1305 {\n constructor(ctx){\n this.ctx = ctx;\n const wasmPoly1305KeyValue = ctx.poly1305Key.value;\n this.wasmKeyArr = new Uint8Array(ctx.memory.buffer, wasmPoly1305KeyValue, const_1.KEY_LENGTH);\n const wasmPoly1305InputValue = ctx.poly1305Input.value;\n this.wasmInputArr = new Uint8Array(ctx.memory.buffer, wasmPoly1305InputValue, const_1.DATA_CHUNK_LENGTH);\n const wasmPoly1305OutputValue = ctx.poly1305Output.value;\n this.wasmOutputArr = new Uint8Array(ctx.memory.buffer, wasmPoly1305OutputValue, const_1.TAG_LENGTH);\n const wasmPoly1305DebugValue = ctx.debug.value;\n this.wasmDebugArr = new Uint32Array(ctx.memory.buffer, wasmPoly1305DebugValue, 64);\n }\n init(key) {\n if (key.length != const_1.KEY_LENGTH) {\n throw Error(`Invalid poly1305 key length ${key.length}, expect ${const_1.KEY_LENGTH}`);\n }\n this.wasmKeyArr.set(key);\n this.ctx.poly1305Init();\n }\n update(data) {\n if (data.length <= const_1.DATA_CHUNK_LENGTH) {\n this.wasmInputArr.set(data);\n this.ctx.poly1305Update(data.length);\n return;\n }\n for(let offset = 0; offset < data.length; offset += const_1.DATA_CHUNK_LENGTH){\n const end = Math.min(data.length, offset + const_1.DATA_CHUNK_LENGTH);\n this.wasmInputArr.set(data.subarray(offset, end));\n this.ctx.poly1305Update(end - offset);\n }\n }\n digest() {\n this.ctx.poly1305Digest();\n const out = new Uint8Array(const_1.TAG_LENGTH);\n out.set(this.wasmOutputArr);\n return out;\n }\n}\nexports.Poly1305 = Poly1305; //# sourceMappingURL=poly1305.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvcG9seTEzMDUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQUVHLE9BQU87QUFBSyxDQUFDLEVBQUM7QUFDN0RELGdCQUFnQixHQUFHLEtBQUs7QUFDeEIsTUFBTUcsVUFBVUMsbUJBQU9BLENBQUMsZ0dBQWlCO0FBQ3pDLE1BQU1GO0lBQ0ZHLFlBQVlDLEdBQUcsQ0FBRTtRQUNiLElBQUksQ0FBQ0EsR0FBRyxHQUFHQTtRQUNYLE1BQU1DLHVCQUF1QkQsSUFBSUUsV0FBVyxDQUFDUCxLQUFLO1FBQ2xELElBQUksQ0FBQ1EsVUFBVSxHQUFHLElBQUlDLFdBQVdKLElBQUlLLE1BQU0sQ0FBQ0MsTUFBTSxFQUFFTCxzQkFBc0JKLFFBQVFVLFVBQVU7UUFDNUYsTUFBTUMseUJBQXlCUixJQUFJUyxhQUFhLENBQUNkLEtBQUs7UUFDdEQsSUFBSSxDQUFDZSxZQUFZLEdBQUcsSUFBSU4sV0FBV0osSUFBSUssTUFBTSxDQUFDQyxNQUFNLEVBQUVFLHdCQUF3QlgsUUFBUWMsaUJBQWlCO1FBQ3ZHLE1BQU1DLDBCQUEwQlosSUFBSWEsY0FBYyxDQUFDbEIsS0FBSztRQUN4RCxJQUFJLENBQUNtQixhQUFhLEdBQUcsSUFBSVYsV0FBV0osSUFBSUssTUFBTSxDQUFDQyxNQUFNLEVBQUVNLHlCQUF5QmYsUUFBUWtCLFVBQVU7UUFDbEcsTUFBTUMseUJBQXlCaEIsSUFBSWlCLEtBQUssQ0FBQ3RCLEtBQUs7UUFDOUMsSUFBSSxDQUFDdUIsWUFBWSxHQUFHLElBQUlDLFlBQVluQixJQUFJSyxNQUFNLENBQUNDLE1BQU0sRUFBRVUsd0JBQXdCO0lBQ25GO0lBQ0FJLEtBQUtDLEdBQUcsRUFBRTtRQUNOLElBQUlBLElBQUlDLE1BQU0sSUFBSXpCLFFBQVFVLFVBQVUsRUFBRTtZQUNsQyxNQUFNZ0IsTUFBTSxDQUFDLDRCQUE0QixFQUFFRixJQUFJQyxNQUFNLENBQUMsU0FBUyxFQUFFekIsUUFBUVUsVUFBVSxDQUFDLENBQUM7UUFDekY7UUFDQSxJQUFJLENBQUNKLFVBQVUsQ0FBQ3FCLEdBQUcsQ0FBQ0g7UUFDcEIsSUFBSSxDQUFDckIsR0FBRyxDQUFDeUIsWUFBWTtJQUN6QjtJQUNBQyxPQUFPQyxJQUFJLEVBQUU7UUFDVCxJQUFJQSxLQUFLTCxNQUFNLElBQUl6QixRQUFRYyxpQkFBaUIsRUFBRTtZQUMxQyxJQUFJLENBQUNELFlBQVksQ0FBQ2MsR0FBRyxDQUFDRztZQUN0QixJQUFJLENBQUMzQixHQUFHLENBQUM0QixjQUFjLENBQUNELEtBQUtMLE1BQU07WUFDbkM7UUFDSjtRQUNBLElBQUssSUFBSU8sU0FBUyxHQUFHQSxTQUFTRixLQUFLTCxNQUFNLEVBQUVPLFVBQVVoQyxRQUFRYyxpQkFBaUIsQ0FBRTtZQUM1RSxNQUFNbUIsTUFBTUMsS0FBS0MsR0FBRyxDQUFDTCxLQUFLTCxNQUFNLEVBQUVPLFNBQVNoQyxRQUFRYyxpQkFBaUI7WUFDcEUsSUFBSSxDQUFDRCxZQUFZLENBQUNjLEdBQUcsQ0FBQ0csS0FBS00sUUFBUSxDQUFDSixRQUFRQztZQUM1QyxJQUFJLENBQUM5QixHQUFHLENBQUM0QixjQUFjLENBQUNFLE1BQU1EO1FBQ2xDO0lBQ0o7SUFDQUssU0FBUztRQUNMLElBQUksQ0FBQ2xDLEdBQUcsQ0FBQ21DLGNBQWM7UUFDdkIsTUFBTUMsTUFBTSxJQUFJaEMsV0FBV1AsUUFBUWtCLFVBQVU7UUFDN0NxQixJQUFJWixHQUFHLENBQUMsSUFBSSxDQUFDVixhQUFhO1FBQzFCLE9BQU9zQjtJQUNYO0FBQ0o7QUFDQTFDLGdCQUFnQixHQUFHRSxVQUNuQixvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2FzLWNoYWNoYTIwcG9seTEzMDUvbGliL3NyYy9wb2x5MTMwNS5qcz81M2FjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qb2x5MTMwNSA9IHZvaWQgMDtcbmNvbnN0IGNvbnN0XzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL2NvbnN0XCIpO1xuY2xhc3MgUG9seTEzMDUge1xuICAgIGNvbnN0cnVjdG9yKGN0eCkge1xuICAgICAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICAgICAgY29uc3Qgd2FzbVBvbHkxMzA1S2V5VmFsdWUgPSBjdHgucG9seTEzMDVLZXkudmFsdWU7XG4gICAgICAgIHRoaXMud2FzbUtleUFyciA9IG5ldyBVaW50OEFycmF5KGN0eC5tZW1vcnkuYnVmZmVyLCB3YXNtUG9seTEzMDVLZXlWYWx1ZSwgY29uc3RfMS5LRVlfTEVOR1RIKTtcbiAgICAgICAgY29uc3Qgd2FzbVBvbHkxMzA1SW5wdXRWYWx1ZSA9IGN0eC5wb2x5MTMwNUlucHV0LnZhbHVlO1xuICAgICAgICB0aGlzLndhc21JbnB1dEFyciA9IG5ldyBVaW50OEFycmF5KGN0eC5tZW1vcnkuYnVmZmVyLCB3YXNtUG9seTEzMDVJbnB1dFZhbHVlLCBjb25zdF8xLkRBVEFfQ0hVTktfTEVOR1RIKTtcbiAgICAgICAgY29uc3Qgd2FzbVBvbHkxMzA1T3V0cHV0VmFsdWUgPSBjdHgucG9seTEzMDVPdXRwdXQudmFsdWU7XG4gICAgICAgIHRoaXMud2FzbU91dHB1dEFyciA9IG5ldyBVaW50OEFycmF5KGN0eC5tZW1vcnkuYnVmZmVyLCB3YXNtUG9seTEzMDVPdXRwdXRWYWx1ZSwgY29uc3RfMS5UQUdfTEVOR1RIKTtcbiAgICAgICAgY29uc3Qgd2FzbVBvbHkxMzA1RGVidWdWYWx1ZSA9IGN0eC5kZWJ1Zy52YWx1ZTtcbiAgICAgICAgdGhpcy53YXNtRGVidWdBcnIgPSBuZXcgVWludDMyQXJyYXkoY3R4Lm1lbW9yeS5idWZmZXIsIHdhc21Qb2x5MTMwNURlYnVnVmFsdWUsIDY0KTtcbiAgICB9XG4gICAgaW5pdChrZXkpIHtcbiAgICAgICAgaWYgKGtleS5sZW5ndGggIT0gY29uc3RfMS5LRVlfTEVOR1RIKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBwb2x5MTMwNSBrZXkgbGVuZ3RoICR7a2V5Lmxlbmd0aH0sIGV4cGVjdCAke2NvbnN0XzEuS0VZX0xFTkdUSH1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhc21LZXlBcnIuc2V0KGtleSk7XG4gICAgICAgIHRoaXMuY3R4LnBvbHkxMzA1SW5pdCgpO1xuICAgIH1cbiAgICB1cGRhdGUoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPD0gY29uc3RfMS5EQVRBX0NIVU5LX0xFTkdUSCkge1xuICAgICAgICAgICAgdGhpcy53YXNtSW5wdXRBcnIuc2V0KGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5jdHgucG9seTEzMDVVcGRhdGUoZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGRhdGEubGVuZ3RoOyBvZmZzZXQgKz0gY29uc3RfMS5EQVRBX0NIVU5LX0xFTkdUSCkge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oZGF0YS5sZW5ndGgsIG9mZnNldCArIGNvbnN0XzEuREFUQV9DSFVOS19MRU5HVEgpO1xuICAgICAgICAgICAgdGhpcy53YXNtSW5wdXRBcnIuc2V0KGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBlbmQpKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnBvbHkxMzA1VXBkYXRlKGVuZCAtIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlnZXN0KCkge1xuICAgICAgICB0aGlzLmN0eC5wb2x5MTMwNURpZ2VzdCgpO1xuICAgICAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjb25zdF8xLlRBR19MRU5HVEgpO1xuICAgICAgICBvdXQuc2V0KHRoaXMud2FzbU91dHB1dEFycik7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxufVxuZXhwb3J0cy5Qb2x5MTMwNSA9IFBvbHkxMzA1O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9seTEzMDUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiUG9seTEzMDUiLCJjb25zdF8xIiwicmVxdWlyZSIsImNvbnN0cnVjdG9yIiwiY3R4Iiwid2FzbVBvbHkxMzA1S2V5VmFsdWUiLCJwb2x5MTMwNUtleSIsIndhc21LZXlBcnIiLCJVaW50OEFycmF5IiwibWVtb3J5IiwiYnVmZmVyIiwiS0VZX0xFTkdUSCIsIndhc21Qb2x5MTMwNUlucHV0VmFsdWUiLCJwb2x5MTMwNUlucHV0Iiwid2FzbUlucHV0QXJyIiwiREFUQV9DSFVOS19MRU5HVEgiLCJ3YXNtUG9seTEzMDVPdXRwdXRWYWx1ZSIsInBvbHkxMzA1T3V0cHV0Iiwid2FzbU91dHB1dEFyciIsIlRBR19MRU5HVEgiLCJ3YXNtUG9seTEzMDVEZWJ1Z1ZhbHVlIiwiZGVidWciLCJ3YXNtRGVidWdBcnIiLCJVaW50MzJBcnJheSIsImluaXQiLCJrZXkiLCJsZW5ndGgiLCJFcnJvciIsInNldCIsInBvbHkxMzA1SW5pdCIsInVwZGF0ZSIsImRhdGEiLCJwb2x5MTMwNVVwZGF0ZSIsIm9mZnNldCIsImVuZCIsIk1hdGgiLCJtaW4iLCJzdWJhcnJheSIsImRpZ2VzdCIsInBvbHkxMzA1RGlnZXN0Iiwib3V0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/poly1305.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasm.js":
/*!*********************************************************************!*\
!*** ./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasm.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.newInstance = void 0;\nconst wasmCode_1 = __webpack_require__(/*! ./wasmCode */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasmCode.js\");\nconst _module = new WebAssembly.Module(wasmCode_1.wasmCode);\nconst importObj = {\n env: {\n // modified from https://github.com/AssemblyScript/assemblyscript/blob/v0.9.2/lib/loader/index.js#L70\n abort: function(msg, file, line, col) {\n throw Error(`abort: ${msg}:${file}:${line}:${col}`);\n }\n }\n};\nfunction newInstance() {\n return new WebAssembly.Instance(_module, importObj).exports;\n}\nexports.newInstance = newInstance; //# sourceMappingURL=wasm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvd2FzbS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFBRUcsT0FBTztBQUFLLENBQUMsRUFBQztBQUM3REQsbUJBQW1CLEdBQUcsS0FBSztBQUMzQixNQUFNRyxhQUFhQyxtQkFBT0EsQ0FBQywyRkFBWTtBQUN2QyxNQUFNQyxVQUFVLElBQUlDLFlBQVlDLE1BQU0sQ0FBQ0osV0FBV0ssUUFBUTtBQUMxRCxNQUFNQyxZQUFZO0lBQ2RDLEtBQUs7UUFDRCxxR0FBcUc7UUFDckdDLE9BQU8sU0FBVUMsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsR0FBRztZQUNqQyxNQUFNQyxNQUFNLENBQUMsT0FBTyxFQUFFSixJQUFJLENBQUMsRUFBRUMsS0FBSyxDQUFDLEVBQUVDLEtBQUssQ0FBQyxFQUFFQyxJQUFJLENBQUM7UUFDdEQ7SUFDSjtBQUNKO0FBQ0EsU0FBU2I7SUFDTCxPQUFPLElBQUlJLFlBQVlXLFFBQVEsQ0FBQ1osU0FBU0ksV0FBV1QsT0FBTztBQUMvRDtBQUNBQSxtQkFBbUIsR0FBR0UsYUFDdEIsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvd2FzbS5qcz84ZTdjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5uZXdJbnN0YW5jZSA9IHZvaWQgMDtcbmNvbnN0IHdhc21Db2RlXzEgPSByZXF1aXJlKFwiLi93YXNtQ29kZVwiKTtcbmNvbnN0IF9tb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHdhc21Db2RlXzEud2FzbUNvZGUpO1xuY29uc3QgaW1wb3J0T2JqID0ge1xuICAgIGVudjoge1xuICAgICAgICAvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Bc3NlbWJseVNjcmlwdC9hc3NlbWJseXNjcmlwdC9ibG9iL3YwLjkuMi9saWIvbG9hZGVyL2luZGV4LmpzI0w3MFxuICAgICAgICBhYm9ydDogZnVuY3Rpb24gKG1zZywgZmlsZSwgbGluZSwgY29sKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgYWJvcnQ6ICR7bXNnfToke2ZpbGV9OiR7bGluZX06JHtjb2x9YCk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5mdW5jdGlvbiBuZXdJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKF9tb2R1bGUsIGltcG9ydE9iaikuZXhwb3J0cztcbn1cbmV4cG9ydHMubmV3SW5zdGFuY2UgPSBuZXdJbnN0YW5jZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhc20uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibmV3SW5zdGFuY2UiLCJ3YXNtQ29kZV8xIiwicmVxdWlyZSIsIl9tb2R1bGUiLCJXZWJBc3NlbWJseSIsIk1vZHVsZSIsIndhc21Db2RlIiwiaW1wb3J0T2JqIiwiZW52IiwiYWJvcnQiLCJtc2ciLCJmaWxlIiwibGluZSIsImNvbCIsIkVycm9yIiwiSW5zdGFuY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasm.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasmCode.js":
/*!*************************************************************************!*\
!*** ./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasmCode.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n// This file was autogenerated by scripts/codegen.ts\n// DO NOT modify this file by hand!\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.wasmCode = void 0;\n// eslint-disable-next-line prettier/prettier\nexports.wasmCode = Uint8Array.from([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 58,\n 10,\n 96,\n 0,\n 0,\n 96,\n 2,\n 127,\n 127,\n 0,\n 96,\n 1,\n 127,\n 0,\n 96,\n 3,\n 127,\n 127,\n 127,\n 0,\n 96,\n 1,\n 127,\n 1,\n 127,\n 96,\n 4,\n 127,\n 127,\n 127,\n 127,\n 0,\n 96,\n 5,\n 127,\n 127,\n 127,\n 127,\n 127,\n 0,\n 96,\n 0,\n 1,\n 127,\n 96,\n 2,\n 127,\n 127,\n 1,\n 127,\n 96,\n 5,\n 127,\n 127,\n 127,\n 127,\n 127,\n 1,\n 127,\n 2,\n 13,\n 1,\n 3,\n 101,\n 110,\n 118,\n 5,\n 97,\n 98,\n 111,\n 114,\n 116,\n 0,\n 5,\n 3,\n 34,\n 33,\n 2,\n 8,\n 1,\n 4,\n 0,\n 4,\n 7,\n 0,\n 0,\n 3,\n 3,\n 2,\n 1,\n 9,\n 4,\n 2,\n 0,\n 3,\n 1,\n 2,\n 2,\n 1,\n 0,\n 0,\n 0,\n 5,\n 1,\n 1,\n 1,\n 6,\n 1,\n 6,\n 0,\n 5,\n 3,\n 1,\n 0,\n 1,\n 6,\n 238,\n 1,\n 47,\n 127,\n 0,\n 65,\n 32,\n 11,\n 127,\n 0,\n 65,\n 16,\n 11,\n 127,\n 0,\n 65,\n 128,\n 128,\n 4,\n 11,\n 127,\n 0,\n 65,\n 16,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 7,\n 226,\n 2,\n 23,\n 6,\n 109,\n 101,\n 109,\n 111,\n 114,\n 121,\n 2,\n 0,\n 21,\n 67,\n 72,\n 65,\n 67,\n 72,\n 65,\n 50,\n 48,\n 95,\n 73,\n 78,\n 80,\n 85,\n 84,\n 95,\n 76,\n 69,\n 78,\n 71,\n 84,\n 72,\n 3,\n 2,\n 23,\n 67,\n 72,\n 65,\n 67,\n 72,\n 65,\n 50,\n 48,\n 95,\n 67,\n 79,\n 85,\n 78,\n 84,\n 69,\n 82,\n 95,\n 76,\n 69,\n 78,\n 71,\n 84,\n 72,\n 3,\n 3,\n 13,\n 99,\n 104,\n 97,\n 99,\n 104,\n 97,\n 50,\n 48,\n 73,\n 110,\n 112,\n 117,\n 116,\n 3,\n 6,\n 11,\n 99,\n 104,\n 97,\n 99,\n 104,\n 97,\n 50,\n 48,\n 75,\n 101,\n 121,\n 3,\n 8,\n 15,\n 99,\n 104,\n 97,\n 99,\n 104,\n 97,\n 50,\n 48,\n 67,\n 111,\n 117,\n 110,\n 116,\n 101,\n 114,\n 3,\n 10,\n 14,\n 99,\n 104,\n 97,\n 99,\n 104,\n 97,\n 50,\n 48,\n 79,\n 117,\n 116,\n 112,\n 117,\n 116,\n 3,\n 12,\n 23,\n 99,\n 104,\n 97,\n 99,\n 104,\n 97,\n 50,\n 48,\n 83,\n 116,\n 114,\n 101,\n 97,\n 109,\n 88,\n 79,\n 82,\n 85,\n 112,\n 100,\n 97,\n 116,\n 101,\n 0,\n 15,\n 10,\n 75,\n 69,\n 89,\n 95,\n 76,\n 69,\n 78,\n 71,\n 84,\n 72,\n 3,\n 0,\n 10,\n 84,\n 65,\n 71,\n 95,\n 76,\n 69,\n 78,\n 71,\n 84,\n 72,\n 3,\n 1,\n 12,\n 112,\n 111,\n 108,\n 121,\n 49,\n 51,\n 48,\n 53,\n 73,\n 110,\n 105,\n 116,\n 0,\n 17,\n 14,\n 112,\n 111,\n 108,\n 121,\n 49,\n 51,\n 48,\n 53,\n 85,\n 112,\n 100,\n 97,\n 116,\n 101,\n 0,\n 20,\n 14,\n 112,\n 111,\n 108,\n 121,\n 49,\n 51,\n 48,\n 53,\n 68,\n 105,\n 103,\n 101,\n 115,\n 116,\n 0,\n 24,\n 13,\n 112,\n 111,\n 108,\n 121,\n 49,\n 51,\n 48,\n 53,\n 73,\n 110,\n 112,\n 117,\n 116,\n 3,\n 19,\n 11,\n 112,\n 111,\n 108,\n 121,\n 49,\n 51,\n 48,\n 53,\n 75,\n 101,\n 121,\n 3,\n 18,\n 14,\n 112,\n 111,\n 108,\n 121,\n 49,\n 51,\n 48,\n 53,\n 79,\n 117,\n 116,\n 112,\n 117,\n 116,\n 3,\n 20,\n 10,\n 111,\n 112,\n 101,\n 110,\n 85,\n 112,\n 100,\n 97,\n 116,\n 101,\n 0,\n 30,\n 10,\n 115,\n 101,\n 97,\n 108,\n 85,\n 112,\n 100,\n 97,\n 116,\n 101,\n 0,\n 32,\n 5,\n 99,\n 112,\n 75,\n 101,\n 121,\n 3,\n 37,\n 7,\n 99,\n 112,\n 78,\n 111,\n 110,\n 99,\n 101,\n 3,\n 39,\n 7,\n 99,\n 112,\n 73,\n 110,\n 112,\n 117,\n 116,\n 3,\n 43,\n 16,\n 99,\n 112,\n 65,\n 115,\n 115,\n 111,\n 99,\n 105,\n 97,\n 116,\n 101,\n 100,\n 68,\n 97,\n 116,\n 97,\n 3,\n 41,\n 5,\n 100,\n 101,\n 98,\n 117,\n 103,\n 3,\n 46,\n 8,\n 1,\n 33,\n 10,\n 195,\n 47,\n 33,\n 70,\n 1,\n 2,\n 127,\n 32,\n 0,\n 63,\n 0,\n 34,\n 2,\n 65,\n 16,\n 116,\n 34,\n 1,\n 75,\n 4,\n 64,\n 32,\n 2,\n 32,\n 0,\n 32,\n 1,\n 107,\n 65,\n 255,\n 255,\n 3,\n 106,\n 65,\n 128,\n 128,\n 124,\n 113,\n 65,\n 16,\n 118,\n 34,\n 1,\n 32,\n 2,\n 32,\n 1,\n 74,\n 27,\n 64,\n 0,\n 65,\n 0,\n 72,\n 4,\n 64,\n 32,\n 1,\n 64,\n 0,\n 65,\n 0,\n 72,\n 4,\n 64,\n 0,\n 11,\n 11,\n 11,\n 32,\n 0,\n 36,\n 5,\n 11,\n 82,\n 1,\n 3,\n 127,\n 32,\n 0,\n 65,\n 240,\n 255,\n 255,\n 255,\n 3,\n 75,\n 4,\n 64,\n 0,\n 11,\n 35,\n 5,\n 65,\n 16,\n 106,\n 34,\n 3,\n 32,\n 0,\n 65,\n 15,\n 106,\n 65,\n 112,\n 113,\n 34,\n 2,\n 65,\n 16,\n 32,\n 2,\n 65,\n 16,\n 75,\n 27,\n 34,\n 4,\n 106,\n 16,\n 1,\n 32,\n 3,\n 65,\n 16,\n 107,\n 34,\n 2,\n 32,\n 4,\n 54,\n 2,\n 0,\n 32,\n 2,\n 65,\n 1,\n 54,\n 2,\n 4,\n 32,\n 2,\n 32,\n 1,\n 54,\n 2,\n 8,\n 32,\n 2,\n 32,\n 0,\n 54,\n 2,\n 12,\n 32,\n 3,\n 11,\n 37,\n 1,\n 1,\n 127,\n 3,\n 64,\n 32,\n 1,\n 4,\n 64,\n 32,\n 0,\n 34,\n 2,\n 65,\n 1,\n 106,\n 33,\n 0,\n 32,\n 2,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 1,\n 65,\n 1,\n 107,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 11,\n 42,\n 1,\n 1,\n 127,\n 32,\n 0,\n 65,\n 240,\n 255,\n 255,\n 255,\n 3,\n 75,\n 4,\n 64,\n 65,\n 32,\n 65,\n 208,\n 0,\n 65,\n 54,\n 65,\n 42,\n 16,\n 0,\n 0,\n 11,\n 32,\n 0,\n 65,\n 0,\n 16,\n 2,\n 34,\n 1,\n 32,\n 0,\n 16,\n 3,\n 32,\n 1,\n 11,\n 67,\n 0,\n 65,\n 128,\n 3,\n 36,\n 4,\n 65,\n 128,\n 3,\n 36,\n 5,\n 65,\n 128,\n 128,\n 4,\n 16,\n 4,\n 36,\n 6,\n 35,\n 6,\n 36,\n 7,\n 65,\n 32,\n 16,\n 4,\n 36,\n 8,\n 35,\n 8,\n 36,\n 9,\n 65,\n 16,\n 16,\n 4,\n 36,\n 10,\n 35,\n 10,\n 36,\n 11,\n 65,\n 128,\n 128,\n 4,\n 16,\n 4,\n 36,\n 12,\n 35,\n 12,\n 36,\n 13,\n 65,\n 192,\n 0,\n 16,\n 4,\n 36,\n 14,\n 35,\n 14,\n 36,\n 15,\n 11,\n 83,\n 1,\n 1,\n 127,\n 65,\n 128,\n 2,\n 65,\n 0,\n 16,\n 2,\n 34,\n 1,\n 65,\n 128,\n 2,\n 16,\n 3,\n 32,\n 0,\n 69,\n 4,\n 64,\n 65,\n 12,\n 65,\n 2,\n 16,\n 2,\n 33,\n 0,\n 11,\n 32,\n 0,\n 65,\n 0,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 0,\n 54,\n 2,\n 4,\n 32,\n 0,\n 65,\n 0,\n 54,\n 2,\n 8,\n 32,\n 0,\n 40,\n 2,\n 0,\n 26,\n 32,\n 0,\n 32,\n 1,\n 54,\n 2,\n 0,\n 32,\n 0,\n 32,\n 1,\n 54,\n 2,\n 4,\n 32,\n 0,\n 65,\n 128,\n 2,\n 54,\n 2,\n 8,\n 32,\n 0,\n 11,\n 10,\n 0,\n 65,\n 12,\n 65,\n 3,\n 16,\n 2,\n 16,\n 6,\n 11,\n 95,\n 0,\n 16,\n 7,\n 36,\n 16,\n 35,\n 16,\n 40,\n 2,\n 0,\n 36,\n 17,\n 65,\n 32,\n 16,\n 4,\n 36,\n 18,\n 65,\n 128,\n 128,\n 4,\n 16,\n 4,\n 36,\n 19,\n 65,\n 16,\n 16,\n 4,\n 36,\n 20,\n 35,\n 18,\n 36,\n 21,\n 35,\n 19,\n 36,\n 22,\n 35,\n 20,\n 36,\n 23,\n 65,\n 16,\n 16,\n 4,\n 36,\n 24,\n 35,\n 24,\n 36,\n 25,\n 65,\n 20,\n 16,\n 4,\n 36,\n 26,\n 35,\n 26,\n 36,\n 27,\n 65,\n 20,\n 16,\n 4,\n 36,\n 28,\n 35,\n 28,\n 36,\n 29,\n 65,\n 16,\n 16,\n 4,\n 36,\n 30,\n 35,\n 30,\n 36,\n 31,\n 65,\n 20,\n 16,\n 4,\n 36,\n 35,\n 35,\n 35,\n 36,\n 36,\n 11,\n 55,\n 0,\n 65,\n 32,\n 16,\n 4,\n 36,\n 37,\n 35,\n 37,\n 36,\n 38,\n 65,\n 12,\n 16,\n 4,\n 36,\n 39,\n 35,\n 39,\n 36,\n 40,\n 65,\n 32,\n 16,\n 4,\n 36,\n 41,\n 35,\n 41,\n 36,\n 42,\n 65,\n 128,\n 128,\n 4,\n 16,\n 4,\n 36,\n 43,\n 35,\n 43,\n 36,\n 44,\n 16,\n 7,\n 36,\n 45,\n 35,\n 45,\n 40,\n 2,\n 0,\n 36,\n 46,\n 11,\n 22,\n 0,\n 32,\n 1,\n 32,\n 2,\n 65,\n 255,\n 1,\n 113,\n 65,\n 4,\n 110,\n 65,\n 2,\n 116,\n 106,\n 32,\n 0,\n 54,\n 2,\n 0,\n 11,\n 188,\n 6,\n 1,\n 31,\n 127,\n 65,\n 229,\n 240,\n 193,\n 139,\n 6,\n 33,\n 5,\n 65,\n 238,\n 200,\n 129,\n 153,\n 3,\n 33,\n 6,\n 65,\n 178,\n 218,\n 136,\n 203,\n 7,\n 33,\n 14,\n 65,\n 244,\n 202,\n 129,\n 217,\n 6,\n 33,\n 7,\n 32,\n 2,\n 40,\n 2,\n 0,\n 34,\n 19,\n 33,\n 4,\n 32,\n 2,\n 65,\n 4,\n 106,\n 40,\n 2,\n 0,\n 34,\n 20,\n 33,\n 8,\n 32,\n 2,\n 65,\n 8,\n 106,\n 40,\n 2,\n 0,\n 34,\n 21,\n 33,\n 3,\n 32,\n 2,\n 65,\n 12,\n 106,\n 40,\n 2,\n 0,\n 34,\n 22,\n 33,\n 13,\n 32,\n 2,\n 65,\n 16,\n 106,\n 40,\n 2,\n 0,\n 34,\n 23,\n 33,\n 15,\n 32,\n 2,\n 65,\n 20,\n 106,\n 40,\n 2,\n 0,\n 34,\n 24,\n 33,\n 9,\n 32,\n 2,\n 65,\n 24,\n 106,\n 40,\n 2,\n 0,\n 34,\n 25,\n 33,\n 10,\n 32,\n 2,\n 65,\n 28,\n 106,\n 40,\n 2,\n 0,\n 34,\n 26,\n 33,\n 2,\n 32,\n 1,\n 40,\n 2,\n 0,\n 34,\n 27,\n 33,\n 11,\n 32,\n 1,\n 65,\n 4,\n 106,\n 40,\n 2,\n 0,\n 34,\n 28,\n 33,\n 16,\n 32,\n 1,\n 65,\n 8,\n 106,\n 40,\n 2,\n 0,\n 34,\n 29,\n 33,\n 12,\n 32,\n 1,\n 65,\n 12,\n 106,\n 40,\n 2,\n 0,\n 34,\n 30,\n 33,\n 1,\n 3,\n 64,\n 32,\n 18,\n 65,\n 20,\n 72,\n 4,\n 64,\n 32,\n 3,\n 32,\n 10,\n 32,\n 12,\n 32,\n 3,\n 32,\n 14,\n 106,\n 34,\n 3,\n 115,\n 65,\n 16,\n 119,\n 34,\n 14,\n 106,\n 34,\n 10,\n 115,\n 65,\n 12,\n 119,\n 34,\n 12,\n 32,\n 10,\n 32,\n 14,\n 32,\n 3,\n 32,\n 12,\n 106,\n 34,\n 3,\n 115,\n 65,\n 8,\n 119,\n 34,\n 14,\n 106,\n 34,\n 10,\n 115,\n 33,\n 12,\n 32,\n 13,\n 32,\n 2,\n 32,\n 1,\n 32,\n 7,\n 32,\n 13,\n 106,\n 34,\n 1,\n 115,\n 65,\n 16,\n 119,\n 34,\n 2,\n 106,\n 34,\n 13,\n 115,\n 65,\n 12,\n 119,\n 34,\n 7,\n 32,\n 13,\n 32,\n 2,\n 32,\n 1,\n 32,\n 7,\n 106,\n 34,\n 13,\n 115,\n 65,\n 8,\n 119,\n 34,\n 1,\n 106,\n 34,\n 2,\n 115,\n 33,\n 7,\n 32,\n 4,\n 32,\n 15,\n 32,\n 11,\n 32,\n 4,\n 32,\n 5,\n 106,\n 34,\n 4,\n 115,\n 65,\n 16,\n 119,\n 34,\n 5,\n 106,\n 34,\n 15,\n 115,\n 65,\n 12,\n 119,\n 34,\n 11,\n 32,\n 15,\n 32,\n 5,\n 32,\n 4,\n 32,\n 11,\n 106,\n 34,\n 4,\n 115,\n 65,\n 8,\n 119,\n 34,\n 5,\n 106,\n 34,\n 15,\n 115,\n 33,\n 11,\n 32,\n 10,\n 32,\n 1,\n 32,\n 8,\n 32,\n 9,\n 32,\n 16,\n 32,\n 6,\n 32,\n 8,\n 106,\n 34,\n 1,\n 115,\n 65,\n 16,\n 119,\n 34,\n 8,\n 106,\n 34,\n 6,\n 115,\n 65,\n 12,\n 119,\n 34,\n 9,\n 32,\n 6,\n 32,\n 8,\n 32,\n 1,\n 32,\n 9,\n 106,\n 34,\n 1,\n 115,\n 65,\n 8,\n 119,\n 34,\n 6,\n 106,\n 34,\n 9,\n 115,\n 65,\n 7,\n 119,\n 34,\n 10,\n 32,\n 4,\n 106,\n 34,\n 17,\n 115,\n 65,\n 16,\n 119,\n 34,\n 31,\n 106,\n 33,\n 8,\n 32,\n 2,\n 32,\n 5,\n 32,\n 12,\n 65,\n 7,\n 119,\n 34,\n 5,\n 32,\n 1,\n 106,\n 34,\n 32,\n 115,\n 65,\n 16,\n 119,\n 34,\n 33,\n 106,\n 33,\n 1,\n 32,\n 9,\n 32,\n 14,\n 32,\n 13,\n 32,\n 11,\n 65,\n 7,\n 119,\n 34,\n 9,\n 106,\n 34,\n 11,\n 115,\n 65,\n 16,\n 119,\n 34,\n 12,\n 106,\n 33,\n 4,\n 32,\n 15,\n 32,\n 6,\n 32,\n 3,\n 32,\n 7,\n 65,\n 7,\n 119,\n 34,\n 3,\n 106,\n 34,\n 6,\n 115,\n 65,\n 16,\n 119,\n 34,\n 7,\n 106,\n 34,\n 2,\n 32,\n 6,\n 32,\n 2,\n 32,\n 3,\n 115,\n 65,\n 12,\n 119,\n 34,\n 3,\n 106,\n 34,\n 14,\n 32,\n 7,\n 115,\n 65,\n 8,\n 119,\n 34,\n 16,\n 106,\n 34,\n 15,\n 32,\n 3,\n 115,\n 65,\n 7,\n 119,\n 33,\n 13,\n 32,\n 11,\n 32,\n 4,\n 32,\n 9,\n 115,\n 65,\n 12,\n 119,\n 34,\n 2,\n 106,\n 34,\n 7,\n 32,\n 12,\n 115,\n 65,\n 8,\n 119,\n 34,\n 12,\n 32,\n 4,\n 106,\n 34,\n 9,\n 32,\n 2,\n 115,\n 65,\n 7,\n 119,\n 33,\n 4,\n 32,\n 32,\n 32,\n 1,\n 32,\n 5,\n 115,\n 65,\n 12,\n 119,\n 34,\n 3,\n 106,\n 34,\n 6,\n 32,\n 33,\n 115,\n 65,\n 8,\n 119,\n 34,\n 11,\n 32,\n 1,\n 106,\n 34,\n 2,\n 32,\n 3,\n 115,\n 65,\n 7,\n 119,\n 33,\n 3,\n 32,\n 17,\n 32,\n 8,\n 32,\n 10,\n 115,\n 65,\n 12,\n 119,\n 34,\n 17,\n 106,\n 34,\n 5,\n 32,\n 31,\n 115,\n 65,\n 8,\n 119,\n 34,\n 1,\n 32,\n 8,\n 106,\n 34,\n 10,\n 32,\n 17,\n 115,\n 65,\n 7,\n 119,\n 33,\n 8,\n 32,\n 18,\n 65,\n 2,\n 106,\n 33,\n 18,\n 12,\n 1,\n 11,\n 11,\n 32,\n 5,\n 65,\n 229,\n 240,\n 193,\n 139,\n 6,\n 106,\n 32,\n 0,\n 65,\n 0,\n 16,\n 10,\n 32,\n 6,\n 65,\n 238,\n 200,\n 129,\n 153,\n 3,\n 106,\n 32,\n 0,\n 65,\n 4,\n 16,\n 10,\n 32,\n 14,\n 65,\n 178,\n 218,\n 136,\n 203,\n 7,\n 106,\n 32,\n 0,\n 65,\n 8,\n 16,\n 10,\n 32,\n 7,\n 65,\n 244,\n 202,\n 129,\n 217,\n 6,\n 106,\n 32,\n 0,\n 65,\n 12,\n 16,\n 10,\n 32,\n 4,\n 32,\n 19,\n 106,\n 32,\n 0,\n 65,\n 16,\n 16,\n 10,\n 32,\n 8,\n 32,\n 20,\n 106,\n 32,\n 0,\n 65,\n 20,\n 16,\n 10,\n 32,\n 3,\n 32,\n 21,\n 106,\n 32,\n 0,\n 65,\n 24,\n 16,\n 10,\n 32,\n 13,\n 32,\n 22,\n 106,\n 32,\n 0,\n 65,\n 28,\n 16,\n 10,\n 32,\n 15,\n 32,\n 23,\n 106,\n 32,\n 0,\n 65,\n 32,\n 16,\n 10,\n 32,\n 9,\n 32,\n 24,\n 106,\n 32,\n 0,\n 65,\n 36,\n 16,\n 10,\n 32,\n 10,\n 32,\n 25,\n 106,\n 32,\n 0,\n 65,\n 40,\n 16,\n 10,\n 32,\n 2,\n 32,\n 26,\n 106,\n 32,\n 0,\n 65,\n 44,\n 16,\n 10,\n 32,\n 11,\n 32,\n 27,\n 106,\n 32,\n 0,\n 65,\n 48,\n 16,\n 10,\n 32,\n 16,\n 32,\n 28,\n 106,\n 32,\n 0,\n 65,\n 52,\n 16,\n 10,\n 32,\n 12,\n 32,\n 29,\n 106,\n 32,\n 0,\n 65,\n 56,\n 16,\n 10,\n 32,\n 1,\n 32,\n 30,\n 106,\n 32,\n 0,\n 65,\n 60,\n 16,\n 10,\n 11,\n 97,\n 1,\n 4,\n 127,\n 65,\n 4,\n 33,\n 3,\n 65,\n 1,\n 33,\n 1,\n 3,\n 64,\n 32,\n 3,\n 34,\n 2,\n 65,\n 1,\n 107,\n 33,\n 3,\n 32,\n 2,\n 65,\n 255,\n 1,\n 113,\n 4,\n 64,\n 32,\n 1,\n 32,\n 0,\n 32,\n 4,\n 65,\n 255,\n 1,\n 113,\n 106,\n 34,\n 2,\n 45,\n 0,\n 0,\n 106,\n 33,\n 1,\n 32,\n 2,\n 32,\n 1,\n 58,\n 0,\n 0,\n 32,\n 1,\n 65,\n 8,\n 118,\n 33,\n 1,\n 32,\n 4,\n 65,\n 1,\n 106,\n 33,\n 4,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 65,\n 0,\n 74,\n 4,\n 64,\n 65,\n 144,\n 1,\n 65,\n 208,\n 1,\n 65,\n 135,\n 2,\n 65,\n 4,\n 16,\n 0,\n 0,\n 11,\n 11,\n 8,\n 0,\n 32,\n 0,\n 32,\n 1,\n 16,\n 3,\n 11,\n 108,\n 1,\n 2,\n 127,\n 3,\n 64,\n 32,\n 6,\n 32,\n 1,\n 73,\n 4,\n 64,\n 35,\n 15,\n 32,\n 3,\n 32,\n 2,\n 16,\n 11,\n 32,\n 6,\n 33,\n 5,\n 3,\n 64,\n 32,\n 5,\n 32,\n 1,\n 73,\n 65,\n 0,\n 32,\n 5,\n 32,\n 6,\n 65,\n 64,\n 107,\n 73,\n 27,\n 4,\n 64,\n 32,\n 4,\n 32,\n 5,\n 106,\n 32,\n 0,\n 32,\n 5,\n 106,\n 45,\n 0,\n 0,\n 35,\n 15,\n 32,\n 5,\n 32,\n 6,\n 107,\n 106,\n 45,\n 0,\n 0,\n 115,\n 58,\n 0,\n 0,\n 32,\n 5,\n 65,\n 1,\n 106,\n 33,\n 5,\n 12,\n 1,\n 11,\n 11,\n 32,\n 3,\n 16,\n 12,\n 32,\n 6,\n 65,\n 64,\n 107,\n 33,\n 6,\n 12,\n 1,\n 11,\n 11,\n 35,\n 15,\n 65,\n 192,\n 0,\n 16,\n 13,\n 32,\n 1,\n 11,\n 14,\n 0,\n 35,\n 7,\n 32,\n 0,\n 35,\n 9,\n 35,\n 11,\n 35,\n 13,\n 16,\n 14,\n 11,\n 204,\n 4,\n 1,\n 1,\n 127,\n 35,\n 27,\n 32,\n 0,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 1,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 2,\n 106,\n 32,\n 1,\n 65,\n 13,\n 118,\n 32,\n 0,\n 65,\n 2,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 3,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 3,\n 116,\n 114,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 4,\n 106,\n 32,\n 1,\n 65,\n 10,\n 118,\n 32,\n 0,\n 65,\n 4,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 5,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 6,\n 116,\n 114,\n 65,\n 131,\n 62,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 6,\n 106,\n 32,\n 1,\n 65,\n 7,\n 118,\n 32,\n 0,\n 65,\n 6,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 7,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 9,\n 116,\n 114,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 8,\n 106,\n 32,\n 1,\n 65,\n 4,\n 118,\n 32,\n 0,\n 65,\n 8,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 9,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 12,\n 116,\n 114,\n 65,\n 255,\n 1,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 10,\n 106,\n 32,\n 1,\n 65,\n 1,\n 118,\n 65,\n 254,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 12,\n 106,\n 32,\n 1,\n 65,\n 14,\n 118,\n 32,\n 0,\n 65,\n 10,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 11,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 2,\n 116,\n 114,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 14,\n 106,\n 32,\n 1,\n 65,\n 11,\n 118,\n 32,\n 0,\n 65,\n 12,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 13,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 5,\n 116,\n 114,\n 65,\n 129,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 16,\n 106,\n 32,\n 1,\n 65,\n 8,\n 118,\n 32,\n 0,\n 65,\n 14,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 15,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 1,\n 65,\n 8,\n 116,\n 114,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 27,\n 65,\n 18,\n 106,\n 32,\n 1,\n 65,\n 5,\n 118,\n 65,\n 255,\n 0,\n 113,\n 59,\n 1,\n 0,\n 35,\n 31,\n 32,\n 0,\n 65,\n 16,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 17,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 31,\n 65,\n 2,\n 106,\n 32,\n 0,\n 65,\n 18,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 19,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 31,\n 65,\n 4,\n 106,\n 32,\n 0,\n 65,\n 20,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 21,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 31,\n 65,\n 6,\n 106,\n 32,\n 0,\n 65,\n 22,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 23,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 31,\n 65,\n 8,\n 106,\n 32,\n 0,\n 65,\n 24,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 25,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 31,\n 65,\n 10,\n 106,\n 32,\n 0,\n 65,\n 26,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 27,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 31,\n 65,\n 12,\n 106,\n 32,\n 0,\n 65,\n 28,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 29,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 31,\n 65,\n 14,\n 106,\n 32,\n 0,\n 65,\n 30,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 65,\n 31,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 59,\n 1,\n 0,\n 11,\n 6,\n 0,\n 35,\n 21,\n 16,\n 16,\n 11,\n 166,\n 13,\n 1,\n 32,\n 127,\n 65,\n 0,\n 65,\n 128,\n 16,\n 35,\n 33,\n 27,\n 33,\n 34,\n 35,\n 29,\n 47,\n 1,\n 0,\n 33,\n 3,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 33,\n 4,\n 35,\n 29,\n 65,\n 4,\n 106,\n 47,\n 1,\n 0,\n 33,\n 8,\n 35,\n 29,\n 65,\n 6,\n 106,\n 47,\n 1,\n 0,\n 33,\n 9,\n 35,\n 29,\n 65,\n 8,\n 106,\n 47,\n 1,\n 0,\n 33,\n 10,\n 35,\n 29,\n 65,\n 10,\n 106,\n 47,\n 1,\n 0,\n 33,\n 11,\n 35,\n 29,\n 65,\n 12,\n 106,\n 47,\n 1,\n 0,\n 33,\n 12,\n 35,\n 29,\n 65,\n 14,\n 106,\n 47,\n 1,\n 0,\n 33,\n 13,\n 35,\n 29,\n 65,\n 16,\n 106,\n 47,\n 1,\n 0,\n 33,\n 14,\n 35,\n 29,\n 65,\n 18,\n 106,\n 47,\n 1,\n 0,\n 33,\n 6,\n 35,\n 27,\n 47,\n 1,\n 0,\n 33,\n 17,\n 35,\n 27,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 33,\n 18,\n 35,\n 27,\n 65,\n 4,\n 106,\n 47,\n 1,\n 0,\n 33,\n 20,\n 35,\n 27,\n 65,\n 6,\n 106,\n 47,\n 1,\n 0,\n 33,\n 22,\n 35,\n 27,\n 65,\n 8,\n 106,\n 47,\n 1,\n 0,\n 33,\n 24,\n 35,\n 27,\n 65,\n 10,\n 106,\n 47,\n 1,\n 0,\n 33,\n 26,\n 35,\n 27,\n 65,\n 12,\n 106,\n 47,\n 1,\n 0,\n 33,\n 29,\n 35,\n 27,\n 65,\n 14,\n 106,\n 47,\n 1,\n 0,\n 33,\n 30,\n 35,\n 27,\n 65,\n 16,\n 106,\n 47,\n 1,\n 0,\n 33,\n 31,\n 35,\n 27,\n 65,\n 18,\n 106,\n 47,\n 1,\n 0,\n 33,\n 33,\n 3,\n 64,\n 32,\n 2,\n 65,\n 16,\n 79,\n 4,\n 64,\n 32,\n 3,\n 32,\n 0,\n 32,\n 1,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 15,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 3,\n 32,\n 17,\n 108,\n 32,\n 4,\n 32,\n 0,\n 32,\n 1,\n 65,\n 2,\n 106,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 3,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 16,\n 65,\n 3,\n 116,\n 32,\n 15,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 13,\n 118,\n 114,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 4,\n 32,\n 33,\n 65,\n 5,\n 108,\n 34,\n 15,\n 108,\n 106,\n 32,\n 8,\n 32,\n 0,\n 32,\n 1,\n 65,\n 4,\n 106,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 5,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 19,\n 65,\n 6,\n 116,\n 32,\n 16,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 10,\n 118,\n 114,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 8,\n 32,\n 31,\n 65,\n 5,\n 108,\n 34,\n 16,\n 108,\n 106,\n 32,\n 9,\n 32,\n 0,\n 32,\n 1,\n 65,\n 6,\n 106,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 7,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 21,\n 65,\n 9,\n 116,\n 32,\n 19,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 7,\n 118,\n 114,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 9,\n 32,\n 30,\n 65,\n 5,\n 108,\n 34,\n 19,\n 108,\n 106,\n 32,\n 10,\n 32,\n 0,\n 32,\n 1,\n 65,\n 8,\n 106,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 9,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 23,\n 65,\n 12,\n 116,\n 32,\n 21,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 4,\n 118,\n 114,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 10,\n 32,\n 29,\n 65,\n 5,\n 108,\n 34,\n 21,\n 108,\n 106,\n 34,\n 32,\n 65,\n 255,\n 63,\n 113,\n 32,\n 11,\n 32,\n 23,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 1,\n 118,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 11,\n 32,\n 26,\n 65,\n 5,\n 108,\n 34,\n 27,\n 108,\n 106,\n 32,\n 12,\n 32,\n 0,\n 32,\n 1,\n 65,\n 10,\n 106,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 11,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 28,\n 65,\n 2,\n 116,\n 32,\n 23,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 14,\n 118,\n 114,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 12,\n 32,\n 24,\n 65,\n 5,\n 108,\n 34,\n 23,\n 108,\n 106,\n 32,\n 13,\n 32,\n 0,\n 32,\n 1,\n 65,\n 12,\n 106,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 13,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 25,\n 65,\n 5,\n 116,\n 32,\n 28,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 11,\n 118,\n 114,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 13,\n 32,\n 22,\n 65,\n 5,\n 108,\n 34,\n 28,\n 108,\n 106,\n 32,\n 14,\n 32,\n 25,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 8,\n 118,\n 32,\n 0,\n 32,\n 1,\n 65,\n 14,\n 106,\n 106,\n 45,\n 0,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 15,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 34,\n 25,\n 65,\n 8,\n 116,\n 114,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 14,\n 32,\n 20,\n 65,\n 5,\n 108,\n 34,\n 7,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 21,\n 108,\n 32,\n 32,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 34,\n 32,\n 25,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 5,\n 118,\n 114,\n 65,\n 255,\n 255,\n 3,\n 113,\n 106,\n 34,\n 6,\n 32,\n 18,\n 65,\n 5,\n 108,\n 108,\n 106,\n 34,\n 32,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 18,\n 108,\n 106,\n 32,\n 4,\n 32,\n 17,\n 108,\n 106,\n 32,\n 8,\n 32,\n 15,\n 108,\n 106,\n 32,\n 9,\n 32,\n 16,\n 108,\n 106,\n 32,\n 10,\n 32,\n 19,\n 108,\n 106,\n 34,\n 25,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 27,\n 108,\n 106,\n 32,\n 13,\n 32,\n 23,\n 108,\n 106,\n 32,\n 14,\n 32,\n 28,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 19,\n 108,\n 32,\n 25,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 7,\n 108,\n 106,\n 34,\n 25,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 20,\n 108,\n 106,\n 32,\n 4,\n 32,\n 18,\n 108,\n 106,\n 32,\n 8,\n 32,\n 17,\n 108,\n 106,\n 32,\n 9,\n 32,\n 15,\n 108,\n 106,\n 32,\n 10,\n 32,\n 16,\n 108,\n 106,\n 34,\n 7,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 21,\n 108,\n 106,\n 32,\n 13,\n 32,\n 27,\n 108,\n 106,\n 32,\n 14,\n 32,\n 23,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 16,\n 108,\n 32,\n 7,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 28,\n 108,\n 106,\n 34,\n 28,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 22,\n 108,\n 106,\n 32,\n 4,\n 32,\n 20,\n 108,\n 106,\n 32,\n 8,\n 32,\n 18,\n 108,\n 106,\n 32,\n 9,\n 32,\n 17,\n 108,\n 106,\n 32,\n 10,\n 32,\n 15,\n 108,\n 106,\n 34,\n 7,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 19,\n 108,\n 106,\n 32,\n 13,\n 32,\n 21,\n 108,\n 106,\n 32,\n 14,\n 32,\n 27,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 15,\n 108,\n 32,\n 7,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 23,\n 108,\n 106,\n 34,\n 23,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 24,\n 108,\n 106,\n 32,\n 4,\n 32,\n 22,\n 108,\n 106,\n 32,\n 8,\n 32,\n 20,\n 108,\n 106,\n 32,\n 9,\n 32,\n 18,\n 108,\n 106,\n 32,\n 10,\n 32,\n 17,\n 108,\n 106,\n 34,\n 7,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 16,\n 108,\n 106,\n 32,\n 13,\n 32,\n 19,\n 108,\n 106,\n 32,\n 14,\n 32,\n 21,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 17,\n 108,\n 32,\n 7,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 27,\n 108,\n 106,\n 34,\n 27,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 26,\n 108,\n 106,\n 32,\n 4,\n 32,\n 24,\n 108,\n 106,\n 32,\n 8,\n 32,\n 22,\n 108,\n 106,\n 32,\n 9,\n 32,\n 20,\n 108,\n 106,\n 32,\n 10,\n 32,\n 18,\n 108,\n 106,\n 34,\n 7,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 15,\n 108,\n 106,\n 32,\n 13,\n 32,\n 16,\n 108,\n 106,\n 32,\n 14,\n 32,\n 19,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 18,\n 108,\n 32,\n 7,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 21,\n 108,\n 106,\n 34,\n 21,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 29,\n 108,\n 106,\n 32,\n 4,\n 32,\n 26,\n 108,\n 106,\n 32,\n 8,\n 32,\n 24,\n 108,\n 106,\n 32,\n 9,\n 32,\n 22,\n 108,\n 106,\n 32,\n 10,\n 32,\n 20,\n 108,\n 106,\n 34,\n 7,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 17,\n 108,\n 106,\n 32,\n 13,\n 32,\n 15,\n 108,\n 106,\n 32,\n 14,\n 32,\n 16,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 20,\n 108,\n 32,\n 7,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 19,\n 108,\n 106,\n 34,\n 19,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 30,\n 108,\n 106,\n 32,\n 4,\n 32,\n 29,\n 108,\n 106,\n 32,\n 8,\n 32,\n 26,\n 108,\n 106,\n 32,\n 9,\n 32,\n 24,\n 108,\n 106,\n 32,\n 10,\n 32,\n 22,\n 108,\n 106,\n 34,\n 7,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 18,\n 108,\n 106,\n 32,\n 13,\n 32,\n 17,\n 108,\n 106,\n 32,\n 14,\n 32,\n 15,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 22,\n 108,\n 32,\n 7,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 16,\n 108,\n 106,\n 34,\n 16,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 31,\n 108,\n 106,\n 32,\n 4,\n 32,\n 30,\n 108,\n 106,\n 32,\n 8,\n 32,\n 29,\n 108,\n 106,\n 32,\n 9,\n 32,\n 26,\n 108,\n 106,\n 32,\n 10,\n 32,\n 24,\n 108,\n 106,\n 34,\n 7,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 20,\n 108,\n 106,\n 32,\n 13,\n 32,\n 18,\n 108,\n 106,\n 32,\n 14,\n 32,\n 17,\n 108,\n 106,\n 33,\n 5,\n 32,\n 11,\n 32,\n 24,\n 108,\n 32,\n 7,\n 65,\n 13,\n 118,\n 32,\n 5,\n 32,\n 6,\n 32,\n 15,\n 108,\n 106,\n 34,\n 15,\n 65,\n 13,\n 118,\n 106,\n 32,\n 3,\n 32,\n 33,\n 108,\n 106,\n 32,\n 4,\n 32,\n 31,\n 108,\n 106,\n 32,\n 8,\n 32,\n 30,\n 108,\n 106,\n 32,\n 9,\n 32,\n 29,\n 108,\n 106,\n 32,\n 10,\n 32,\n 26,\n 108,\n 106,\n 34,\n 3,\n 65,\n 255,\n 63,\n 113,\n 106,\n 32,\n 12,\n 32,\n 22,\n 108,\n 106,\n 32,\n 13,\n 32,\n 20,\n 108,\n 106,\n 32,\n 14,\n 32,\n 18,\n 108,\n 106,\n 33,\n 4,\n 32,\n 3,\n 65,\n 13,\n 118,\n 32,\n 4,\n 32,\n 6,\n 32,\n 17,\n 108,\n 106,\n 34,\n 6,\n 65,\n 13,\n 118,\n 106,\n 34,\n 3,\n 32,\n 3,\n 65,\n 2,\n 116,\n 106,\n 32,\n 32,\n 65,\n 255,\n 63,\n 113,\n 106,\n 34,\n 3,\n 65,\n 13,\n 118,\n 33,\n 4,\n 32,\n 3,\n 65,\n 255,\n 63,\n 113,\n 33,\n 3,\n 32,\n 25,\n 65,\n 255,\n 63,\n 113,\n 32,\n 4,\n 106,\n 33,\n 4,\n 32,\n 28,\n 65,\n 255,\n 63,\n 113,\n 33,\n 8,\n 32,\n 23,\n 65,\n 255,\n 63,\n 113,\n 33,\n 9,\n 32,\n 27,\n 65,\n 255,\n 63,\n 113,\n 33,\n 10,\n 32,\n 21,\n 65,\n 255,\n 63,\n 113,\n 33,\n 11,\n 32,\n 19,\n 65,\n 255,\n 63,\n 113,\n 33,\n 12,\n 32,\n 16,\n 65,\n 255,\n 63,\n 113,\n 33,\n 13,\n 32,\n 15,\n 65,\n 255,\n 63,\n 113,\n 33,\n 14,\n 32,\n 6,\n 65,\n 255,\n 63,\n 113,\n 33,\n 6,\n 32,\n 1,\n 65,\n 16,\n 106,\n 33,\n 1,\n 32,\n 2,\n 65,\n 16,\n 107,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 35,\n 29,\n 32,\n 3,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 2,\n 106,\n 32,\n 4,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 4,\n 106,\n 32,\n 8,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 6,\n 106,\n 32,\n 9,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 8,\n 106,\n 32,\n 10,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 10,\n 106,\n 32,\n 11,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 12,\n 106,\n 32,\n 12,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 14,\n 106,\n 32,\n 13,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 16,\n 106,\n 32,\n 14,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 18,\n 106,\n 32,\n 6,\n 59,\n 1,\n 0,\n 11,\n 203,\n 1,\n 1,\n 3,\n 127,\n 35,\n 32,\n 4,\n 64,\n 65,\n 16,\n 35,\n 32,\n 107,\n 34,\n 3,\n 32,\n 1,\n 75,\n 4,\n 64,\n 32,\n 1,\n 33,\n 3,\n 11,\n 3,\n 64,\n 32,\n 2,\n 32,\n 3,\n 73,\n 4,\n 64,\n 35,\n 25,\n 32,\n 2,\n 35,\n 32,\n 106,\n 106,\n 32,\n 0,\n 32,\n 2,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 2,\n 65,\n 1,\n 106,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 32,\n 3,\n 107,\n 33,\n 1,\n 32,\n 3,\n 33,\n 4,\n 32,\n 3,\n 35,\n 32,\n 106,\n 36,\n 32,\n 35,\n 32,\n 65,\n 16,\n 73,\n 4,\n 64,\n 15,\n 11,\n 35,\n 25,\n 65,\n 0,\n 65,\n 16,\n 16,\n 18,\n 65,\n 0,\n 36,\n 32,\n 11,\n 2,\n 127,\n 32,\n 1,\n 65,\n 16,\n 79,\n 4,\n 64,\n 32,\n 0,\n 32,\n 4,\n 32,\n 1,\n 32,\n 1,\n 65,\n 15,\n 113,\n 107,\n 34,\n 3,\n 16,\n 18,\n 32,\n 3,\n 32,\n 4,\n 106,\n 33,\n 4,\n 32,\n 1,\n 32,\n 3,\n 107,\n 33,\n 1,\n 11,\n 32,\n 1,\n 11,\n 4,\n 64,\n 65,\n 0,\n 33,\n 2,\n 3,\n 64,\n 32,\n 2,\n 32,\n 1,\n 73,\n 4,\n 64,\n 35,\n 25,\n 32,\n 2,\n 35,\n 32,\n 106,\n 106,\n 32,\n 0,\n 32,\n 2,\n 32,\n 4,\n 106,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 2,\n 65,\n 1,\n 106,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 35,\n 32,\n 106,\n 36,\n 32,\n 11,\n 11,\n 8,\n 0,\n 35,\n 22,\n 32,\n 0,\n 16,\n 19,\n 11,\n 149,\n 9,\n 1,\n 3,\n 127,\n 35,\n 32,\n 4,\n 64,\n 35,\n 32,\n 34,\n 1,\n 35,\n 25,\n 106,\n 65,\n 1,\n 58,\n 0,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 3,\n 64,\n 32,\n 1,\n 65,\n 16,\n 73,\n 4,\n 64,\n 32,\n 1,\n 35,\n 25,\n 106,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 65,\n 1,\n 36,\n 33,\n 35,\n 25,\n 65,\n 0,\n 65,\n 16,\n 16,\n 18,\n 11,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 65,\n 13,\n 118,\n 33,\n 2,\n 35,\n 29,\n 65,\n 2,\n 106,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 65,\n 2,\n 33,\n 1,\n 3,\n 64,\n 32,\n 1,\n 65,\n 10,\n 73,\n 4,\n 64,\n 32,\n 1,\n 65,\n 1,\n 116,\n 34,\n 3,\n 35,\n 29,\n 106,\n 32,\n 2,\n 32,\n 3,\n 35,\n 29,\n 106,\n 47,\n 1,\n 0,\n 106,\n 59,\n 1,\n 0,\n 32,\n 3,\n 35,\n 29,\n 106,\n 47,\n 1,\n 0,\n 65,\n 13,\n 118,\n 33,\n 2,\n 32,\n 3,\n 35,\n 29,\n 106,\n 32,\n 3,\n 35,\n 29,\n 106,\n 47,\n 1,\n 0,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 35,\n 29,\n 35,\n 29,\n 47,\n 1,\n 0,\n 32,\n 2,\n 65,\n 5,\n 108,\n 106,\n 59,\n 1,\n 0,\n 35,\n 29,\n 47,\n 1,\n 0,\n 33,\n 1,\n 35,\n 29,\n 35,\n 29,\n 47,\n 1,\n 0,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 2,\n 106,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 32,\n 1,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 13,\n 118,\n 106,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 33,\n 1,\n 35,\n 29,\n 65,\n 2,\n 106,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 4,\n 106,\n 35,\n 29,\n 65,\n 4,\n 106,\n 47,\n 1,\n 0,\n 32,\n 1,\n 65,\n 255,\n 255,\n 3,\n 113,\n 65,\n 13,\n 118,\n 106,\n 59,\n 1,\n 0,\n 35,\n 36,\n 35,\n 29,\n 47,\n 1,\n 0,\n 65,\n 5,\n 106,\n 59,\n 1,\n 0,\n 35,\n 36,\n 47,\n 1,\n 0,\n 65,\n 13,\n 118,\n 33,\n 2,\n 35,\n 36,\n 35,\n 36,\n 47,\n 1,\n 0,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 65,\n 1,\n 33,\n 1,\n 3,\n 64,\n 32,\n 1,\n 65,\n 10,\n 73,\n 4,\n 64,\n 32,\n 1,\n 65,\n 1,\n 116,\n 34,\n 3,\n 35,\n 36,\n 106,\n 32,\n 2,\n 32,\n 3,\n 35,\n 29,\n 106,\n 47,\n 1,\n 0,\n 106,\n 59,\n 1,\n 0,\n 32,\n 3,\n 35,\n 36,\n 106,\n 47,\n 1,\n 0,\n 65,\n 13,\n 118,\n 33,\n 2,\n 32,\n 3,\n 35,\n 36,\n 106,\n 32,\n 3,\n 35,\n 36,\n 106,\n 47,\n 1,\n 0,\n 65,\n 255,\n 63,\n 113,\n 59,\n 1,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 35,\n 36,\n 65,\n 18,\n 106,\n 35,\n 36,\n 65,\n 18,\n 106,\n 47,\n 1,\n 0,\n 65,\n 128,\n 64,\n 106,\n 59,\n 1,\n 0,\n 32,\n 2,\n 65,\n 1,\n 115,\n 65,\n 1,\n 107,\n 33,\n 2,\n 65,\n 0,\n 33,\n 1,\n 3,\n 64,\n 32,\n 1,\n 65,\n 10,\n 73,\n 4,\n 64,\n 32,\n 1,\n 65,\n 1,\n 116,\n 34,\n 3,\n 35,\n 36,\n 106,\n 32,\n 2,\n 32,\n 3,\n 35,\n 36,\n 106,\n 47,\n 1,\n 0,\n 113,\n 59,\n 1,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 32,\n 2,\n 65,\n 127,\n 115,\n 33,\n 3,\n 65,\n 0,\n 33,\n 1,\n 3,\n 64,\n 32,\n 1,\n 65,\n 10,\n 73,\n 4,\n 64,\n 32,\n 1,\n 65,\n 1,\n 116,\n 34,\n 2,\n 35,\n 29,\n 106,\n 32,\n 2,\n 35,\n 36,\n 106,\n 47,\n 1,\n 0,\n 32,\n 3,\n 32,\n 2,\n 35,\n 29,\n 106,\n 47,\n 1,\n 0,\n 113,\n 114,\n 59,\n 1,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 35,\n 29,\n 35,\n 29,\n 47,\n 1,\n 0,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 65,\n 13,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 2,\n 106,\n 35,\n 29,\n 65,\n 4,\n 106,\n 47,\n 1,\n 0,\n 65,\n 10,\n 116,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 65,\n 3,\n 118,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 4,\n 106,\n 35,\n 29,\n 65,\n 6,\n 106,\n 47,\n 1,\n 0,\n 65,\n 7,\n 116,\n 35,\n 29,\n 65,\n 4,\n 106,\n 47,\n 1,\n 0,\n 65,\n 6,\n 118,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 6,\n 106,\n 35,\n 29,\n 65,\n 8,\n 106,\n 47,\n 1,\n 0,\n 65,\n 4,\n 116,\n 35,\n 29,\n 65,\n 6,\n 106,\n 47,\n 1,\n 0,\n 65,\n 9,\n 118,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 8,\n 106,\n 35,\n 29,\n 65,\n 10,\n 106,\n 47,\n 1,\n 0,\n 65,\n 1,\n 116,\n 35,\n 29,\n 65,\n 8,\n 106,\n 47,\n 1,\n 0,\n 65,\n 12,\n 118,\n 114,\n 35,\n 29,\n 65,\n 12,\n 106,\n 47,\n 1,\n 0,\n 65,\n 14,\n 116,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 10,\n 106,\n 35,\n 29,\n 65,\n 14,\n 106,\n 47,\n 1,\n 0,\n 65,\n 11,\n 116,\n 35,\n 29,\n 65,\n 12,\n 106,\n 47,\n 1,\n 0,\n 65,\n 2,\n 118,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 12,\n 106,\n 35,\n 29,\n 65,\n 16,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 116,\n 35,\n 29,\n 65,\n 14,\n 106,\n 47,\n 1,\n 0,\n 65,\n 5,\n 118,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 65,\n 14,\n 106,\n 35,\n 29,\n 65,\n 18,\n 106,\n 47,\n 1,\n 0,\n 65,\n 5,\n 116,\n 35,\n 29,\n 65,\n 16,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 114,\n 59,\n 1,\n 0,\n 35,\n 29,\n 35,\n 29,\n 47,\n 1,\n 0,\n 35,\n 31,\n 47,\n 1,\n 0,\n 106,\n 34,\n 2,\n 59,\n 1,\n 0,\n 65,\n 1,\n 33,\n 1,\n 3,\n 64,\n 32,\n 1,\n 65,\n 8,\n 73,\n 4,\n 64,\n 32,\n 1,\n 65,\n 1,\n 116,\n 34,\n 3,\n 35,\n 29,\n 106,\n 47,\n 1,\n 0,\n 32,\n 3,\n 35,\n 31,\n 106,\n 47,\n 1,\n 0,\n 106,\n 32,\n 2,\n 65,\n 16,\n 118,\n 106,\n 33,\n 2,\n 35,\n 29,\n 32,\n 3,\n 106,\n 32,\n 2,\n 59,\n 1,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 32,\n 0,\n 35,\n 29,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 1,\n 106,\n 35,\n 29,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 2,\n 106,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 3,\n 106,\n 35,\n 29,\n 65,\n 2,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 4,\n 106,\n 35,\n 29,\n 65,\n 4,\n 106,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 5,\n 106,\n 35,\n 29,\n 65,\n 4,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 6,\n 106,\n 35,\n 29,\n 65,\n 6,\n 106,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 7,\n 106,\n 35,\n 29,\n 65,\n 6,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 8,\n 106,\n 35,\n 29,\n 65,\n 8,\n 106,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 9,\n 106,\n 35,\n 29,\n 65,\n 8,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 10,\n 106,\n 35,\n 29,\n 65,\n 10,\n 106,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 11,\n 106,\n 35,\n 29,\n 65,\n 10,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 12,\n 106,\n 35,\n 29,\n 65,\n 12,\n 106,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 13,\n 106,\n 35,\n 29,\n 65,\n 12,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 14,\n 106,\n 35,\n 29,\n 65,\n 14,\n 106,\n 47,\n 1,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 15,\n 106,\n 35,\n 29,\n 65,\n 14,\n 106,\n 47,\n 1,\n 0,\n 65,\n 8,\n 118,\n 58,\n 0,\n 0,\n 65,\n 1,\n 36,\n 34,\n 11,\n 11,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 1,\n 116,\n 16,\n 3,\n 11,\n 38,\n 0,\n 35,\n 25,\n 65,\n 16,\n 16,\n 13,\n 35,\n 27,\n 65,\n 10,\n 16,\n 22,\n 35,\n 29,\n 65,\n 10,\n 16,\n 22,\n 35,\n 31,\n 65,\n 8,\n 16,\n 22,\n 65,\n 0,\n 36,\n 32,\n 65,\n 0,\n 36,\n 33,\n 65,\n 0,\n 36,\n 34,\n 11,\n 33,\n 1,\n 1,\n 127,\n 35,\n 23,\n 33,\n 0,\n 35,\n 34,\n 4,\n 64,\n 65,\n 144,\n 2,\n 65,\n 208,\n 2,\n 65,\n 226,\n 3,\n 65,\n 4,\n 16,\n 0,\n 0,\n 11,\n 32,\n 0,\n 16,\n 21,\n 16,\n 23,\n 11,\n 39,\n 1,\n 1,\n 127,\n 3,\n 64,\n 32,\n 0,\n 65,\n 32,\n 73,\n 4,\n 64,\n 32,\n 0,\n 35,\n 7,\n 106,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 1,\n 106,\n 33,\n 0,\n 12,\n 1,\n 11,\n 11,\n 65,\n 32,\n 16,\n 15,\n 26,\n 11,\n 152,\n 2,\n 1,\n 1,\n 127,\n 3,\n 64,\n 32,\n 4,\n 65,\n 32,\n 72,\n 4,\n 64,\n 32,\n 4,\n 35,\n 9,\n 106,\n 32,\n 0,\n 32,\n 4,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 4,\n 65,\n 1,\n 106,\n 33,\n 4,\n 12,\n 1,\n 11,\n 11,\n 65,\n 0,\n 33,\n 4,\n 3,\n 64,\n 32,\n 4,\n 65,\n 4,\n 72,\n 4,\n 64,\n 32,\n 4,\n 35,\n 11,\n 106,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 4,\n 65,\n 1,\n 106,\n 33,\n 4,\n 12,\n 1,\n 11,\n 11,\n 65,\n 4,\n 33,\n 4,\n 3,\n 64,\n 32,\n 4,\n 65,\n 16,\n 72,\n 4,\n 64,\n 32,\n 4,\n 35,\n 11,\n 106,\n 32,\n 1,\n 32,\n 4,\n 65,\n 4,\n 107,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 4,\n 65,\n 1,\n 106,\n 33,\n 4,\n 12,\n 1,\n 11,\n 11,\n 16,\n 25,\n 65,\n 0,\n 33,\n 4,\n 3,\n 64,\n 32,\n 4,\n 65,\n 32,\n 72,\n 4,\n 64,\n 32,\n 4,\n 35,\n 21,\n 106,\n 32,\n 4,\n 35,\n 13,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 4,\n 65,\n 1,\n 106,\n 33,\n 4,\n 12,\n 1,\n 11,\n 11,\n 35,\n 21,\n 16,\n 16,\n 32,\n 3,\n 65,\n 0,\n 75,\n 4,\n 64,\n 65,\n 0,\n 33,\n 4,\n 3,\n 64,\n 32,\n 4,\n 32,\n 3,\n 73,\n 4,\n 64,\n 32,\n 4,\n 35,\n 22,\n 106,\n 32,\n 2,\n 32,\n 4,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 4,\n 65,\n 1,\n 106,\n 33,\n 4,\n 12,\n 1,\n 11,\n 11,\n 32,\n 3,\n 16,\n 20,\n 32,\n 3,\n 65,\n 15,\n 113,\n 65,\n 0,\n 75,\n 4,\n 64,\n 65,\n 16,\n 32,\n 3,\n 65,\n 15,\n 113,\n 107,\n 34,\n 1,\n 65,\n 0,\n 74,\n 4,\n 64,\n 65,\n 0,\n 33,\n 0,\n 3,\n 64,\n 32,\n 0,\n 32,\n 1,\n 72,\n 4,\n 64,\n 32,\n 0,\n 35,\n 22,\n 106,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 0,\n 65,\n 1,\n 106,\n 33,\n 0,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 16,\n 20,\n 11,\n 11,\n 11,\n 11,\n 65,\n 1,\n 1,\n 127,\n 3,\n 64,\n 32,\n 2,\n 32,\n 1,\n 73,\n 4,\n 64,\n 35,\n 22,\n 32,\n 2,\n 106,\n 32,\n 0,\n 32,\n 2,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 35,\n 7,\n 32,\n 2,\n 106,\n 32,\n 0,\n 32,\n 2,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 2,\n 65,\n 1,\n 106,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 16,\n 20,\n 32,\n 1,\n 16,\n 15,\n 26,\n 11,\n 27,\n 0,\n 32,\n 0,\n 32,\n 1,\n 65,\n 0,\n 16,\n 10,\n 32,\n 0,\n 173,\n 66,\n 128,\n 128,\n 128,\n 128,\n 16,\n 127,\n 167,\n 32,\n 1,\n 65,\n 4,\n 16,\n 10,\n 11,\n 87,\n 1,\n 2,\n 127,\n 32,\n 0,\n 65,\n 15,\n 113,\n 65,\n 0,\n 75,\n 4,\n 64,\n 65,\n 16,\n 32,\n 0,\n 65,\n 15,\n 113,\n 107,\n 34,\n 3,\n 65,\n 0,\n 74,\n 4,\n 64,\n 3,\n 64,\n 32,\n 2,\n 32,\n 3,\n 72,\n 4,\n 64,\n 32,\n 2,\n 35,\n 22,\n 106,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 2,\n 65,\n 1,\n 106,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 32,\n 3,\n 16,\n 20,\n 11,\n 11,\n 32,\n 1,\n 35,\n 22,\n 16,\n 28,\n 65,\n 8,\n 16,\n 20,\n 32,\n 0,\n 35,\n 22,\n 16,\n 28,\n 65,\n 8,\n 16,\n 20,\n 16,\n 24,\n 11,\n 34,\n 0,\n 32,\n 0,\n 4,\n 64,\n 35,\n 38,\n 35,\n 40,\n 35,\n 42,\n 32,\n 4,\n 16,\n 26,\n 11,\n 35,\n 44,\n 32,\n 2,\n 16,\n 27,\n 32,\n 1,\n 4,\n 64,\n 32,\n 3,\n 32,\n 4,\n 16,\n 29,\n 11,\n 11,\n 89,\n 1,\n 1,\n 127,\n 3,\n 64,\n 32,\n 2,\n 32,\n 1,\n 73,\n 4,\n 64,\n 35,\n 7,\n 32,\n 2,\n 106,\n 32,\n 0,\n 32,\n 2,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 2,\n 65,\n 1,\n 106,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 16,\n 15,\n 26,\n 65,\n 0,\n 33,\n 2,\n 3,\n 64,\n 32,\n 2,\n 32,\n 1,\n 73,\n 4,\n 64,\n 35,\n 22,\n 32,\n 2,\n 106,\n 32,\n 2,\n 35,\n 13,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 2,\n 65,\n 1,\n 106,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 16,\n 20,\n 11,\n 34,\n 0,\n 32,\n 0,\n 4,\n 64,\n 35,\n 38,\n 35,\n 40,\n 35,\n 42,\n 32,\n 4,\n 16,\n 26,\n 11,\n 35,\n 44,\n 32,\n 2,\n 16,\n 31,\n 32,\n 1,\n 4,\n 64,\n 32,\n 3,\n 32,\n 4,\n 16,\n 29,\n 11,\n 11,\n 8,\n 0,\n 16,\n 5,\n 16,\n 8,\n 16,\n 9,\n 11,\n 11,\n 234,\n 2,\n 6,\n 0,\n 65,\n 16,\n 11,\n 43,\n 28,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 28,\n 0,\n 0,\n 0,\n 73,\n 0,\n 110,\n 0,\n 118,\n 0,\n 97,\n 0,\n 108,\n 0,\n 105,\n 0,\n 100,\n 0,\n 32,\n 0,\n 108,\n 0,\n 101,\n 0,\n 110,\n 0,\n 103,\n 0,\n 116,\n 0,\n 104,\n 0,\n 65,\n 192,\n 0,\n 11,\n 53,\n 38,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 38,\n 0,\n 0,\n 0,\n 126,\n 0,\n 108,\n 0,\n 105,\n 0,\n 98,\n 0,\n 47,\n 0,\n 97,\n 0,\n 114,\n 0,\n 114,\n 0,\n 97,\n 0,\n 121,\n 0,\n 98,\n 0,\n 117,\n 0,\n 102,\n 0,\n 102,\n 0,\n 101,\n 0,\n 114,\n 0,\n 46,\n 0,\n 116,\n 0,\n 115,\n 0,\n 65,\n 128,\n 1,\n 11,\n 63,\n 48,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 48,\n 0,\n 0,\n 0,\n 67,\n 0,\n 104,\n 0,\n 97,\n 0,\n 67,\n 0,\n 104,\n 0,\n 97,\n 0,\n 58,\n 0,\n 32,\n 0,\n 99,\n 0,\n 111,\n 0,\n 117,\n 0,\n 110,\n 0,\n 116,\n 0,\n 101,\n 0,\n 114,\n 0,\n 32,\n 0,\n 111,\n 0,\n 118,\n 0,\n 101,\n 0,\n 114,\n 0,\n 102,\n 0,\n 108,\n 0,\n 111,\n 0,\n 119,\n 0,\n 65,\n 192,\n 1,\n 11,\n 55,\n 40,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 40,\n 0,\n 0,\n 0,\n 97,\n 0,\n 115,\n 0,\n 115,\n 0,\n 101,\n 0,\n 109,\n 0,\n 98,\n 0,\n 108,\n 0,\n 121,\n 0,\n 47,\n 0,\n 99,\n 0,\n 104,\n 0,\n 97,\n 0,\n 99,\n 0,\n 104,\n 0,\n 97,\n 0,\n 50,\n 0,\n 48,\n 0,\n 46,\n 0,\n 116,\n 0,\n 115,\n 0,\n 65,\n 128,\n 2,\n 11,\n 57,\n 42,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 42,\n 0,\n 0,\n 0,\n 80,\n 0,\n 111,\n 0,\n 108,\n 0,\n 121,\n 0,\n 49,\n 0,\n 51,\n 0,\n 48,\n 0,\n 53,\n 0,\n 32,\n 0,\n 119,\n 0,\n 97,\n 0,\n 115,\n 0,\n 32,\n 0,\n 102,\n 0,\n 105,\n 0,\n 110,\n 0,\n 105,\n 0,\n 115,\n 0,\n 104,\n 0,\n 101,\n 0,\n 100,\n 0,\n 65,\n 192,\n 2,\n 11,\n 55,\n 40,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 40,\n 0,\n 0,\n 0,\n 97,\n 0,\n 115,\n 0,\n 115,\n 0,\n 101,\n 0,\n 109,\n 0,\n 98,\n 0,\n 108,\n 0,\n 121,\n 0,\n 47,\n 0,\n 112,\n 0,\n 111,\n 0,\n 108,\n 0,\n 121,\n 0,\n 49,\n 0,\n 51,\n 0,\n 48,\n 0,\n 53,\n 0,\n 46,\n 0,\n 116,\n 0,\n 115\n]); //# sourceMappingURL=wasmCode.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1jaGFjaGEyMHBvbHkxMzA1L2xpYi9zcmMvd2FzbUNvZGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixvREFBb0Q7QUFDcEQsbUNBQW1DO0FBQ25DQSw4Q0FBNkM7SUFBRUcsT0FBTztBQUFLLENBQUMsRUFBQztBQUM3REQsZ0JBQWdCLEdBQUcsS0FBSztBQUN4Qiw2Q0FBNkM7QUFDN0NBLGdCQUFnQixHQUFHRyxXQUFXQyxJQUFJLENBQUM7SUFBQztJQUFHO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBRztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFHO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7Q0FBSSxHQUNsMDJCLG9DQUFvQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvYXMtY2hhY2hhMjBwb2x5MTMwNS9saWIvc3JjL3dhc21Db2RlLmpzP2E4MzIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBUaGlzIGZpbGUgd2FzIGF1dG9nZW5lcmF0ZWQgYnkgc2NyaXB0cy9jb2RlZ2VuLnRzXG4vLyBETyBOT1QgbW9kaWZ5IHRoaXMgZmlsZSBieSBoYW5kIVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy53YXNtQ29kZSA9IHZvaWQgMDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuZXhwb3J0cy53YXNtQ29kZSA9IFVpbnQ4QXJyYXkuZnJvbShbMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCA1OCwgMTAsIDk2LCAwLCAwLCA5NiwgMiwgMTI3LCAxMjcsIDAsIDk2LCAxLCAxMjcsIDAsIDk2LCAzLCAxMjcsIDEyNywgMTI3LCAwLCA5NiwgMSwgMTI3LCAxLCAxMjcsIDk2LCA0LCAxMjcsIDEyNywgMTI3LCAxMjcsIDAsIDk2LCA1LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMCwgOTYsIDAsIDEsIDEyNywgOTYsIDIsIDEyNywgMTI3LCAxLCAxMjcsIDk2LCA1LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMSwgMTI3LCAyLCAxMywgMSwgMywgMTAxLCAxMTAsIDExOCwgNSwgOTcsIDk4LCAxMTEsIDExNCwgMTE2LCAwLCA1LCAzLCAzNCwgMzMsIDIsIDgsIDEsIDQsIDAsIDQsIDcsIDAsIDAsIDMsIDMsIDIsIDEsIDksIDQsIDIsIDAsIDMsIDEsIDIsIDIsIDEsIDAsIDAsIDAsIDUsIDEsIDEsIDEsIDYsIDEsIDYsIDAsIDUsIDMsIDEsIDAsIDEsIDYsIDIzOCwgMSwgNDcsIDEyNywgMCwgNjUsIDMyLCAxMSwgMTI3LCAwLCA2NSwgMTYsIDExLCAxMjcsIDAsIDY1LCAxMjgsIDEyOCwgNCwgMTEsIDEyNywgMCwgNjUsIDE2LCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDcsIDIyNiwgMiwgMjMsIDYsIDEwOSwgMTAxLCAxMDksIDExMSwgMTE0LCAxMjEsIDIsIDAsIDIxLCA2NywgNzIsIDY1LCA2NywgNzIsIDY1LCA1MCwgNDgsIDk1LCA3MywgNzgsIDgwLCA4NSwgODQsIDk1LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCAzLCAyLCAyMywgNjcsIDcyLCA2NSwgNjcsIDcyLCA2NSwgNTAsIDQ4LCA5NSwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgODIsIDk1LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCAzLCAzLCAxMywgOTksIDEwNCwgOTcsIDk5LCAxMDQsIDk3LCA1MCwgNDgsIDczLCAxMTAsIDExMiwgMTE3LCAxMTYsIDMsIDYsIDExLCA5OSwgMTA0LCA5NywgOTksIDEwNCwgOTcsIDUwLCA0OCwgNzUsIDEwMSwgMTIxLCAzLCA4LCAxNSwgOTksIDEwNCwgOTcsIDk5LCAxMDQsIDk3LCA1MCwgNDgsIDY3LCAxMTEsIDExNywgMTEwLCAxMTYsIDEwMSwgMTE0LCAzLCAxMCwgMTQsIDk5LCAxMDQsIDk3LCA5OSwgMTA0LCA5NywgNTAsIDQ4LCA3OSwgMTE3LCAxMTYsIDExMiwgMTE3LCAxMTYsIDMsIDEyLCAyMywgOTksIDEwNCwgOTcsIDk5LCAxMDQsIDk3LCA1MCwgNDgsIDgzLCAxMTYsIDExNCwgMTAxLCA5NywgMTA5LCA4OCwgNzksIDgyLCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMCwgMTUsIDEwLCA3NSwgNjksIDg5LCA5NSwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMywgMCwgMTAsIDg0LCA2NSwgNzEsIDk1LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCAzLCAxLCAxMiwgMTEyLCAxMTEsIDEwOCwgMTIxLCA0OSwgNTEsIDQ4LCA1MywgNzMsIDExMCwgMTA1LCAxMTYsIDAsIDE3LCAxNCwgMTEyLCAxMTEsIDEwOCwgMTIxLCA0OSwgNTEsIDQ4LCA1MywgODUsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDAsIDIwLCAxNCwgMTEyLCAxMTEsIDEwOCwgMTIxLCA0OSwgNTEsIDQ4LCA1MywgNjgsIDEwNSwgMTAzLCAxMDEsIDExNSwgMTE2LCAwLCAyNCwgMTMsIDExMiwgMTExLCAxMDgsIDEyMSwgNDksIDUxLCA0OCwgNTMsIDczLCAxMTAsIDExMiwgMTE3LCAxMTYsIDMsIDE5LCAxMSwgMTEyLCAxMTEsIDEwOCwgMTIxLCA0OSwgNTEsIDQ4LCA1MywgNzUsIDEwMSwgMTIxLCAzLCAxOCwgMTQsIDExMiwgMTExLCAxMDgsIDEyMSwgNDksIDUxLCA0OCwgNTMsIDc5LCAxMTcsIDExNiwgMTEyLCAxMTcsIDExNiwgMywgMjAsIDEwLCAxMTEsIDExMiwgMTAxLCAxMTAsIDg1LCAxMTIsIDEwMCwgOTcsIDExNiwgMTAxLCAwLCAzMCwgMTAsIDExNSwgMTAxLCA5NywgMTA4LCA4NSwgMTEyLCAxMDAsIDk3LCAxMTYsIDEwMSwgMCwgMzIsIDUsIDk5LCAxMTIsIDc1LCAxMDEsIDEyMSwgMywgMzcsIDcsIDk5LCAxMTIsIDc4LCAxMTEsIDExMCwgOTksIDEwMSwgMywgMzksIDcsIDk5LCAxMTIsIDczLCAxMTAsIDExMiwgMTE3LCAxMTYsIDMsIDQzLCAxNiwgOTksIDExMiwgNjUsIDExNSwgMTE1LCAxMTEsIDk5LCAxMDUsIDk3LCAxMTYsIDEwMSwgMTAwLCA2OCwgOTcsIDExNiwgOTcsIDMsIDQxLCA1LCAxMDAsIDEwMSwgOTgsIDExNywgMTAzLCAzLCA0NiwgOCwgMSwgMzMsIDEwLCAxOTUsIDQ3LCAzMywgNzAsIDEsIDIsIDEyNywgMzIsIDAsIDYzLCAwLCAzNCwgMiwgNjUsIDE2LCAxMTYsIDM0LCAxLCA3NSwgNCwgNjQsIDMyLCAyLCAzMiwgMCwgMzIsIDEsIDEwNywgNjUsIDI1NSwgMjU1LCAzLCAxMDYsIDY1LCAxMjgsIDEyOCwgMTI0LCAxMTMsIDY1LCAxNiwgMTE4LCAzNCwgMSwgMzIsIDIsIDMyLCAxLCA3NCwgMjcsIDY0LCAwLCA2NSwgMCwgNzIsIDQsIDY0LCAzMiwgMSwgNjQsIDAsIDY1LCAwLCA3MiwgNCwgNjQsIDAsIDExLCAxMSwgMTEsIDMyLCAwLCAzNiwgNSwgMTEsIDgyLCAxLCAzLCAxMjcsIDMyLCAwLCA2NSwgMjQwLCAyNTUsIDI1NSwgMjU1LCAzLCA3NSwgNCwgNjQsIDAsIDExLCAzNSwgNSwgNjUsIDE2LCAxMDYsIDM0LCAzLCAzMiwgMCwgNjUsIDE1LCAxMDYsIDY1LCAxMTIsIDExMywgMzQsIDIsIDY1LCAxNiwgMzIsIDIsIDY1LCAxNiwgNzUsIDI3LCAzNCwgNCwgMTA2LCAxNiwgMSwgMzIsIDMsIDY1LCAxNiwgMTA3LCAzNCwgMiwgMzIsIDQsIDU0LCAyLCAwLCAzMiwgMiwgNjUsIDEsIDU0LCAyLCA0LCAzMiwgMiwgMzIsIDEsIDU0LCAyLCA4LCAzMiwgMiwgMzIsIDAsIDU0LCAyLCAxMiwgMzIsIDMsIDExLCAzNywgMSwgMSwgMTI3LCAzLCA2NCwgMzIsIDEsIDQsIDY0LCAzMiwgMCwgMzQsIDIsIDY1LCAxLCAxMDYsIDMzLCAwLCAzMiwgMiwgNjUsIDAsIDU4LCAwLCAwLCAzMiwgMSwgNjUsIDEsIDEwNywgMzMsIDEsIDEyLCAxLCAxMSwgMTEsIDExLCA0MiwgMSwgMSwgMTI3LCAzMiwgMCwgNjUsIDI0MCwgMjU1LCAyNTUsIDI1NSwgMywgNzUsIDQsIDY0LCA2NSwgMzIsIDY1LCAyMDgsIDAsIDY1LCA1NCwgNjUsIDQyLCAxNiwgMCwgMCwgMTEsIDMyLCAwLCA2NSwgMCwgMTYsIDIsIDM0LCAxLCAzMiwgMCwgMTYsIDMsIDMyLCAxLCAxMSwgNjcsIDAsIDY1LCAxMjgsIDMsIDM2LCA0LCA2NSwgMTI4LCAzLCAzNiwgNSwgNjUsIDEyOCwgMTI4LCA0LCAxNiwgNCwgMzYsIDYsIDM1LCA2LCAzNiwgNywgNjUsIDMyLCAxNiwgNCwgMzYsIDgsIDM1LCA4LCAzNiwgOSwgNjUsIDE2LCAxNiwgNCwgMzYsIDEwLCAzNSwgMTAsIDM2LCAxMSwgNjUsIDEyOCwgMTI4LCA0LCAxNiwgNCwgMzYsIDEyLCAzNSwgMTIsIDM2LCAxMywgNjUsIDE5MiwgMCwgMTYsIDQsIDM2LCAxNCwgMzUsIDE0LCAzNiwgMTUsIDExLCA4MywgMSwgMSwgMTI3LCA2NSwgMTI4LCAyLCA2NSwgMCwgMTYsIDIsIDM0LCAxLCA2NSwgMTI4LCAyLCAxNiwgMywgMzIsIDAsIDY5LCA0LCA2NCwgNjUsIDEyLCA2NSwgMiwgMTYsIDIsIDMzLCAwLCAxMSwgMzIsIDAsIDY1LCAwLCA1NCwgMiwgMCwgMzIsIDAsIDY1LCAwLCA1NCwgMiwgNCwgMzIsIDAsIDY1LCAwLCA1NCwgMiwgOCwgMzIsIDAsIDQwLCAyLCAwLCAyNiwgMzIsIDAsIDMyLCAxLCA1NCwgMiwgMCwgMzIsIDAsIDMyLCAxLCA1NCwgMiwgNCwgMzIsIDAsIDY1LCAxMjgsIDIsIDU0LCAyLCA4LCAzMiwgMCwgMTEsIDEwLCAwLCA2NSwgMTIsIDY1LCAzLCAxNiwgMiwgMTYsIDYsIDExLCA5NSwgMCwgMTYsIDcsIDM2LCAxNiwgMzUsIDE2LCA0MCwgMiwgMCwgMzYsIDE3LCA2NSwgMzIsIDE2LCA0LCAzNiwgMTgsIDY1LCAxMjgsIDEyOCwgNCwgMTYsIDQsIDM2LCAxOSwgNjUsIDE2LCAxNiwgNCwgMzYsIDIwLCAzNSwgMTgsIDM2LCAyMSwgMzUsIDE5LCAzNiwgMjIsIDM1LCAyMCwgMzYsIDIzLCA2NSwgMTYsIDE2LCA0LCAzNiwgMjQsIDM1LCAyNCwgMzYsIDI1LCA2NSwgMjAsIDE2LCA0LCAzNiwgMjYsIDM1LCAyNiwgMzYsIDI3LCA2NSwgMjAsIDE2LCA0LCAzNiwgMjgsIDM1LCAyOCwgMzYsIDI5LCA2NSwgMTYsIDE2LCA0LCAzNiwgMzAsIDM1LCAzMCwgMzYsIDMxLCA2NSwgMjAsIDE2LCA0LCAzNiwgMzUsIDM1LCAzNSwgMzYsIDM2LCAxMSwgNTUsIDAsIDY1LCAzMiwgMTYsIDQsIDM2LCAzNywgMzUsIDM3LCAzNiwgMzgsIDY1LCAxMiwgMTYsIDQsIDM2LCAzOSwgMzUsIDM5LCAzNiwgNDAsIDY1LCAzMiwgMTYsIDQsIDM2LCA0MSwgMzUsIDQxLCAzNiwgNDIsIDY1LCAxMjgsIDEyOCwgNCwgMTYsIDQsIDM2LCA0MywgMzUsIDQzLCAzNiwgNDQsIDE2LCA3LCAzNiwgNDUsIDM1LCA0NSwgNDAsIDIsIDAsIDM2LCA0NiwgMTEsIDIyLCAwLCAzMiwgMSwgMzIsIDIsIDY1LCAyNTUsIDEsIDExMywgNjUsIDQsIDExMCwgNjUsIDIsIDExNiwgMTA2LCAzMiwgMCwgNTQsIDIsIDAsIDExLCAxODgsIDYsIDEsIDMxLCAxMjcsIDY1LCAyMjksIDI0MCwgMTkzLCAxMzksIDYsIDMzLCA1LCA2NSwgMjM4LCAyMDAsIDEyOSwgMTUzLCAzLCAzMywgNiwgNjUsIDE3OCwgMjE4LCAxMzYsIDIwMywgNywgMzMsIDE0LCA2NSwgMjQ0LCAyMDIsIDEyOSwgMjE3LCA2LCAzMywgNywgMzIsIDIsIDQwLCAyLCAwLCAzNCwgMTksIDMzLCA0LCAzMiwgMiwgNjUsIDQsIDEwNiwgNDAsIDIsIDAsIDM0LCAyMCwgMzMsIDgsIDMyLCAyLCA2NSwgOCwgMTA2LCA0MCwgMiwgMCwgMzQsIDIxLCAzMywgMywgMzIsIDIsIDY1LCAxMiwgMTA2LCA0MCwgMiwgMCwgMzQsIDIyLCAzMywgMTMsIDMyLCAyLCA2NSwgMTYsIDEwNiwgNDAsIDIsIDAsIDM0LCAyMywgMzMsIDE1LCAzMiwgMiwgNjUsIDIwLCAxMDYsIDQwLCAyLCAwLCAzNCwgMjQsIDMzLCA5LCAzMiwgMiwgNjUsIDI0LCAxMDYsIDQwLCAyLCAwLCAzNCwgMjUsIDMzLCAxMCwgMzIsIDIsIDY1LCAyOCwgMTA2LCA0MCwgMiwgMCwgMzQsIDI2LCAzMywgMiwgMzIsIDEsIDQwLCAyLCAwLCAzNCwgMjcsIDMzLCAxMSwgMzIsIDEsIDY1LCA0LCAxMDYsIDQwLCAyLCAwLCAzNCwgMjgsIDMzLCAxNiwgMzIsIDEsIDY1LCA4LCAxMDYsIDQwLCAyLCAwLCAzNCwgMjksIDMzLCAxMiwgMzIsIDEsIDY1LCAxMiwgMTA2LCA0MCwgMiwgMCwgMzQsIDMwLCAzMywgMSwgMywgNjQsIDMyLCAxOCwgNjUsIDIwLCA3MiwgNCwgNjQsIDMyLCAzLCAzMiwgMTAsIDMyLCAxMiwgMzIsIDMsIDMyLCAxNCwgMTA2LCAzNCwgMywgMTE1LCA2NSwgMTYsIDExOSwgMzQsIDE0LCAxMDYsIDM0LCAxMCwgMTE1LCA2NSwgMTIsIDExOSwgMzQsIDEyLCAzMiwgMTAsIDMyLCAxNCwgMzIsIDMsIDMyLCAxMiwgMTA2LCAzNCwgMywgMTE1LCA2NSwgOCwgMTE5LCAzNCwgMTQsIDEwNiwgMzQsIDEwLCAxMTUsIDMzLCAxMiwgMzIsIDEzLCAzMiwgMiwgMzIsIDEsIDMyLCA3LCAzMiwgMTMsIDEwNiwgMzQsIDEsIDExNSwgNjUsIDE2LCAxMTksIDM0LCAyLCAxMDYsIDM0LCAxMywgMTE1LCA2NSwgMTIsIDExOSwgMzQsIDcsIDMyLCAxMywgMzIsIDIsIDMyLCAxLCAzMiwgNywgMTA2LCAzNCwgMTMsIDExNSwgNjUsIDgsIDExOSwgMzQsIDEsIDEwNiwgMzQsIDIsIDExNSwgMzMsIDcsIDMyLCA0LCAzMiwgMTUsIDMyLCAxMSwgMzIsIDQsIDMyLCA1LCAxMDYsIDM0LCA0LCAxMTUsIDY1LCAxNiwgMTE5LCAzNCwgNSwgMTA2LCAzNCwgMTUsIDExNSwgNjUsIDEyLCAxMTksIDM0LCAxMSwgMzIsIDE1LCAzMiwgNSwgMzIsIDQsIDMyLCAxMSwgMTA2LCAzNCwgNCwgMTE1LCA2NSwgOCwgMTE5LCAzNCwgNSwgMTA2LCAzNCwgMTUsIDExNSwgMzMsIDExLCAzMiwgMTAsIDMyLCAxLCAzMiwgOCwgMzIsIDksIDMyLCAxNiwgMzIsIDYsIDMyLCA4LCAxMDYsIDM0LCAxLCAxMTUsIDY1LCAxNiwgMTE5LCAzNCwgOCwgMTA2LCAzNCwgNiwgMTE1LCA2NSwgMTIsIDExOSwgMzQsIDksIDMyLCA2LCAzMiwgOCwgMzIsIDEsIDMyLCA5LCAxMDYsIDM0LCAxLCAxMTUsIDY1LCA4LCAxMTksIDM0LCA2LCAxMDYsIDM0LCA5LCAxMTUsIDY1LCA3LCAxMTksIDM0LCAxMCwgMzIsIDQsIDEwNiwgMzQsIDE3LCAxMTUsIDY1LCAxNiwgMTE5LCAzNCwgMzEsIDEwNiwgMzMsIDgsIDMyLCAyLCAzMiwgNSwgMzIsIDEyLCA2NSwgNywgMTE5LCAzNCwgNSwgMzIsIDEsIDEwNiwgMzQsIDMyLCAxMTUsIDY1LCAxNiwgMTE5LCAzNCwgMzMsIDEwNiwgMzMsIDEsIDMyLCA5LCAzMiwgMTQsIDMyLCAxMywgMzIsIDExLCA2NSwgNywgMTE5LCAzNCwgOSwgMTA2LCAzNCwgMTEsIDExNSwgNjUsIDE2LCAxMTksIDM0LCAxMiwgMTA2LCAzMywgNCwgMzIsIDE1LCAzMiwgNiwgMzIsIDMsIDMyLCA3LCA2NSwgNywgMTE5LCAzNCwgMywgMTA2LCAzNCwgNiwgMTE1LCA2NSwgMTYsIDExOSwgMzQsIDcsIDEwNiwgMzQsIDIsIDMyLCA2LCAzMiwgMiwgMzIsIDMsIDExNSwgNjUsIDEyLCAxMTksIDM0LCAzLCAxMDYsIDM0LCAxNCwgMzIsIDcsIDExNSwgNjUsIDgsIDExOSwgMzQsIDE2LCAxMDYsIDM0LCAxNSwgMzIsIDMsIDExNSwgNjUsIDcsIDExOSwgMzMsIDEzLCAzMiwgMTEsIDMyLCA0LCAzMiwgOSwgMTE1LCA2NSwgMTIsIDExOSwgMzQsIDIsIDEwNiwgMzQsIDcsIDMyLCAxMiwgMTE1LCA2NSwgOCwgMTE5LCAzNCwgMTIsIDMyLCA0LCAxMDYsIDM0LCA5LCAzMiwgMiwgMTE1LCA2NSwgNywgMTE5LCAzMywgNCwgMzIsIDMyLCAzMiwgMSwgMzIsIDUsIDExNSwgNjUsIDEyLCAxMTksIDM0LCAzLCAxMDYsIDM0LCA2LCAzMiwgMzMsIDExNSwgNjUsIDgsIDExOSwgMzQsIDExLCAzMiwgMSwgMTA2LCAzNCwgMiwgMzIsIDMsIDExNSwgNjUsIDcsIDExOSwgMzMsIDMsIDMyLCAxNywgMzIsIDgsIDMyLCAxMCwgMTE1LCA2NSwgMTIsIDExOSwgMzQsIDE3LCAxMDYsIDM0LCA1LCAzMiwgMzEsIDExNSwgNjUsIDgsIDExOSwgMzQsIDEsIDMyLCA4LCAxMDYsIDM0LCAxMCwgMzIsIDE3LCAxMTUsIDY1LCA3LCAxMTksIDMzLCA4LCAzMiwgMTgsIDY1LCAyLCAxMDYsIDMzLCAxOCwgMTIsIDEsIDExLCAxMSwgMzIsIDUsIDY1LCAyMjksIDI0MCwgMTkzLCAxMzksIDYsIDEwNiwgMzIsIDAsIDY1LCAwLCAxNiwgMTAsIDMyLCA2LCA2NSwgMjM4LCAyMDAsIDEyOSwgMTUzLCAzLCAxMDYsIDMyLCAwLCA2NSwgNCwgMTYsIDEwLCAzMiwgMTQsIDY1LCAxNzgsIDIxOCwgMTM2LCAyMDMsIDcsIDEwNiwgMzIsIDAsIDY1LCA4LCAxNiwgMTAsIDMyLCA3LCA2NSwgMjQ0LCAyMDIsIDEyOSwgMjE3LCA2LCAxMDYsIDMyLCAwLCA2NSwgMTIsIDE2LCAxMCwgMzIsIDQsIDMyLCAxOSwgMTA2LCAzMiwgMCwgNjUsIDE2LCAxNiwgMTAsIDMyLCA4LCAzMiwgMjAsIDEwNiwgMzIsIDAsIDY1LCAyMCwgMTYsIDEwLCAzMiwgMywgMzIsIDIxLCAxMDYsIDMyLCAwLCA2NSwgMjQsIDE2LCAxMCwgMzIsIDEzLCAzMiwgMjIsIDEwNiwgMzIsIDAsIDY1LCAyOCwgMTYsIDEwLCAzMiwgMTUsIDMyLCAyMywgMTA2LCAzMiwgMCwgNjUsIDMyLCAxNiwgMTAsIDMyLCA5LCAzMiwgMjQsIDEwNiwgMzIsIDAsIDY1LCAzNiwgMTYsIDEwLCAzMiwgMTAsIDMyLCAyNSwgMTA2LCAzMiwgMCwgNjUsIDQwLCAxNiwgMTAsIDMyLCAyLCAzMiwgMjYsIDEwNiwgMzIsIDAsIDY1LCA0NCwgMTYsIDEwLCAzMiwgMTEsIDMyLCAyNywgMTA2LCAzMiwgMCwgNjUsIDQ4LCAxNiwgMTAsIDMyLCAxNiwgMzIsIDI4LCAxMDYsIDMyLCAwLCA2NSwgNTIsIDE2LCAxMCwgMzIsIDEyLCAzMiwgMjksIDEwNiwgMzIsIDAsIDY1LCA1NiwgMTYsIDEwLCAzMiwgMSwgMzIsIDMwLCAxMDYsIDMyLCAwLCA2NSwgNjAsIDE2LCAxMCwgMTEsIDk3LCAxLCA0LCAxMjcsIDY1LCA0LCAzMywgMywgNjUsIDEsIDMzLCAxLCAzLCA2NCwgMzIsIDMsIDM0LCAyLCA2NSwgMSwgMTA3LCAzMywgMywgMzIsIDIsIDY1LCAyNTUsIDEsIDExMywgNCwgNjQsIDMyLCAxLCAzMiwgMCwgMzIsIDQsIDY1LCAyNTUsIDEsIDExMywgMTA2LCAzNCwgMiwgNDUsIDAsIDAsIDEwNiwgMzMsIDEsIDMyLCAyLCAzMiwgMSwgNTgsIDAsIDAsIDMyLCAxLCA2NSwgOCwgMTE4LCAzMywgMSwgMzIsIDQsIDY1LCAxLCAxMDYsIDMzLCA0LCAxMiwgMSwgMTEsIDExLCAzMiwgMSwgNjUsIDAsIDc0LCA0LCA2NCwgNjUsIDE0NCwgMSwgNjUsIDIwOCwgMSwgNjUsIDEzNSwgMiwgNjUsIDQsIDE2LCAwLCAwLCAxMSwgMTEsIDgsIDAsIDMyLCAwLCAzMiwgMSwgMTYsIDMsIDExLCAxMDgsIDEsIDIsIDEyNywgMywgNjQsIDMyLCA2LCAzMiwgMSwgNzMsIDQsIDY0LCAzNSwgMTUsIDMyLCAzLCAzMiwgMiwgMTYsIDExLCAzMiwgNiwgMzMsIDUsIDMsIDY0LCAzMiwgNSwgMzIsIDEsIDczLCA2NSwgMCwgMzIsIDUsIDMyLCA2LCA2NSwgNjQsIDEwNywgNzMsIDI3LCA0LCA2NCwgMzIsIDQsIDMyLCA1LCAxMDYsIDMyLCAwLCAzMiwgNSwgMTA2LCA0NSwgMCwgMCwgMzUsIDE1LCAzMiwgNSwgMzIsIDYsIDEwNywgMTA2LCA0NSwgMCwgMCwgMTE1LCA1OCwgMCwgMCwgMzIsIDUsIDY1LCAxLCAxMDYsIDMzLCA1LCAxMiwgMSwgMTEsIDExLCAzMiwgMywgMTYsIDEyLCAzMiwgNiwgNjUsIDY0LCAxMDcsIDMzLCA2LCAxMiwgMSwgMTEsIDExLCAzNSwgMTUsIDY1LCAxOTIsIDAsIDE2LCAxMywgMzIsIDEsIDExLCAxNCwgMCwgMzUsIDcsIDMyLCAwLCAzNSwgOSwgMzUsIDExLCAzNSwgMTMsIDE2LCAxNCwgMTEsIDIwNCwgNCwgMSwgMSwgMTI3LCAzNSwgMjcsIDMyLCAwLCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAxLCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDM0LCAxLCA2NSwgMjU1LCA2MywgMTEzLCA1OSwgMSwgMCwgMzUsIDI3LCA2NSwgMiwgMTA2LCAzMiwgMSwgNjUsIDEzLCAxMTgsIDMyLCAwLCA2NSwgMiwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAzLCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDM0LCAxLCA2NSwgMywgMTE2LCAxMTQsIDY1LCAyNTUsIDYzLCAxMTMsIDU5LCAxLCAwLCAzNSwgMjcsIDY1LCA0LCAxMDYsIDMyLCAxLCA2NSwgMTAsIDExOCwgMzIsIDAsIDY1LCA0LCAxMDYsIDQ1LCAwLCAwLCAzMiwgMCwgNjUsIDUsIDEwNiwgNDUsIDAsIDAsIDY1LCA4LCAxMTYsIDExNCwgMzQsIDEsIDY1LCA2LCAxMTYsIDExNCwgNjUsIDEzMSwgNjIsIDExMywgNTksIDEsIDAsIDM1LCAyNywgNjUsIDYsIDEwNiwgMzIsIDEsIDY1LCA3LCAxMTgsIDMyLCAwLCA2NSwgNiwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCA3LCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDM0LCAxLCA2NSwgOSwgMTE2LCAxMTQsIDY1LCAyNTUsIDYzLCAxMTMsIDU5LCAxLCAwLCAzNSwgMjcsIDY1LCA4LCAxMDYsIDMyLCAxLCA2NSwgNCwgMTE4LCAzMiwgMCwgNjUsIDgsIDEwNiwgNDUsIDAsIDAsIDMyLCAwLCA2NSwgOSwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCAzNCwgMSwgNjUsIDEyLCAxMTYsIDExNCwgNjUsIDI1NSwgMSwgMTEzLCA1OSwgMSwgMCwgMzUsIDI3LCA2NSwgMTAsIDEwNiwgMzIsIDEsIDY1LCAxLCAxMTgsIDY1LCAyNTQsIDYzLCAxMTMsIDU5LCAxLCAwLCAzNSwgMjcsIDY1LCAxMiwgMTA2LCAzMiwgMSwgNjUsIDE0LCAxMTgsIDMyLCAwLCA2NSwgMTAsIDEwNiwgNDUsIDAsIDAsIDMyLCAwLCA2NSwgMTEsIDEwNiwgNDUsIDAsIDAsIDY1LCA4LCAxMTYsIDExNCwgMzQsIDEsIDY1LCAyLCAxMTYsIDExNCwgNjUsIDI1NSwgNjMsIDExMywgNTksIDEsIDAsIDM1LCAyNywgNjUsIDE0LCAxMDYsIDMyLCAxLCA2NSwgMTEsIDExOCwgMzIsIDAsIDY1LCAxMiwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAxMywgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCAzNCwgMSwgNjUsIDUsIDExNiwgMTE0LCA2NSwgMTI5LCA2MywgMTEzLCA1OSwgMSwgMCwgMzUsIDI3LCA2NSwgMTYsIDEwNiwgMzIsIDEsIDY1LCA4LCAxMTgsIDMyLCAwLCA2NSwgMTQsIDEwNiwgNDUsIDAsIDAsIDMyLCAwLCA2NSwgMTUsIDEwNiwgNDUsIDAsIDAsIDY1LCA4LCAxMTYsIDExNCwgMzQsIDEsIDY1LCA4LCAxMTYsIDExNCwgNjUsIDI1NSwgNjMsIDExMywgNTksIDEsIDAsIDM1LCAyNywgNjUsIDE4LCAxMDYsIDMyLCAxLCA2NSwgNSwgMTE4LCA2NSwgMjU1LCAwLCAxMTMsIDU5LCAxLCAwLCAzNSwgMzEsIDMyLCAwLCA2NSwgMTYsIDEwNiwgNDUsIDAsIDAsIDMyLCAwLCA2NSwgMTcsIDEwNiwgNDUsIDAsIDAsIDY1LCA4LCAxMTYsIDExNCwgNTksIDEsIDAsIDM1LCAzMSwgNjUsIDIsIDEwNiwgMzIsIDAsIDY1LCAxOCwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAxOSwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCA1OSwgMSwgMCwgMzUsIDMxLCA2NSwgNCwgMTA2LCAzMiwgMCwgNjUsIDIwLCAxMDYsIDQ1LCAwLCAwLCAzMiwgMCwgNjUsIDIxLCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDU5LCAxLCAwLCAzNSwgMzEsIDY1LCA2LCAxMDYsIDMyLCAwLCA2NSwgMjIsIDEwNiwgNDUsIDAsIDAsIDMyLCAwLCA2NSwgMjMsIDEwNiwgNDUsIDAsIDAsIDY1LCA4LCAxMTYsIDExNCwgNTksIDEsIDAsIDM1LCAzMSwgNjUsIDgsIDEwNiwgMzIsIDAsIDY1LCAyNCwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAyNSwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCA1OSwgMSwgMCwgMzUsIDMxLCA2NSwgMTAsIDEwNiwgMzIsIDAsIDY1LCAyNiwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAyNywgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCA1OSwgMSwgMCwgMzUsIDMxLCA2NSwgMTIsIDEwNiwgMzIsIDAsIDY1LCAyOCwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAyOSwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCA1OSwgMSwgMCwgMzUsIDMxLCA2NSwgMTQsIDEwNiwgMzIsIDAsIDY1LCAzMCwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDY1LCAzMSwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCA1OSwgMSwgMCwgMTEsIDYsIDAsIDM1LCAyMSwgMTYsIDE2LCAxMSwgMTY2LCAxMywgMSwgMzIsIDEyNywgNjUsIDAsIDY1LCAxMjgsIDE2LCAzNSwgMzMsIDI3LCAzMywgMzQsIDM1LCAyOSwgNDcsIDEsIDAsIDMzLCAzLCAzNSwgMjksIDY1LCAyLCAxMDYsIDQ3LCAxLCAwLCAzMywgNCwgMzUsIDI5LCA2NSwgNCwgMTA2LCA0NywgMSwgMCwgMzMsIDgsIDM1LCAyOSwgNjUsIDYsIDEwNiwgNDcsIDEsIDAsIDMzLCA5LCAzNSwgMjksIDY1LCA4LCAxMDYsIDQ3LCAxLCAwLCAzMywgMTAsIDM1LCAyOSwgNjUsIDEwLCAxMDYsIDQ3LCAxLCAwLCAzMywgMTEsIDM1LCAyOSwgNjUsIDEyLCAxMDYsIDQ3LCAxLCAwLCAzMywgMTIsIDM1LCAyOSwgNjUsIDE0LCAxMDYsIDQ3LCAxLCAwLCAzMywgMTMsIDM1LCAyOSwgNjUsIDE2LCAxMDYsIDQ3LCAxLCAwLCAzMywgMTQsIDM1LCAyOSwgNjUsIDE4LCAxMDYsIDQ3LCAxLCAwLCAzMywgNiwgMzUsIDI3LCA0NywgMSwgMCwgMzMsIDE3LCAzNSwgMjcsIDY1LCAyLCAxMDYsIDQ3LCAxLCAwLCAzMywgMTgsIDM1LCAyNywgNjUsIDQsIDEwNiwgNDcsIDEsIDAsIDMzLCAyMCwgMzUsIDI3LCA2NSwgNiwgMTA2LCA0NywgMSwgMCwgMzMsIDIyLCAzNSwgMjcsIDY1LCA4LCAxMDYsIDQ3LCAxLCAwLCAzMywgMjQsIDM1LCAyNywgNjUsIDEwLCAxMDYsIDQ3LCAxLCAwLCAzMywgMjYsIDM1LCAyNywgNjUsIDEyLCAxMDYsIDQ3LCAxLCAwLCAzMywgMjksIDM1LCAyNywgNjUsIDE0LCAxMDYsIDQ3LCAxLCAwLCAzMywgMzAsIDM1LCAyNywgNjUsIDE2LCAxMDYsIDQ3LCAxLCAwLCAzMywgMzEsIDM1LCAyNywgNjUsIDE4LCAxMDYsIDQ3LCAxLCAwLCAzMywgMzMsIDMsIDY0LCAzMiwgMiwgNjUsIDE2LCA3OSwgNCwgNjQsIDMyLCAzLCAzMiwgMCwgMzIsIDEsIDEwNiwgNDUsIDAsIDAsIDMyLCAwLCAzMiwgMSwgNjUsIDEsIDEwNiwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCAzNCwgMTUsIDY1LCAyNTUsIDYzLCAxMTMsIDEwNiwgMzQsIDMsIDMyLCAxNywgMTA4LCAzMiwgNCwgMzIsIDAsIDMyLCAxLCA2NSwgMiwgMTA2LCAxMDYsIDQ1LCAwLCAwLCAzMiwgMCwgMzIsIDEsIDY1LCAzLCAxMDYsIDEwNiwgNDUsIDAsIDAsIDY1LCA4LCAxMTYsIDExNCwgMzQsIDE2LCA2NSwgMywgMTE2LCAzMiwgMTUsIDY1LCAyNTUsIDI1NSwgMywgMTEzLCA2NSwgMTMsIDExOCwgMTE0LCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDM0LCA0LCAzMiwgMzMsIDY1LCA1LCAxMDgsIDM0LCAxNSwgMTA4LCAxMDYsIDMyLCA4LCAzMiwgMCwgMzIsIDEsIDY1LCA0LCAxMDYsIDEwNiwgNDUsIDAsIDAsIDMyLCAwLCAzMiwgMSwgNjUsIDUsIDEwNiwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCAzNCwgMTksIDY1LCA2LCAxMTYsIDMyLCAxNiwgNjUsIDI1NSwgMjU1LCAzLCAxMTMsIDY1LCAxMCwgMTE4LCAxMTQsIDY1LCAyNTUsIDYzLCAxMTMsIDEwNiwgMzQsIDgsIDMyLCAzMSwgNjUsIDUsIDEwOCwgMzQsIDE2LCAxMDgsIDEwNiwgMzIsIDksIDMyLCAwLCAzMiwgMSwgNjUsIDYsIDEwNiwgMTA2LCA0NSwgMCwgMCwgMzIsIDAsIDMyLCAxLCA2NSwgNywgMTA2LCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDM0LCAyMSwgNjUsIDksIDExNiwgMzIsIDE5LCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDcsIDExOCwgMTE0LCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDM0LCA5LCAzMiwgMzAsIDY1LCA1LCAxMDgsIDM0LCAxOSwgMTA4LCAxMDYsIDMyLCAxMCwgMzIsIDAsIDMyLCAxLCA2NSwgOCwgMTA2LCAxMDYsIDQ1LCAwLCAwLCAzMiwgMCwgMzIsIDEsIDY1LCA5LCAxMDYsIDEwNiwgNDUsIDAsIDAsIDY1LCA4LCAxMTYsIDExNCwgMzQsIDIzLCA2NSwgMTIsIDExNiwgMzIsIDIxLCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDQsIDExOCwgMTE0LCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDM0LCAxMCwgMzIsIDI5LCA2NSwgNSwgMTA4LCAzNCwgMjEsIDEwOCwgMTA2LCAzNCwgMzIsIDY1LCAyNTUsIDYzLCAxMTMsIDMyLCAxMSwgMzIsIDIzLCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDEsIDExOCwgNjUsIDI1NSwgNjMsIDExMywgMTA2LCAzNCwgMTEsIDMyLCAyNiwgNjUsIDUsIDEwOCwgMzQsIDI3LCAxMDgsIDEwNiwgMzIsIDEyLCAzMiwgMCwgMzIsIDEsIDY1LCAxMCwgMTA2LCAxMDYsIDQ1LCAwLCAwLCAzMiwgMCwgMzIsIDEsIDY1LCAxMSwgMTA2LCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDM0LCAyOCwgNjUsIDIsIDExNiwgMzIsIDIzLCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDE0LCAxMTgsIDExNCwgNjUsIDI1NSwgNjMsIDExMywgMTA2LCAzNCwgMTIsIDMyLCAyNCwgNjUsIDUsIDEwOCwgMzQsIDIzLCAxMDgsIDEwNiwgMzIsIDEzLCAzMiwgMCwgMzIsIDEsIDY1LCAxMiwgMTA2LCAxMDYsIDQ1LCAwLCAwLCAzMiwgMCwgMzIsIDEsIDY1LCAxMywgMTA2LCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDM0LCAyNSwgNjUsIDUsIDExNiwgMzIsIDI4LCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDExLCAxMTgsIDExNCwgNjUsIDI1NSwgNjMsIDExMywgMTA2LCAzNCwgMTMsIDMyLCAyMiwgNjUsIDUsIDEwOCwgMzQsIDI4LCAxMDgsIDEwNiwgMzIsIDE0LCAzMiwgMjUsIDY1LCAyNTUsIDI1NSwgMywgMTEzLCA2NSwgOCwgMTE4LCAzMiwgMCwgMzIsIDEsIDY1LCAxNCwgMTA2LCAxMDYsIDQ1LCAwLCAwLCAzMiwgMCwgMzIsIDEsIDY1LCAxNSwgMTA2LCAxMDYsIDQ1LCAwLCAwLCA2NSwgOCwgMTE2LCAxMTQsIDM0LCAyNSwgNjUsIDgsIDExNiwgMTE0LCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDM0LCAxNCwgMzIsIDIwLCA2NSwgNSwgMTA4LCAzNCwgNywgMTA4LCAxMDYsIDMzLCA1LCAzMiwgMTEsIDMyLCAyMSwgMTA4LCAzMiwgMzIsIDY1LCAxMywgMTE4LCAzMiwgNSwgMzIsIDYsIDMyLCAzNCwgMzIsIDI1LCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDUsIDExOCwgMTE0LCA2NSwgMjU1LCAyNTUsIDMsIDExMywgMTA2LCAzNCwgNiwgMzIsIDE4LCA2NSwgNSwgMTA4LCAxMDgsIDEwNiwgMzQsIDMyLCA2NSwgMTMsIDExOCwgMTA2LCAzMiwgMywgMzIsIDE4LCAxMDgsIDEwNiwgMzIsIDQsIDMyLCAxNywgMTA4LCAxMDYsIDMyLCA4LCAzMiwgMTUsIDEwOCwgMTA2LCAzMiwgOSwgMzIsIDE2LCAxMDgsIDEwNiwgMzIsIDEwLCAzMiwgMTksIDEwOCwgMTA2LCAzNCwgMjUsIDY1LCAyNTUsIDYzLCAxMTMsIDEwNiwgMzIsIDEyLCAzMiwgMjcsIDEwOCwgMTA2LCAzMiwgMTMsIDMyLCAyMywgMTA4LCAxMDYsIDMyLCAxNCwgMzIsIDI4LCAxMDgsIDEwNiwgMzMsIDUsIDMyLCAxMSwgMzIsIDE5LCAxMDgsIDMyLCAyNSwgNjUsIDEzLCAxMTgsIDMyLCA1LCAzMiwgNiwgMzIsIDcsIDEwOCwgMTA2LCAzNCwgMjUsIDY1LCAxMywgMTE4LCAxMDYsIDMyLCAzLCAzMiwgMjAsIDEwOCwgMTA2LCAzMiwgNCwgMzIsIDE4LCAxMDgsIDEwNiwgMzIsIDgsIDMyLCAxNywgMTA4LCAxMDYsIDMyLCA5LCAzMiwgMTUsIDEwOCwgMTA2LCAzMiwgMTAsIDMyLCAxNiwgMTA4LCAxMDYsIDM0LCA3LCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDMyLCAxMiwgMzIsIDIxLCAxMDgsIDEwNiwgMzIsIDEzLCAzMiwgMjcsIDEwOCwgMTA2LCAzMiwgMTQsIDMyLCAyMywgMTA4LCAxMDYsIDMzLCA1LCAzMiwgMTEsIDMyLCAxNiwgMTA4LCAzMiwgNywgNjUsIDEzLCAxMTgsIDMyLCA1LCAzMiwgNiwgMzIsIDI4LCAxMDgsIDEwNiwgMzQsIDI4LCA2NSwgMTMsIDExOCwgMTA2LCAzMiwgMywgMzIsIDIyLCAxMDgsIDEwNiwgMzIsIDQsIDMyLCAyMCwgMTA4LCAxMDYsIDMyLCA4LCAzMiwgMTgsIDEwOCwgMTA2LCAzMiwgOSwgMzIsIDE3LCAxMDgsIDEwNiwgMzIsIDEwLCAzMiwgMTUsIDEwOCwgMTA2LCAzNCwgNywgNjUsIDI1NSwgNjMsIDExMywgMTA2LCAzMiwgMTIsIDMyLCAxOSwgMTA4LCAxMDYsIDMyLCAxMywgMzIsIDIxLCAxMDgsIDEwNiwgMzIsIDE0LCAzMiwgMjcsIDEwOCwgMTA2LCAzMywgNSwgMzIsIDExLCAzMiwgMTUsIDEwOCwgMzIsIDcsIDY1LCAxMywgMTE4LCAzMiwgNSwgMzIsIDYsIDMyLCAyMywgMTA4LCAxMDYsIDM0LCAyMywgNjUsIDEzLCAxMTgsIDEwNiwgMzIsIDMsIDMyLCAyNCwgMTA4LCAxMDYsIDMyLCA0LCAzMiwgMjIsIDEwOCwgMTA2LCAzMiwgOCwgMzIsIDIwLCAxMDgsIDEwNiwgMzIsIDksIDMyLCAxOCwgMTA4LCAxMDYsIDMyLCAxMCwgMzIsIDE3LCAxMDgsIDEwNiwgMzQsIDcsIDY1LCAyNTUsIDYzLCAxMTMsIDEwNiwgMzIsIDEyLCAzMiwgMTYsIDEwOCwgMTA2LCAzMiwgMTMsIDMyLCAxOSwgMTA4LCAxMDYsIDMyLCAxNCwgMzIsIDIxLCAxMDgsIDEwNiwgMzMsIDUsIDMyLCAxMSwgMzIsIDE3LCAxMDgsIDMyLCA3LCA2NSwgMTMsIDExOCwgMzIsIDUsIDMyLCA2LCAzMiwgMjcsIDEwOCwgMTA2LCAzNCwgMjcsIDY1LCAxMywgMTE4LCAxMDYsIDMyLCAzLCAzMiwgMjYsIDEwOCwgMTA2LCAzMiwgNCwgMzIsIDI0LCAxMDgsIDEwNiwgMzIsIDgsIDMyLCAyMiwgMTA4LCAxMDYsIDMyLCA5LCAzMiwgMjAsIDEwOCwgMTA2LCAzMiwgMTAsIDMyLCAxOCwgMTA4LCAxMDYsIDM0LCA3LCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDMyLCAxMiwgMzIsIDE1LCAxMDgsIDEwNiwgMzIsIDEzLCAzMiwgMTYsIDEwOCwgMTA2LCAzMiwgMTQsIDMyLCAxOSwgMTA4LCAxMDYsIDMzLCA1LCAzMiwgMTEsIDMyLCAxOCwgMTA4LCAzMiwgNywgNjUsIDEzLCAxMTgsIDMyLCA1LCAzMiwgNiwgMzIsIDIxLCAxMDgsIDEwNiwgMzQsIDIxLCA2NSwgMTMsIDExOCwgMTA2LCAzMiwgMywgMzIsIDI5LCAxMDgsIDEwNiwgMzIsIDQsIDMyLCAyNiwgMTA4LCAxMDYsIDMyLCA4LCAzMiwgMjQsIDEwOCwgMTA2LCAzMiwgOSwgMzIsIDIyLCAxMDgsIDEwNiwgMzIsIDEwLCAzMiwgMjAsIDEwOCwgMTA2LCAzNCwgNywgNjUsIDI1NSwgNjMsIDExMywgMTA2LCAzMiwgMTIsIDMyLCAxNywgMTA4LCAxMDYsIDMyLCAxMywgMzIsIDE1LCAxMDgsIDEwNiwgMzIsIDE0LCAzMiwgMTYsIDEwOCwgMTA2LCAzMywgNSwgMzIsIDExLCAzMiwgMjAsIDEwOCwgMzIsIDcsIDY1LCAxMywgMTE4LCAzMiwgNSwgMzIsIDYsIDMyLCAxOSwgMTA4LCAxMDYsIDM0LCAxOSwgNjUsIDEzLCAxMTgsIDEwNiwgMzIsIDMsIDMyLCAzMCwgMTA4LCAxMDYsIDMyLCA0LCAzMiwgMjksIDEwOCwgMTA2LCAzMiwgOCwgMzIsIDI2LCAxMDgsIDEwNiwgMzIsIDksIDMyLCAyNCwgMTA4LCAxMDYsIDMyLCAxMCwgMzIsIDIyLCAxMDgsIDEwNiwgMzQsIDcsIDY1LCAyNTUsIDYzLCAxMTMsIDEwNiwgMzIsIDEyLCAzMiwgMTgsIDEwOCwgMTA2LCAzMiwgMTMsIDMyLCAxNywgMTA4LCAxMDYsIDMyLCAxNCwgMzIsIDE1LCAxMDgsIDEwNiwgMzMsIDUsIDMyLCAxMSwgMzIsIDIyLCAxMDgsIDMyLCA3LCA2NSwgMTMsIDExOCwgMzIsIDUsIDMyLCA2LCAzMiwgMTYsIDEwOCwgMTA2LCAzNCwgMTYsIDY1LCAxMywgMTE4LCAxMDYsIDMyLCAzLCAzMiwgMzEsIDEwOCwgMTA2LCAzMiwgNCwgMzIsIDMwLCAxMDgsIDEwNiwgMzIsIDgsIDMyLCAyOSwgMTA4LCAxMDYsIDMyLCA5LCAzMiwgMjYsIDEwOCwgMTA2LCAzMiwgMTAsIDMyLCAyNCwgMTA4LCAxMDYsIDM0LCA3LCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDMyLCAxMiwgMzIsIDIwLCAxMDgsIDEwNiwgMzIsIDEzLCAzMiwgMTgsIDEwOCwgMTA2LCAzMiwgMTQsIDMyLCAxNywgMTA4LCAxMDYsIDMzLCA1LCAzMiwgMTEsIDMyLCAyNCwgMTA4LCAzMiwgNywgNjUsIDEzLCAxMTgsIDMyLCA1LCAzMiwgNiwgMzIsIDE1LCAxMDgsIDEwNiwgMzQsIDE1LCA2NSwgMTMsIDExOCwgMTA2LCAzMiwgMywgMzIsIDMzLCAxMDgsIDEwNiwgMzIsIDQsIDMyLCAzMSwgMTA4LCAxMDYsIDMyLCA4LCAzMiwgMzAsIDEwOCwgMTA2LCAzMiwgOSwgMzIsIDI5LCAxMDgsIDEwNiwgMzIsIDEwLCAzMiwgMjYsIDEwOCwgMTA2LCAzNCwgMywgNjUsIDI1NSwgNjMsIDExMywgMTA2LCAzMiwgMTIsIDMyLCAyMiwgMTA4LCAxMDYsIDMyLCAxMywgMzIsIDIwLCAxMDgsIDEwNiwgMzIsIDE0LCAzMiwgMTgsIDEwOCwgMTA2LCAzMywgNCwgMzIsIDMsIDY1LCAxMywgMTE4LCAzMiwgNCwgMzIsIDYsIDMyLCAxNywgMTA4LCAxMDYsIDM0LCA2LCA2NSwgMTMsIDExOCwgMTA2LCAzNCwgMywgMzIsIDMsIDY1LCAyLCAxMTYsIDEwNiwgMzIsIDMyLCA2NSwgMjU1LCA2MywgMTEzLCAxMDYsIDM0LCAzLCA2NSwgMTMsIDExOCwgMzMsIDQsIDMyLCAzLCA2NSwgMjU1LCA2MywgMTEzLCAzMywgMywgMzIsIDI1LCA2NSwgMjU1LCA2MywgMTEzLCAzMiwgNCwgMTA2LCAzMywgNCwgMzIsIDI4LCA2NSwgMjU1LCA2MywgMTEzLCAzMywgOCwgMzIsIDIzLCA2NSwgMjU1LCA2MywgMTEzLCAzMywgOSwgMzIsIDI3LCA2NSwgMjU1LCA2MywgMTEzLCAzMywgMTAsIDMyLCAyMSwgNjUsIDI1NSwgNjMsIDExMywgMzMsIDExLCAzMiwgMTksIDY1LCAyNTUsIDYzLCAxMTMsIDMzLCAxMiwgMzIsIDE2LCA2NSwgMjU1LCA2MywgMTEzLCAzMywgMTMsIDMyLCAxNSwgNjUsIDI1NSwgNjMsIDExMywgMzMsIDE0LCAzMiwgNiwgNjUsIDI1NSwgNjMsIDExMywgMzMsIDYsIDMyLCAxLCA2NSwgMTYsIDEwNiwgMzMsIDEsIDMyLCAyLCA2NSwgMTYsIDEwNywgMzMsIDIsIDEyLCAxLCAxMSwgMTEsIDM1LCAyOSwgMzIsIDMsIDU5LCAxLCAwLCAzNSwgMjksIDY1LCAyLCAxMDYsIDMyLCA0LCA1OSwgMSwgMCwgMzUsIDI5LCA2NSwgNCwgMTA2LCAzMiwgOCwgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDYsIDEwNiwgMzIsIDksIDU5LCAxLCAwLCAzNSwgMjksIDY1LCA4LCAxMDYsIDMyLCAxMCwgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDEwLCAxMDYsIDMyLCAxMSwgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDEyLCAxMDYsIDMyLCAxMiwgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDE0LCAxMDYsIDMyLCAxMywgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDE2LCAxMDYsIDMyLCAxNCwgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDE4LCAxMDYsIDMyLCA2LCA1OSwgMSwgMCwgMTEsIDIwMywgMSwgMSwgMywgMTI3LCAzNSwgMzIsIDQsIDY0LCA2NSwgMTYsIDM1LCAzMiwgMTA3LCAzNCwgMywgMzIsIDEsIDc1LCA0LCA2NCwgMzIsIDEsIDMzLCAzLCAxMSwgMywgNjQsIDMyLCAyLCAzMiwgMywgNzMsIDQsIDY0LCAzNSwgMjUsIDMyLCAyLCAzNSwgMzIsIDEwNiwgMTA2LCAzMiwgMCwgMzIsIDIsIDEwNiwgNDUsIDAsIDAsIDU4LCAwLCAwLCAzMiwgMiwgNjUsIDEsIDEwNiwgMzMsIDIsIDEyLCAxLCAxMSwgMTEsIDMyLCAxLCAzMiwgMywgMTA3LCAzMywgMSwgMzIsIDMsIDMzLCA0LCAzMiwgMywgMzUsIDMyLCAxMDYsIDM2LCAzMiwgMzUsIDMyLCA2NSwgMTYsIDczLCA0LCA2NCwgMTUsIDExLCAzNSwgMjUsIDY1LCAwLCA2NSwgMTYsIDE2LCAxOCwgNjUsIDAsIDM2LCAzMiwgMTEsIDIsIDEyNywgMzIsIDEsIDY1LCAxNiwgNzksIDQsIDY0LCAzMiwgMCwgMzIsIDQsIDMyLCAxLCAzMiwgMSwgNjUsIDE1LCAxMTMsIDEwNywgMzQsIDMsIDE2LCAxOCwgMzIsIDMsIDMyLCA0LCAxMDYsIDMzLCA0LCAzMiwgMSwgMzIsIDMsIDEwNywgMzMsIDEsIDExLCAzMiwgMSwgMTEsIDQsIDY0LCA2NSwgMCwgMzMsIDIsIDMsIDY0LCAzMiwgMiwgMzIsIDEsIDczLCA0LCA2NCwgMzUsIDI1LCAzMiwgMiwgMzUsIDMyLCAxMDYsIDEwNiwgMzIsIDAsIDMyLCAyLCAzMiwgNCwgMTA2LCAxMDYsIDQ1LCAwLCAwLCA1OCwgMCwgMCwgMzIsIDIsIDY1LCAxLCAxMDYsIDMzLCAyLCAxMiwgMSwgMTEsIDExLCAzMiwgMSwgMzUsIDMyLCAxMDYsIDM2LCAzMiwgMTEsIDExLCA4LCAwLCAzNSwgMjIsIDMyLCAwLCAxNiwgMTksIDExLCAxNDksIDksIDEsIDMsIDEyNywgMzUsIDMyLCA0LCA2NCwgMzUsIDMyLCAzNCwgMSwgMzUsIDI1LCAxMDYsIDY1LCAxLCA1OCwgMCwgMCwgMzIsIDEsIDY1LCAxLCAxMDYsIDMzLCAxLCAzLCA2NCwgMzIsIDEsIDY1LCAxNiwgNzMsIDQsIDY0LCAzMiwgMSwgMzUsIDI1LCAxMDYsIDY1LCAwLCA1OCwgMCwgMCwgMzIsIDEsIDY1LCAxLCAxMDYsIDMzLCAxLCAxMiwgMSwgMTEsIDExLCA2NSwgMSwgMzYsIDMzLCAzNSwgMjUsIDY1LCAwLCA2NSwgMTYsIDE2LCAxOCwgMTEsIDM1LCAyOSwgNjUsIDIsIDEwNiwgNDcsIDEsIDAsIDY1LCAxMywgMTE4LCAzMywgMiwgMzUsIDI5LCA2NSwgMiwgMTA2LCAzNSwgMjksIDY1LCAyLCAxMDYsIDQ3LCAxLCAwLCA2NSwgMjU1LCA2MywgMTEzLCA1OSwgMSwgMCwgNjUsIDIsIDMzLCAxLCAzLCA2NCwgMzIsIDEsIDY1LCAxMCwgNzMsIDQsIDY0LCAzMiwgMSwgNjUsIDEsIDExNiwgMzQsIDMsIDM1LCAyOSwgMTA2LCAzMiwgMiwgMzIsIDMsIDM1LCAyOSwgMTA2LCA0NywgMSwgMCwgMTA2LCA1OSwgMSwgMCwgMzIsIDMsIDM1LCAyOSwgMTA2LCA0NywgMSwgMCwgNjUsIDEzLCAxMTgsIDMzLCAyLCAzMiwgMywgMzUsIDI5LCAxMDYsIDMyLCAzLCAzNSwgMjksIDEwNiwgNDcsIDEsIDAsIDY1LCAyNTUsIDYzLCAxMTMsIDU5LCAxLCAwLCAzMiwgMSwgNjUsIDEsIDEwNiwgMzMsIDEsIDEyLCAxLCAxMSwgMTEsIDM1LCAyOSwgMzUsIDI5LCA0NywgMSwgMCwgMzIsIDIsIDY1LCA1LCAxMDgsIDEwNiwgNTksIDEsIDAsIDM1LCAyOSwgNDcsIDEsIDAsIDMzLCAxLCAzNSwgMjksIDM1LCAyOSwgNDcsIDEsIDAsIDY1LCAyNTUsIDYzLCAxMTMsIDU5LCAxLCAwLCAzNSwgMjksIDY1LCAyLCAxMDYsIDM1LCAyOSwgNjUsIDIsIDEwNiwgNDcsIDEsIDAsIDMyLCAxLCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDEzLCAxMTgsIDEwNiwgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDIsIDEwNiwgNDcsIDEsIDAsIDMzLCAxLCAzNSwgMjksIDY1LCAyLCAxMDYsIDM1LCAyOSwgNjUsIDIsIDEwNiwgNDcsIDEsIDAsIDY1LCAyNTUsIDYzLCAxMTMsIDU5LCAxLCAwLCAzNSwgMjksIDY1LCA0LCAxMDYsIDM1LCAyOSwgNjUsIDQsIDEwNiwgNDcsIDEsIDAsIDMyLCAxLCA2NSwgMjU1LCAyNTUsIDMsIDExMywgNjUsIDEzLCAxMTgsIDEwNiwgNTksIDEsIDAsIDM1LCAzNiwgMzUsIDI5LCA0NywgMSwgMCwgNjUsIDUsIDEwNiwgNTksIDEsIDAsIDM1LCAzNiwgNDcsIDEsIDAsIDY1LCAxMywgMTE4LCAzMywgMiwgMzUsIDM2LCAzNSwgMzYsIDQ3LCAxLCAwLCA2NSwgMjU1LCA2MywgMTEzLCA1OSwgMSwgMCwgNjUsIDEsIDMzLCAxLCAzLCA2NCwgMzIsIDEsIDY1LCAxMCwgNzMsIDQsIDY0LCAzMiwgMSwgNjUsIDEsIDExNiwgMzQsIDMsIDM1LCAzNiwgMTA2LCAzMiwgMiwgMzIsIDMsIDM1LCAyOSwgMTA2LCA0NywgMSwgMCwgMTA2LCA1OSwgMSwgMCwgMzIsIDMsIDM1LCAzNiwgMTA2LCA0NywgMSwgMCwgNjUsIDEzLCAxMTgsIDMzLCAyLCAzMiwgMywgMzUsIDM2LCAxMDYsIDMyLCAzLCAzNSwgMzYsIDEwNiwgNDcsIDEsIDAsIDY1LCAyNTUsIDYzLCAxMTMsIDU5LCAxLCAwLCAzMiwgMSwgNjUsIDEsIDEwNiwgMzMsIDEsIDEyLCAxLCAxMSwgMTEsIDM1LCAzNiwgNjUsIDE4LCAxMDYsIDM1LCAzNiwgNjUsIDE4LCAxMDYsIDQ3LCAxLCAwLCA2NSwgMTI4LCA2NCwgMTA2LCA1OSwgMSwgMCwgMzIsIDIsIDY1LCAxLCAxMTUsIDY1LCAxLCAxMDcsIDMzLCAyLCA2NSwgMCwgMzMsIDEsIDMsIDY0LCAzMiwgMSwgNjUsIDEwLCA3MywgNCwgNjQsIDMyLCAxLCA2NSwgMSwgMTE2LCAzNCwgMywgMzUsIDM2LCAxMDYsIDMyLCAyLCAzMiwgMywgMzUsIDM2LCAxMDYsIDQ3LCAxLCAwLCAxMTMsIDU5LCAxLCAwLCAzMiwgMSwgNjUsIDEsIDEwNiwgMzMsIDEsIDEyLCAxLCAxMSwgMTEsIDMyLCAyLCA2NSwgMTI3LCAxMTUsIDMzLCAzLCA2NSwgMCwgMzMsIDEsIDMsIDY0LCAzMiwgMSwgNjUsIDEwLCA3MywgNCwgNjQsIDMyLCAxLCA2NSwgMSwgMTE2LCAzNCwgMiwgMzUsIDI5LCAxMDYsIDMyLCAyLCAzNSwgMzYsIDEwNiwgNDcsIDEsIDAsIDMyLCAzLCAzMiwgMiwgMzUsIDI5LCAxMDYsIDQ3LCAxLCAwLCAxMTMsIDExNCwgNTksIDEsIDAsIDMyLCAxLCA2NSwgMSwgMTA2LCAzMywgMSwgMTIsIDEsIDExLCAxMSwgMzUsIDI5LCAzNSwgMjksIDQ3LCAxLCAwLCAzNSwgMjksIDY1LCAyLCAxMDYsIDQ3LCAxLCAwLCA2NSwgMTMsIDExNiwgMTE0LCA1OSwgMSwgMCwgMzUsIDI5LCA2NSwgMiwgMTA2LCAzNSwgMjksIDY1LCA0LCAxMDYsIDQ3LCAxLCAwLCA2NSwgMTAsIDExNiwgMzUsIDI5LCA2NSwgMiwgMTA2LCA0NywgMSwgMCwgNjUsIDMsIDExOCwgMTE0LCA1OSwgMSwgMCwgMzUsIDI5LCA2NSwgNCwgMTA2LCAzNSwgMjksIDY1LCA2LCAxMDYsIDQ3LCAxLCAwLCA2NSwgNywgMTE2LCAzNSwgMjksIDY1LCA0LCAxMDYsIDQ3LCAxLCAwLCA2NSwgNiwgMTE4LCAxMTQsIDU5LCAxLCAwLCAzNSwgMjksIDY1LCA2LCAxMDYsIDM1LCAyOSwgNjUsIDgsIDEwNiwgNDcsIDEsIDAsIDY1LCA0LCAxMTYsIDM1LCAyOSwgNjUsIDYsIDEwNiwgNDcsIDEsIDAsIDY1LCA5LCAxMTgsIDExNCwgNTksIDEsIDAsIDM1LCAyOSwgNjUsIDgsIDEwNiwgMzUsIDI5LCA2NSwgMTAsIDEwNiwgNDcsIDEsIDAsIDY1LCAxLCAxMTYsIDM1LCAyOSwgNjUsIDgsIDEwNiwgNDcsIDEsIDAsIDY1LCAxMiwgMTE4LCAxMTQsIDM1LCAyOSwgNjUsIDEyLCAxMDYsIDQ3LCAxLCAwLCA2NSwgMTQsIDExNiwgMTE0LCA1OSwgMSwgMCwgMzUsIDI5LCA2NSwgMTAsIDEwNiwgMzUsIDI5LCA2NSwgMTQsIDEwNiwgNDcsIDEsIDAsIDY1LCAxMSwgMTE2LCAzNSwgMjksIDY1LCAxMiwgMTA2LCA0NywgMSwgMCwgNjUsIDIsIDExOCwgMTE0LCA1OSwgMSwgMCwgMzUsIDI5LCA2NSwgMTIsIDEwNiwgMzUsIDI5LCA2NSwgMTYsIDEwNiwgNDcsIDEsIDAsIDY1LCA4LCAxMTYsIDM1LCAyOSwgNjUsIDE0LCAxMDYsIDQ3LCAxLCAwLCA2NSwgNSwgMTE4LCAxMTQsIDU5LCAxLCAwLCAzNSwgMjksIDY1LCAxNCwgMTA2LCAzNSwgMjksIDY1LCAxOCwgMTA2LCA0NywgMSwgMCwgNjUsIDUsIDExNiwgMzUsIDI5LCA2NSwgMTYsIDEwNiwgNDcsIDEsIDAsIDY1LCA4LCAxMTgsIDExNCwgNTksIDEsIDAsIDM1LCAyOSwgMzUsIDI5LCA0NywgMSwgMCwgMzUsIDMxLCA0NywgMSwgMCwgMTA2LCAzNCwgMiwgNTksIDEsIDAsIDY1LCAxLCAzMywgMSwgMywgNjQsIDMyLCAxLCA2NSwgOCwgNzMsIDQsIDY0LCAzMiwgMSwgNjUsIDEsIDExNiwgMzQsIDMsIDM1LCAyOSwgMTA2LCA0NywgMSwgMCwgMzIsIDMsIDM1LCAzMSwgMTA2LCA0NywgMSwgMCwgMTA2LCAzMiwgMiwgNjUsIDE2LCAxMTgsIDEwNiwgMzMsIDIsIDM1LCAyOSwgMzIsIDMsIDEwNiwgMzIsIDIsIDU5LCAxLCAwLCAzMiwgMSwgNjUsIDEsIDEwNiwgMzMsIDEsIDEyLCAxLCAxMSwgMTEsIDMyLCAwLCAzNSwgMjksIDQ3LCAxLCAwLCA1OCwgMCwgMCwgMzIsIDAsIDY1LCAxLCAxMDYsIDM1LCAyOSwgNDcsIDEsIDAsIDY1LCA4LCAxMTgsIDU4LCAwLCAwLCAzMiwgMCwgNjUsIDIsIDEwNiwgMzUsIDI5LCA2NSwgMiwgMTA2LCA0NywgMSwgMCwgNTgsIDAsIDAsIDMyLCAwLCA2NSwgMywgMTA2LCAzNSwgMjksIDY1LCAyLCAxMDYsIDQ3LCAxLCAwLCA2NSwgOCwgMTE4LCA1OCwgMCwgMCwgMzIsIDAsIDY1LCA0LCAxMDYsIDM1LCAyOSwgNjUsIDQsIDEwNiwgNDcsIDEsIDAsIDU4LCAwLCAwLCAzMiwgMCwgNjUsIDUsIDEwNiwgMzUsIDI5LCA2NSwgNCwgMTA2LCA0NywgMSwgMCwgNjUsIDgsIDExOCwgNTgsIDAsIDAsIDMyLCAwLCA2NSwgNiwgMTA2LCAzNSwgMjksIDY1LCA2LCAxMDYsIDQ3LCAxLCAwLCA1OCwgMCwgMCwgMzIsIDAsIDY1LCA3LCAxMDYsIDM1LCAyOSwgNjUsIDYsIDEwNiwgNDcsIDEsIDAsIDY1LCA4LCAxMTgsIDU4LCAwLCAwLCAzMiwgMCwgNjUsIDgsIDEwNiwgMzUsIDI5LCA2NSwgOCwgMTA2LCA0NywgMSwgMCwgNTgsIDAsIDAsIDMyLCAwLCA2NSwgOSwgMTA2LCAzNSwgMjksIDY1LCA4LCAxMDYsIDQ3LCAxLCAwLCA2NSwgOCwgMTE4LCA1OCwgMCwgMCwgMzIsIDAsIDY1LCAxMCwgMTA2LCAzNSwgMjksIDY1LCAxMCwgMTA2LCA0NywgMSwgMCwgNTgsIDAsIDAsIDMyLCAwLCA2NSwgMTEsIDEwNiwgMzUsIDI5LCA2NSwgMTAsIDEwNiwgNDcsIDEsIDAsIDY1LCA4LCAxMTgsIDU4LCAwLCAwLCAzMiwgMCwgNjUsIDEyLCAxMDYsIDM1LCAyOSwgNjUsIDEyLCAxMDYsIDQ3LCAxLCAwLCA1OCwgMCwgMCwgMzIsIDAsIDY1LCAxMywgMTA2LCAzNSwgMjksIDY1LCAxMiwgMTA2LCA0NywgMSwgMCwgNjUsIDgsIDExOCwgNTgsIDAsIDAsIDMyLCAwLCA2NSwgMTQsIDEwNiwgMzUsIDI5LCA2NSwgMTQsIDEwNiwgNDcsIDEsIDAsIDU4LCAwLCAwLCAzMiwgMCwgNjUsIDE1LCAxMDYsIDM1LCAyOSwgNjUsIDE0LCAxMDYsIDQ3LCAxLCAwLCA2NSwgOCwgMTE4LCA1OCwgMCwgMCwgNjUsIDEsIDM2LCAzNCwgMTEsIDExLCAwLCAzMiwgMCwgMzIsIDEsIDY1LCAxLCAxMTYsIDE2LCAzLCAxMSwgMzgsIDAsIDM1LCAyNSwgNjUsIDE2LCAxNiwgMTMsIDM1LCAyNywgNjUsIDEwLCAxNiwgMjIsIDM1LCAyOSwgNjUsIDEwLCAxNiwgMjIsIDM1LCAzMSwgNjUsIDgsIDE2LCAyMiwgNjUsIDAsIDM2LCAzMiwgNjUsIDAsIDM2LCAzMywgNjUsIDAsIDM2LCAzNCwgMTEsIDMzLCAxLCAxLCAxMjcsIDM1LCAyMywgMzMsIDAsIDM1LCAzNCwgNCwgNjQsIDY1LCAxNDQsIDIsIDY1LCAyMDgsIDIsIDY1LCAyMjYsIDMsIDY1LCA0LCAxNiwgMCwgMCwgMTEsIDMyLCAwLCAxNiwgMjEsIDE2LCAyMywgMTEsIDM5LCAxLCAxLCAxMjcsIDMsIDY0LCAzMiwgMCwgNjUsIDMyLCA3MywgNCwgNjQsIDMyLCAwLCAzNSwgNywgMTA2LCA2NSwgMCwgNTgsIDAsIDAsIDMyLCAwLCA2NSwgMSwgMTA2LCAzMywgMCwgMTIsIDEsIDExLCAxMSwgNjUsIDMyLCAxNiwgMTUsIDI2LCAxMSwgMTUyLCAyLCAxLCAxLCAxMjcsIDMsIDY0LCAzMiwgNCwgNjUsIDMyLCA3MiwgNCwgNjQsIDMyLCA0LCAzNSwgOSwgMTA2LCAzMiwgMCwgMzIsIDQsIDEwNiwgNDUsIDAsIDAsIDU4LCAwLCAwLCAzMiwgNCwgNjUsIDEsIDEwNiwgMzMsIDQsIDEyLCAxLCAxMSwgMTEsIDY1LCAwLCAzMywgNCwgMywgNjQsIDMyLCA0LCA2NSwgNCwgNzIsIDQsIDY0LCAzMiwgNCwgMzUsIDExLCAxMDYsIDY1LCAwLCA1OCwgMCwgMCwgMzIsIDQsIDY1LCAxLCAxMDYsIDMzLCA0LCAxMiwgMSwgMTEsIDExLCA2NSwgNCwgMzMsIDQsIDMsIDY0LCAzMiwgNCwgNjUsIDE2LCA3MiwgNCwgNjQsIDMyLCA0LCAzNSwgMTEsIDEwNiwgMzIsIDEsIDMyLCA0LCA2NSwgNCwgMTA3LCAxMDYsIDQ1LCAwLCAwLCA1OCwgMCwgMCwgMzIsIDQsIDY1LCAxLCAxMDYsIDMzLCA0LCAxMiwgMSwgMTEsIDExLCAxNiwgMjUsIDY1LCAwLCAzMywgNCwgMywgNjQsIDMyLCA0LCA2NSwgMzIsIDcyLCA0LCA2NCwgMzIsIDQsIDM1LCAyMSwgMTA2LCAzMiwgNCwgMzUsIDEzLCAxMDYsIDQ1LCAwLCAwLCA1OCwgMCwgMCwgMzIsIDQsIDY1LCAxLCAxMDYsIDMzLCA0LCAxMiwgMSwgMTEsIDExLCAzNSwgMjEsIDE2LCAxNiwgMzIsIDMsIDY1LCAwLCA3NSwgNCwgNjQsIDY1LCAwLCAzMywgNCwgMywgNjQsIDMyLCA0LCAzMiwgMywgNzMsIDQsIDY0LCAzMiwgNCwgMzUsIDIyLCAxMDYsIDMyLCAyLCAzMiwgNCwgMTA2LCA0NSwgMCwgMCwgNTgsIDAsIDAsIDMyLCA0LCA2NSwgMSwgMTA2LCAzMywgNCwgMTIsIDEsIDExLCAxMSwgMzIsIDMsIDE2LCAyMCwgMzIsIDMsIDY1LCAxNSwgMTEzLCA2NSwgMCwgNzUsIDQsIDY0LCA2NSwgMTYsIDMyLCAzLCA2NSwgMTUsIDExMywgMTA3LCAzNCwgMSwgNjUsIDAsIDc0LCA0LCA2NCwgNjUsIDAsIDMzLCAwLCAzLCA2NCwgMzIsIDAsIDMyLCAxLCA3MiwgNCwgNjQsIDMyLCAwLCAzNSwgMjIsIDEwNiwgNjUsIDAsIDU4LCAwLCAwLCAzMiwgMCwgNjUsIDEsIDEwNiwgMzMsIDAsIDEyLCAxLCAxMSwgMTEsIDMyLCAxLCAxNiwgMjAsIDExLCAxMSwgMTEsIDExLCA2NSwgMSwgMSwgMTI3LCAzLCA2NCwgMzIsIDIsIDMyLCAxLCA3MywgNCwgNjQsIDM1LCAyMiwgMzIsIDIsIDEwNiwgMzIsIDAsIDMyLCAyLCAxMDYsIDQ1LCAwLCAwLCA1OCwgMCwgMCwgMzUsIDcsIDMyLCAyLCAxMDYsIDMyLCAwLCAzMiwgMiwgMTA2LCA0NSwgMCwgMCwgNTgsIDAsIDAsIDMyLCAyLCA2NSwgMSwgMTA2LCAzMywgMiwgMTIsIDEsIDExLCAxMSwgMzIsIDEsIDE2LCAyMCwgMzIsIDEsIDE2LCAxNSwgMjYsIDExLCAyNywgMCwgMzIsIDAsIDMyLCAxLCA2NSwgMCwgMTYsIDEwLCAzMiwgMCwgMTczLCA2NiwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxNiwgMTI3LCAxNjcsIDMyLCAxLCA2NSwgNCwgMTYsIDEwLCAxMSwgODcsIDEsIDIsIDEyNywgMzIsIDAsIDY1LCAxNSwgMTEzLCA2NSwgMCwgNzUsIDQsIDY0LCA2NSwgMTYsIDMyLCAwLCA2NSwgMTUsIDExMywgMTA3LCAzNCwgMywgNjUsIDAsIDc0LCA0LCA2NCwgMywgNjQsIDMyLCAyLCAzMiwgMywgNzIsIDQsIDY0LCAzMiwgMiwgMzUsIDIyLCAxMDYsIDY1LCAwLCA1OCwgMCwgMCwgMzIsIDIsIDY1LCAxLCAxMDYsIDMzLCAyLCAxMiwgMSwgMTEsIDExLCAzMiwgMywgMTYsIDIwLCAxMSwgMTEsIDMyLCAxLCAzNSwgMjIsIDE2LCAyOCwgNjUsIDgsIDE2LCAyMCwgMzIsIDAsIDM1LCAyMiwgMTYsIDI4LCA2NSwgOCwgMTYsIDIwLCAxNiwgMjQsIDExLCAzNCwgMCwgMzIsIDAsIDQsIDY0LCAzNSwgMzgsIDM1LCA0MCwgMzUsIDQyLCAzMiwgNCwgMTYsIDI2LCAxMSwgMzUsIDQ0LCAzMiwgMiwgMTYsIDI3LCAzMiwgMSwgNCwgNjQsIDMyLCAzLCAzMiwgNCwgMTYsIDI5LCAxMSwgMTEsIDg5LCAxLCAxLCAxMjcsIDMsIDY0LCAzMiwgMiwgMzIsIDEsIDczLCA0LCA2NCwgMzUsIDcsIDMyLCAyLCAxMDYsIDMyLCAwLCAzMiwgMiwgMTA2LCA0NSwgMCwgMCwgNTgsIDAsIDAsIDMyLCAyLCA2NSwgMSwgMTA2LCAzMywgMiwgMTIsIDEsIDExLCAxMSwgMzIsIDEsIDE2LCAxNSwgMjYsIDY1LCAwLCAzMywgMiwgMywgNjQsIDMyLCAyLCAzMiwgMSwgNzMsIDQsIDY0LCAzNSwgMjIsIDMyLCAyLCAxMDYsIDMyLCAyLCAzNSwgMTMsIDEwNiwgNDUsIDAsIDAsIDU4LCAwLCAwLCAzMiwgMiwgNjUsIDEsIDEwNiwgMzMsIDIsIDEyLCAxLCAxMSwgMTEsIDMyLCAxLCAxNiwgMjAsIDExLCAzNCwgMCwgMzIsIDAsIDQsIDY0LCAzNSwgMzgsIDM1LCA0MCwgMzUsIDQyLCAzMiwgNCwgMTYsIDI2LCAxMSwgMzUsIDQ0LCAzMiwgMiwgMTYsIDMxLCAzMiwgMSwgNCwgNjQsIDMyLCAzLCAzMiwgNCwgMTYsIDI5LCAxMSwgMTEsIDgsIDAsIDE2LCA1LCAxNiwgOCwgMTYsIDksIDExLCAxMSwgMjM0LCAyLCA2LCAwLCA2NSwgMTYsIDExLCA0MywgMjgsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDI4LCAwLCAwLCAwLCA3MywgMCwgMTEwLCAwLCAxMTgsIDAsIDk3LCAwLCAxMDgsIDAsIDEwNSwgMCwgMTAwLCAwLCAzMiwgMCwgMTA4LCAwLCAxMDEsIDAsIDExMCwgMCwgMTAzLCAwLCAxMTYsIDAsIDEwNCwgMCwgNjUsIDE5MiwgMCwgMTEsIDUzLCAzOCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMzgsIDAsIDAsIDAsIDEyNiwgMCwgMTA4LCAwLCAxMDUsIDAsIDk4LCAwLCA0NywgMCwgOTcsIDAsIDExNCwgMCwgMTE0LCAwLCA5NywgMCwgMTIxLCAwLCA5OCwgMCwgMTE3LCAwLCAxMDIsIDAsIDEwMiwgMCwgMTAxLCAwLCAxMTQsIDAsIDQ2LCAwLCAxMTYsIDAsIDExNSwgMCwgNjUsIDEyOCwgMSwgMTEsIDYzLCA0OCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgNDgsIDAsIDAsIDAsIDY3LCAwLCAxMDQsIDAsIDk3LCAwLCA2NywgMCwgMTA0LCAwLCA5NywgMCwgNTgsIDAsIDMyLCAwLCA5OSwgMCwgMTExLCAwLCAxMTcsIDAsIDExMCwgMCwgMTE2LCAwLCAxMDEsIDAsIDExNCwgMCwgMzIsIDAsIDExMSwgMCwgMTE4LCAwLCAxMDEsIDAsIDExNCwgMCwgMTAyLCAwLCAxMDgsIDAsIDExMSwgMCwgMTE5LCAwLCA2NSwgMTkyLCAxLCAxMSwgNTUsIDQwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCA0MCwgMCwgMCwgMCwgOTcsIDAsIDExNSwgMCwgMTE1LCAwLCAxMDEsIDAsIDEwOSwgMCwgOTgsIDAsIDEwOCwgMCwgMTIxLCAwLCA0NywgMCwgOTksIDAsIDEwNCwgMCwgOTcsIDAsIDk5LCAwLCAxMDQsIDAsIDk3LCAwLCA1MCwgMCwgNDgsIDAsIDQ2LCAwLCAxMTYsIDAsIDExNSwgMCwgNjUsIDEyOCwgMiwgMTEsIDU3LCA0MiwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDgwLCAwLCAxMTEsIDAsIDEwOCwgMCwgMTIxLCAwLCA0OSwgMCwgNTEsIDAsIDQ4LCAwLCA1MywgMCwgMzIsIDAsIDExOSwgMCwgOTcsIDAsIDExNSwgMCwgMzIsIDAsIDEwMiwgMCwgMTA1LCAwLCAxMTAsIDAsIDEwNSwgMCwgMTE1LCAwLCAxMDQsIDAsIDEwMSwgMCwgMTAwLCAwLCA2NSwgMTkyLCAyLCAxMSwgNTUsIDQwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCA0MCwgMCwgMCwgMCwgOTcsIDAsIDExNSwgMCwgMTE1LCAwLCAxMDEsIDAsIDEwOSwgMCwgOTgsIDAsIDEwOCwgMCwgMTIxLCAwLCA0NywgMCwgMTEyLCAwLCAxMTEsIDAsIDEwOCwgMCwgMTIxLCAwLCA0OSwgMCwgNTEsIDAsIDQ4LCAwLCA1MywgMCwgNDYsIDAsIDExNiwgMCwgMTE1XSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13YXNtQ29kZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJ3YXNtQ29kZSIsIlVpbnQ4QXJyYXkiLCJmcm9tIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasmCode.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-sha256/lib/hashObject.js":
/*!*************************************************************!*\
!*** ./node_modules/@chainsafe/as-sha256/lib/hashObject.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.byteArrayToHashObject = exports.hashObjectToByteArray = void 0;\n/**\n * Pass 8 numbers in an object and set that to inputArray.\n * This function contains multiple same procedures but we intentionally\n * do it step by step to improve performance a bit.\n **/ function hashObjectToByteArray(obj, byteArr, offset) {\n let tmp = obj.h0;\n byteArr[0 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[1 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[2 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[3 + offset] = tmp & 0xff;\n tmp = obj.h1;\n byteArr[4 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[5 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[6 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[7 + offset] = tmp & 0xff;\n tmp = obj.h2;\n byteArr[8 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[9 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[10 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[11 + offset] = tmp & 0xff;\n tmp = obj.h3;\n byteArr[12 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[13 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[14 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[15 + offset] = tmp & 0xff;\n tmp = obj.h4;\n byteArr[16 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[17 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[18 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[19 + offset] = tmp & 0xff;\n tmp = obj.h5;\n byteArr[20 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[21 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[22 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[23 + offset] = tmp & 0xff;\n tmp = obj.h6;\n byteArr[24 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[25 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[26 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[27 + offset] = tmp & 0xff;\n tmp = obj.h7;\n byteArr[28 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[29 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[30 + offset] = tmp & 0xff;\n tmp = tmp >> 8;\n byteArr[31 + offset] = tmp & 0xff;\n}\nexports.hashObjectToByteArray = hashObjectToByteArray;\n/**\n * Parse outputArray into an object of 8 numbers.\n * This is the order that makes Uint32Array the same to Uint8Array\n * This function contains multiple same procedures but we intentionally\n * do it step by step to improve performance a bit.\n **/ function byteArrayToHashObject(byteArr) {\n let tmp = 0;\n tmp |= byteArr[3] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[2] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[1] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[0] & 0xff;\n const h0 = tmp;\n tmp = 0;\n tmp |= byteArr[7] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[6] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[5] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[4] & 0xff;\n const h1 = tmp;\n tmp = 0;\n tmp |= byteArr[11] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[10] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[9] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[8] & 0xff;\n const h2 = tmp;\n tmp = 0;\n tmp |= byteArr[15] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[14] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[13] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[12] & 0xff;\n const h3 = tmp;\n tmp = 0;\n tmp |= byteArr[19] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[18] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[17] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[16] & 0xff;\n const h4 = tmp;\n tmp = 0;\n tmp |= byteArr[23] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[22] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[21] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[20] & 0xff;\n const h5 = tmp;\n tmp = 0;\n tmp |= byteArr[27] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[26] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[25] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[24] & 0xff;\n const h6 = tmp;\n tmp = 0;\n tmp |= byteArr[31] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[30] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[29] & 0xff;\n tmp = tmp << 8;\n tmp |= byteArr[28] & 0xff;\n const h7 = tmp;\n return {\n h0,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n h7\n };\n}\nexports.byteArrayToHashObject = byteArrayToHashObject; //# sourceMappingURL=hashObject.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1zaGEyNTYvbGliL2hhc2hPYmplY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQUVHLE9BQU87QUFBSyxDQUFDLEVBQUM7QUFDN0RELDZCQUE2QixHQUFHQSw2QkFBNkIsR0FBRyxLQUFLO0FBQ3JFOzs7O0VBSUUsR0FDRixTQUFTRyxzQkFBc0JDLEdBQUcsRUFBRUMsT0FBTyxFQUFFQyxNQUFNO0lBQy9DLElBQUlDLE1BQU1ILElBQUlJLEVBQUU7SUFDaEJILE9BQU8sQ0FBQyxJQUFJQyxPQUFPLEdBQUdDLE1BQU07SUFDNUJBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLElBQUlDLE9BQU8sR0FBR0MsTUFBTTtJQUM1QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsSUFBSUMsT0FBTyxHQUFHQyxNQUFNO0lBQzVCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxJQUFJQyxPQUFPLEdBQUdDLE1BQU07SUFDNUJBLE1BQU1ILElBQUlLLEVBQUU7SUFDWkosT0FBTyxDQUFDLElBQUlDLE9BQU8sR0FBR0MsTUFBTTtJQUM1QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsSUFBSUMsT0FBTyxHQUFHQyxNQUFNO0lBQzVCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxJQUFJQyxPQUFPLEdBQUdDLE1BQU07SUFDNUJBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLElBQUlDLE9BQU8sR0FBR0MsTUFBTTtJQUM1QkEsTUFBTUgsSUFBSU0sRUFBRTtJQUNaTCxPQUFPLENBQUMsSUFBSUMsT0FBTyxHQUFHQyxNQUFNO0lBQzVCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxJQUFJQyxPQUFPLEdBQUdDLE1BQU07SUFDNUJBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtJQUM3QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsS0FBS0MsT0FBTyxHQUFHQyxNQUFNO0lBQzdCQSxNQUFNSCxJQUFJTyxFQUFFO0lBQ1pOLE9BQU8sQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07SUFDN0JBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtJQUM3QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsS0FBS0MsT0FBTyxHQUFHQyxNQUFNO0lBQzdCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07SUFDN0JBLE1BQU1ILElBQUlRLEVBQUU7SUFDWlAsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtJQUM3QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsS0FBS0MsT0FBTyxHQUFHQyxNQUFNO0lBQzdCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07SUFDN0JBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtJQUM3QkEsTUFBTUgsSUFBSVMsRUFBRTtJQUNaUixPQUFPLENBQUMsS0FBS0MsT0FBTyxHQUFHQyxNQUFNO0lBQzdCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07SUFDN0JBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtJQUM3QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsS0FBS0MsT0FBTyxHQUFHQyxNQUFNO0lBQzdCQSxNQUFNSCxJQUFJVSxFQUFFO0lBQ1pULE9BQU8sQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07SUFDN0JBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtJQUM3QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsS0FBS0MsT0FBTyxHQUFHQyxNQUFNO0lBQzdCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07SUFDN0JBLE1BQU1ILElBQUlXLEVBQUU7SUFDWlYsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtJQUM3QkEsTUFBTUEsT0FBTztJQUNiRixPQUFPLENBQUMsS0FBS0MsT0FBTyxHQUFHQyxNQUFNO0lBQzdCQSxNQUFNQSxPQUFPO0lBQ2JGLE9BQU8sQ0FBQyxLQUFLQyxPQUFPLEdBQUdDLE1BQU07SUFDN0JBLE1BQU1BLE9BQU87SUFDYkYsT0FBTyxDQUFDLEtBQUtDLE9BQU8sR0FBR0MsTUFBTTtBQUNqQztBQUNBUCw2QkFBNkIsR0FBR0c7QUFDaEM7Ozs7O0VBS0UsR0FDRixTQUFTRCxzQkFBc0JHLE9BQU87SUFDbEMsSUFBSUUsTUFBTTtJQUNWQSxPQUFPRixPQUFPLENBQUMsRUFBRSxHQUFHO0lBQ3BCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxFQUFFLEdBQUc7SUFDcEJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEVBQUUsR0FBRztJQUNwQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsRUFBRSxHQUFHO0lBQ3BCLE1BQU1HLEtBQUtEO0lBQ1hBLE1BQU07SUFDTkEsT0FBT0YsT0FBTyxDQUFDLEVBQUUsR0FBRztJQUNwQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsRUFBRSxHQUFHO0lBQ3BCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxFQUFFLEdBQUc7SUFDcEJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEVBQUUsR0FBRztJQUNwQixNQUFNSSxLQUFLRjtJQUNYQSxNQUFNO0lBQ05BLE9BQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUc7SUFDckJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsRUFBRSxHQUFHO0lBQ3BCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxFQUFFLEdBQUc7SUFDcEIsTUFBTUssS0FBS0g7SUFDWEEsTUFBTTtJQUNOQSxPQUFPRixPQUFPLENBQUMsR0FBRyxHQUFHO0lBQ3JCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUc7SUFDckJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsR0FBRyxHQUFHO0lBQ3JCLE1BQU1NLEtBQUtKO0lBQ1hBLE1BQU07SUFDTkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsR0FBRyxHQUFHO0lBQ3JCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUc7SUFDckJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQixNQUFNTyxLQUFLTDtJQUNYQSxNQUFNO0lBQ05BLE9BQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUc7SUFDckJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsR0FBRyxHQUFHO0lBQ3JCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUc7SUFDckIsTUFBTVEsS0FBS047SUFDWEEsTUFBTTtJQUNOQSxPQUFPRixPQUFPLENBQUMsR0FBRyxHQUFHO0lBQ3JCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUc7SUFDckJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsR0FBRyxHQUFHO0lBQ3JCLE1BQU1TLEtBQUtQO0lBQ1hBLE1BQU07SUFDTkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQkUsTUFBTUEsT0FBTztJQUNiQSxPQUFPRixPQUFPLENBQUMsR0FBRyxHQUFHO0lBQ3JCRSxNQUFNQSxPQUFPO0lBQ2JBLE9BQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUc7SUFDckJFLE1BQU1BLE9BQU87SUFDYkEsT0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNyQixNQUFNVSxLQUFLUjtJQUNYLE9BQU87UUFDSEM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7SUFDSjtBQUNKO0FBQ0FmLDZCQUE2QixHQUFHRSx1QkFDaEMsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1zaGEyNTYvbGliL2hhc2hPYmplY3QuanM/NDIwZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuYnl0ZUFycmF5VG9IYXNoT2JqZWN0ID0gZXhwb3J0cy5oYXNoT2JqZWN0VG9CeXRlQXJyYXkgPSB2b2lkIDA7XG4vKipcbiAqIFBhc3MgOCBudW1iZXJzIGluIGFuIG9iamVjdCBhbmQgc2V0IHRoYXQgdG8gaW5wdXRBcnJheS5cbiAqIFRoaXMgZnVuY3Rpb24gY29udGFpbnMgbXVsdGlwbGUgc2FtZSBwcm9jZWR1cmVzIGJ1dCB3ZSBpbnRlbnRpb25hbGx5XG4gKiBkbyBpdCBzdGVwIGJ5IHN0ZXAgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhIGJpdC5cbiAqKi9cbmZ1bmN0aW9uIGhhc2hPYmplY3RUb0J5dGVBcnJheShvYmosIGJ5dGVBcnIsIG9mZnNldCkge1xuICAgIGxldCB0bXAgPSBvYmouaDA7XG4gICAgYnl0ZUFyclswICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclsxICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclsyICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclszICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gb2JqLmgxO1xuICAgIGJ5dGVBcnJbNCArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbNSArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbNiArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbNyArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IG9iai5oMjtcbiAgICBieXRlQXJyWzggKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPj4gODtcbiAgICBieXRlQXJyWzkgKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPj4gODtcbiAgICBieXRlQXJyWzEwICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclsxMSArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IG9iai5oMztcbiAgICBieXRlQXJyWzEyICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclsxMyArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbMTQgKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPj4gODtcbiAgICBieXRlQXJyWzE1ICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gb2JqLmg0O1xuICAgIGJ5dGVBcnJbMTYgKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPj4gODtcbiAgICBieXRlQXJyWzE3ICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclsxOCArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbMTkgKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSBvYmouaDU7XG4gICAgYnl0ZUFyclsyMCArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbMjEgKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPj4gODtcbiAgICBieXRlQXJyWzIyICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclsyMyArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IG9iai5oNjtcbiAgICBieXRlQXJyWzI0ICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclsyNSArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbMjYgKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPj4gODtcbiAgICBieXRlQXJyWzI3ICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gb2JqLmg3O1xuICAgIGJ5dGVBcnJbMjggKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPj4gODtcbiAgICBieXRlQXJyWzI5ICsgb2Zmc2V0XSA9IHRtcCAmIDB4ZmY7XG4gICAgdG1wID0gdG1wID4+IDg7XG4gICAgYnl0ZUFyclszMCArIG9mZnNldF0gPSB0bXAgJiAweGZmO1xuICAgIHRtcCA9IHRtcCA+PiA4O1xuICAgIGJ5dGVBcnJbMzEgKyBvZmZzZXRdID0gdG1wICYgMHhmZjtcbn1cbmV4cG9ydHMuaGFzaE9iamVjdFRvQnl0ZUFycmF5ID0gaGFzaE9iamVjdFRvQnl0ZUFycmF5O1xuLyoqXG4gKiBQYXJzZSBvdXRwdXRBcnJheSBpbnRvIGFuIG9iamVjdCBvZiA4IG51bWJlcnMuXG4gKiBUaGlzIGlzIHRoZSBvcmRlciB0aGF0IG1ha2VzIFVpbnQzMkFycmF5IHRoZSBzYW1lIHRvIFVpbnQ4QXJyYXlcbiAqIFRoaXMgZnVuY3Rpb24gY29udGFpbnMgbXVsdGlwbGUgc2FtZSBwcm9jZWR1cmVzIGJ1dCB3ZSBpbnRlbnRpb25hbGx5XG4gKiBkbyBpdCBzdGVwIGJ5IHN0ZXAgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhIGJpdC5cbiAqKi9cbmZ1bmN0aW9uIGJ5dGVBcnJheVRvSGFzaE9iamVjdChieXRlQXJyKSB7XG4gICAgbGV0IHRtcCA9IDA7XG4gICAgdG1wIHw9IGJ5dGVBcnJbM10gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzJdICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFyclsxXSAmIDB4ZmY7XG4gICAgdG1wID0gdG1wIDw8IDg7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMF0gJiAweGZmO1xuICAgIGNvbnN0IGgwID0gdG1wO1xuICAgIHRtcCA9IDA7XG4gICAgdG1wIHw9IGJ5dGVBcnJbN10gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzZdICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFycls1XSAmIDB4ZmY7XG4gICAgdG1wID0gdG1wIDw8IDg7XG4gICAgdG1wIHw9IGJ5dGVBcnJbNF0gJiAweGZmO1xuICAgIGNvbnN0IGgxID0gdG1wO1xuICAgIHRtcCA9IDA7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMTFdICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFyclsxMF0gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzldICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFycls4XSAmIDB4ZmY7XG4gICAgY29uc3QgaDIgPSB0bXA7XG4gICAgdG1wID0gMDtcbiAgICB0bXAgfD0gYnl0ZUFyclsxNV0gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzE0XSAmIDB4ZmY7XG4gICAgdG1wID0gdG1wIDw8IDg7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMTNdICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFyclsxMl0gJiAweGZmO1xuICAgIGNvbnN0IGgzID0gdG1wO1xuICAgIHRtcCA9IDA7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMTldICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFyclsxOF0gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzE3XSAmIDB4ZmY7XG4gICAgdG1wID0gdG1wIDw8IDg7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMTZdICYgMHhmZjtcbiAgICBjb25zdCBoNCA9IHRtcDtcbiAgICB0bXAgPSAwO1xuICAgIHRtcCB8PSBieXRlQXJyWzIzXSAmIDB4ZmY7XG4gICAgdG1wID0gdG1wIDw8IDg7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMjJdICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFyclsyMV0gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzIwXSAmIDB4ZmY7XG4gICAgY29uc3QgaDUgPSB0bXA7XG4gICAgdG1wID0gMDtcbiAgICB0bXAgfD0gYnl0ZUFyclsyN10gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzI2XSAmIDB4ZmY7XG4gICAgdG1wID0gdG1wIDw8IDg7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMjVdICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFyclsyNF0gJiAweGZmO1xuICAgIGNvbnN0IGg2ID0gdG1wO1xuICAgIHRtcCA9IDA7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMzFdICYgMHhmZjtcbiAgICB0bXAgPSB0bXAgPDwgODtcbiAgICB0bXAgfD0gYnl0ZUFyclszMF0gJiAweGZmO1xuICAgIHRtcCA9IHRtcCA8PCA4O1xuICAgIHRtcCB8PSBieXRlQXJyWzI5XSAmIDB4ZmY7XG4gICAgdG1wID0gdG1wIDw8IDg7XG4gICAgdG1wIHw9IGJ5dGVBcnJbMjhdICYgMHhmZjtcbiAgICBjb25zdCBoNyA9IHRtcDtcbiAgICByZXR1cm4ge1xuICAgICAgICBoMCxcbiAgICAgICAgaDEsXG4gICAgICAgIGgyLFxuICAgICAgICBoMyxcbiAgICAgICAgaDQsXG4gICAgICAgIGg1LFxuICAgICAgICBoNixcbiAgICAgICAgaDcsXG4gICAgfTtcbn1cbmV4cG9ydHMuYnl0ZUFycmF5VG9IYXNoT2JqZWN0ID0gYnl0ZUFycmF5VG9IYXNoT2JqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzaE9iamVjdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJieXRlQXJyYXlUb0hhc2hPYmplY3QiLCJoYXNoT2JqZWN0VG9CeXRlQXJyYXkiLCJvYmoiLCJieXRlQXJyIiwib2Zmc2V0IiwidG1wIiwiaDAiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoNyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-sha256/lib/hashObject.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-sha256/lib/index.js":
/*!********************************************************!*\
!*** ./node_modules/@chainsafe/as-sha256/lib/index.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nvar __importDefault = (void 0) && (void 0).__importDefault || function(mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.digest64HashObjects = exports.digest2Bytes32 = exports.digest64 = exports.digest = exports.SHA256 = exports.hashObjectToByteArray = exports.byteArrayToHashObject = void 0;\nconst wasm_1 = __webpack_require__(/*! ./wasm */ \"(ssr)/./node_modules/@chainsafe/as-sha256/lib/wasm.js\");\nconst hashObject_1 = __webpack_require__(/*! ./hashObject */ \"(ssr)/./node_modules/@chainsafe/as-sha256/lib/hashObject.js\");\nObject.defineProperty(exports, \"byteArrayToHashObject\", ({\n enumerable: true,\n get: function() {\n return hashObject_1.byteArrayToHashObject;\n }\n}));\nObject.defineProperty(exports, \"hashObjectToByteArray\", ({\n enumerable: true,\n get: function() {\n return hashObject_1.hashObjectToByteArray;\n }\n}));\nconst sha256_1 = __importDefault(__webpack_require__(/*! ./sha256 */ \"(ssr)/./node_modules/@chainsafe/as-sha256/lib/sha256.js\"));\nexports.SHA256 = sha256_1.default;\nconst ctx = wasm_1.newInstance();\nconst wasmInputValue = ctx.input.value;\nconst wasmOutputValue = ctx.output.value;\nconst inputUint8Array = new Uint8Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH);\nconst outputUint8Array = new Uint8Array(ctx.memory.buffer, wasmOutputValue, 32);\nconst inputUint32Array = new Uint32Array(ctx.memory.buffer, wasmInputValue, ctx.INPUT_LENGTH);\nfunction digest(data) {\n if (data.length === 64) {\n return digest64(data);\n }\n if (data.length <= ctx.INPUT_LENGTH) {\n inputUint8Array.set(data);\n ctx.digest(data.length);\n const output = new Uint8Array(32);\n output.set(outputUint8Array);\n return output;\n }\n ctx.init();\n update(data);\n return final();\n}\nexports.digest = digest;\nfunction digest64(data) {\n if (data.length === 64) {\n inputUint8Array.set(data);\n ctx.digest64(wasmInputValue, wasmOutputValue);\n const output = new Uint8Array(32);\n output.set(outputUint8Array);\n return output;\n }\n throw new Error(\"InvalidLengthForDigest64\");\n}\nexports.digest64 = digest64;\nfunction digest2Bytes32(bytes1, bytes2) {\n if (bytes1.length === 32 && bytes2.length === 32) {\n inputUint8Array.set(bytes1);\n inputUint8Array.set(bytes2, 32);\n ctx.digest64(wasmInputValue, wasmOutputValue);\n const output = new Uint8Array(32);\n output.set(outputUint8Array);\n return output;\n }\n throw new Error(\"InvalidLengthForDigest64\");\n}\nexports.digest2Bytes32 = digest2Bytes32;\n/**\n * Digest 2 objects, each has 8 properties from h0 to h7.\n * The performance is a little bit better than digest64 due to the use of Uint32Array\n * and the memory is a little bit better than digest64 due to no temporary Uint8Array.\n * @returns\n */ function digest64HashObjects(obj1, obj2) {\n // TODO: expect obj1 and obj2 as HashObject\n inputUint32Array[0] = obj1.h0;\n inputUint32Array[1] = obj1.h1;\n inputUint32Array[2] = obj1.h2;\n inputUint32Array[3] = obj1.h3;\n inputUint32Array[4] = obj1.h4;\n inputUint32Array[5] = obj1.h5;\n inputUint32Array[6] = obj1.h6;\n inputUint32Array[7] = obj1.h7;\n inputUint32Array[8] = obj2.h0;\n inputUint32Array[9] = obj2.h1;\n inputUint32Array[10] = obj2.h2;\n inputUint32Array[11] = obj2.h3;\n inputUint32Array[12] = obj2.h4;\n inputUint32Array[13] = obj2.h5;\n inputUint32Array[14] = obj2.h6;\n inputUint32Array[15] = obj2.h7;\n ctx.digest64(wasmInputValue, wasmOutputValue);\n // extracting numbers from Uint32Array causes more memory\n return hashObject_1.byteArrayToHashObject(outputUint8Array);\n}\nexports.digest64HashObjects = digest64HashObjects;\nfunction update(data) {\n const INPUT_LENGTH = ctx.INPUT_LENGTH;\n if (data.length > INPUT_LENGTH) {\n for(let i = 0; i < data.length; i += INPUT_LENGTH){\n const sliced = data.slice(i, i + INPUT_LENGTH);\n inputUint8Array.set(sliced);\n ctx.update(wasmInputValue, sliced.length);\n }\n } else {\n inputUint8Array.set(data);\n ctx.update(wasmInputValue, data.length);\n }\n}\nfunction final() {\n ctx.final(wasmOutputValue);\n const output = new Uint8Array(32);\n output.set(outputUint8Array);\n return output;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1zaGEyNTYvbGliL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsSUFBSUEsa0JBQWtCLENBQUMsTUFBRyxLQUFLLE9BQUcsRUFBRUEsZUFBZSxJQUFLLFNBQVVDLEdBQUc7SUFDakUsT0FBTyxPQUFRQSxJQUFJQyxVQUFVLEdBQUlELE1BQU07UUFBRSxXQUFXQTtJQUFJO0FBQzVEO0FBQ0FFLDhDQUE2QztJQUFFRyxPQUFPO0FBQUssQ0FBQyxFQUFDO0FBQzdERCwyQkFBMkIsR0FBR0Esc0JBQXNCLEdBQUdBLGdCQUFnQixHQUFHQSxjQUFjLEdBQUdBLGNBQWMsR0FBR0EsNkJBQTZCLEdBQUdBLDZCQUE2QixHQUFHLEtBQUs7QUFDakwsTUFBTVMsU0FBU0MsbUJBQU9BLENBQUMscUVBQVE7QUFDL0IsTUFBTUMsZUFBZUQsbUJBQU9BLENBQUMsaUZBQWM7QUFDM0NaLHlEQUF3RDtJQUFFYyxZQUFZO0lBQU1DLEtBQUs7UUFBYyxPQUFPRixhQUFhSCxxQkFBcUI7SUFBRTtBQUFFLENBQUMsRUFBQztBQUM5SVYseURBQXdEO0lBQUVjLFlBQVk7SUFBTUMsS0FBSztRQUFjLE9BQU9GLGFBQWFKLHFCQUFxQjtJQUFFO0FBQUUsQ0FBQyxFQUFDO0FBQzlJLE1BQU1PLFdBQVduQixnQkFBZ0JlLG1CQUFPQSxDQUFDLHlFQUFVO0FBQ25EVixjQUFjLEdBQUdjLFNBQVNDLE9BQU87QUFDakMsTUFBTUMsTUFBTVAsT0FBT1EsV0FBVztBQUM5QixNQUFNQyxpQkFBaUJGLElBQUlHLEtBQUssQ0FBQ2xCLEtBQUs7QUFDdEMsTUFBTW1CLGtCQUFrQkosSUFBSUssTUFBTSxDQUFDcEIsS0FBSztBQUN4QyxNQUFNcUIsa0JBQWtCLElBQUlDLFdBQVdQLElBQUlRLE1BQU0sQ0FBQ0MsTUFBTSxFQUFFUCxnQkFBZ0JGLElBQUlVLFlBQVk7QUFDMUYsTUFBTUMsbUJBQW1CLElBQUlKLFdBQVdQLElBQUlRLE1BQU0s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LElBQUk7SUFDaEIsTUFBTUosZUFBZVYsSUFBSVUsWUFBWTtJQUNyQyxJQUFJSSxLQUFLQyxNQUFNLEdBQUdMLGNBQWM7UUFDNUIsSUFBSyxJQUFJdUIsSUFBSSxHQUFHQSxJQUFJbkIsS0FBS0MsTUFBTSxFQUFFa0IsS0FBS3ZCLGFBQWM7WUFDaEQsTUFBTXdCLFNBQVNwQixLQUFLcUIsS0FBSyxDQUFDRixHQUFHQSxJQUFJdkI7WUFDakNKLGdCQUFnQlUsR0FBRyxDQUFDa0I7WUFDcEJsQyxJQUFJa0IsTUFBTSxDQUFDaEIsZ0JBQWdCZ0MsT0FBT25CLE1BQU07UUFDNUM7SUFDSixPQUNLO1FBQ0RULGdCQUFnQlUsR0FBRyxDQUFDRjtRQUNwQmQsSUFBSWtCLE1BQU0sQ0FBQ2hCLGdCQUFnQlksS0FBS0MsTUFBTTtJQUMxQztBQUNKO0FBQ0EsU0FBU0k7SUFDTG5CLElBQUltQixLQUFLLENBQUNmO0lBQ1YsTUFBTUMsU0FBUyxJQUFJRSxXQUFXO0lBQzlCRixPQUFPVyxHQUFHLENBQUNMO0lBQ1gsT0FBT047QUFDWCxFQUNBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvYXMtc2hhMjU2L2xpYi9pbmRleC5qcz9jZjEwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kaWdlc3Q2NEhhc2hPYmplY3RzID0gZXhwb3J0cy5kaWdlc3QyQnl0ZXMzMiA9IGV4cG9ydHMuZGlnZXN0NjQgPSBleHBvcnRzLmRpZ2VzdCA9IGV4cG9ydHMuU0hBMjU2ID0gZXhwb3J0cy5oYXNoT2JqZWN0VG9CeXRlQXJyYXkgPSBleHBvcnRzLmJ5dGVBcnJheVRvSGFzaE9iamVjdCA9IHZvaWQgMDtcbmNvbnN0IHdhc21fMSA9IHJlcXVpcmUoXCIuL3dhc21cIik7XG5jb25zdCBoYXNoT2JqZWN0XzEgPSByZXF1aXJlKFwiLi9oYXNoT2JqZWN0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYnl0ZUFycmF5VG9IYXNoT2JqZWN0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBoYXNoT2JqZWN0XzEuYnl0ZUFycmF5VG9IYXNoT2JqZWN0OyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzaE9iamVjdFRvQnl0ZUFycmF5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBoYXNoT2JqZWN0XzEuaGFzaE9iamVjdFRvQnl0ZUFycmF5OyB9IH0pO1xuY29uc3Qgc2hhMjU2XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vc2hhMjU2XCIpKTtcbmV4cG9ydHMuU0hBMjU2ID0gc2hhMjU2XzEuZGVmYXVsdDtcbmNvbnN0IGN0eCA9IHdhc21fMS5uZXdJbnN0YW5jZSgpO1xuY29uc3Qgd2FzbUlucHV0VmFsdWUgPSBjdHguaW5wdXQudmFsdWU7XG5jb25zdCB3YXNtT3V0cHV0VmFsdWUgPSBjdHgub3V0cHV0LnZhbHVlO1xuY29uc3QgaW5wdXRVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoY3R4Lm1lbW9yeS5idWZmZXIsIHdhc21JbnB1dFZhbHVlLCBjdHguSU5QVVRfTEVOR1RIKTtcbmNvbnN0IG91dHB1dFVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShjdHgubWVtb3J5LmJ1ZmZlciwgd2FzbU91dHB1dFZhbHVlLCAzMik7XG5jb25zdCBpbnB1dFVpbnQzMkFycmF5ID0gbmV3IFVpbnQzMkFycmF5KGN0eC5tZW1vcnkuYnVmZmVyLCB3YXNtSW5wdXRWYWx1ZSwgY3R4LklOUFVUX0xFTkdUSCk7XG5mdW5jdGlvbiBkaWdlc3QoZGF0YSkge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gNjQpIHtcbiAgICAgICAgcmV0dXJuIGRpZ2VzdDY0KGRhdGEpO1xuICAgIH1cbiAgICBpZiAoZGF0YS5sZW5ndGggPD0gY3R4LklOUFVUX0xFTkdUSCkge1xuICAgICAgICBpbnB1dFVpbnQ4QXJyYXkuc2V0KGRhdGEpO1xuICAgICAgICBjdHguZGlnZXN0KGRhdGEubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICBvdXRwdXQuc2V0KG91dHB1dFVpbnQ4QXJyYXkpO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICBjdHguaW5pdCgpO1xuICAgIHVwZGF0ZShkYXRhKTtcbiAgICByZXR1cm4gZmluYWwoKTtcbn1cbmV4cG9ydHMuZGlnZXN0ID0gZGlnZXN0O1xuZnVuY3Rpb24gZGlnZXN0NjQoZGF0YSkge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gNjQpIHtcbiAgICAgICAgaW5wdXRVaW50OEFycmF5LnNldChkYXRhKTtcbiAgICAgICAgY3R4LmRpZ2VzdDY0KHdhc21JbnB1dFZhbHVlLCB3YXNtT3V0cHV0VmFsdWUpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgICAgIG91dHB1dC5zZXQob3V0cHV0VWludDhBcnJheSk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRMZW5ndGhGb3JEaWdlc3Q2NFwiKTtcbn1cbmV4cG9ydHMuZGlnZXN0NjQgPSBkaWdlc3Q2NDtcbmZ1bmN0aW9uIGRpZ2VzdDJCeXRlczMyKGJ5dGVzMSwgYnl0ZXMyKSB7XG4gICAgaWYgKGJ5dGVzMS5sZW5ndGggPT09IDMyICYmIGJ5dGVzMi5sZW5ndGggPT09IDMyKSB7XG4gICAgICAgIGlucHV0VWludDhBcnJheS5zZXQoYnl0ZXMxKTtcbiAgICAgICAgaW5wdXRVaW50OEFycmF5LnNldChieXRlczIsIDMyKTtcbiAgICAgICAgY3R4LmRpZ2VzdDY0KHdhc21JbnB1dFZhbHVlLCB3YXNtT3V0cHV0VmFsdWUpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgICAgIG91dHB1dC5zZXQob3V0cHV0VWludDhBcnJheSk7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRMZW5ndGhGb3JEaWdlc3Q2NFwiKTtcbn1cbmV4cG9ydHMuZGlnZXN0MkJ5dGVzMzIgPSBkaWdlc3QyQnl0ZXMzMjtcbi8qKlxuICogRGlnZXN0IDIgb2JqZWN0cywgZWFjaCBoYXMgOCBwcm9wZXJ0aWVzIGZyb20gaDAgdG8gaDcuXG4gKiBUaGUgcGVyZm9ybWFuY2UgaXMgYSBsaXR0bGUgYml0IGJldHRlciB0aGFuIGRpZ2VzdDY0IGR1ZSB0byB0aGUgdXNlIG9mIFVpbnQzMkFycmF5XG4gKiBhbmQgdGhlIG1lbW9yeSBpcyBhIGxpdHRsZSBiaXQgYmV0dGVyIHRoYW4gZGlnZXN0NjQgZHVlIHRvIG5vIHRlbXBvcmFyeSBVaW50OEFycmF5LlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gZGlnZXN0NjRIYXNoT2JqZWN0cyhvYmoxLCBvYmoyKSB7XG4gICAgLy8gVE9ETzogZXhwZWN0IG9iajEgYW5kIG9iajIgYXMgSGFzaE9iamVjdFxuICAgIGlucHV0VWludDMyQXJyYXlbMF0gPSBvYmoxLmgwO1xuICAgIGlucHV0VWludDMyQXJyYXlbMV0gPSBvYmoxLmgxO1xuICAgIGlucHV0VWludDMyQXJyYXlbMl0gPSBvYmoxLmgyO1xuICAgIGlucHV0VWludDMyQXJyYXlbM10gPSBvYmoxLmgzO1xuICAgIGlucHV0VWludDMyQXJyYXlbNF0gPSBvYmoxLmg0O1xuICAgIGlucHV0VWludDMyQXJyYXlbNV0gPSBvYmoxLmg1O1xuICAgIGlucHV0VWludDMyQXJyYXlbNl0gPSBvYmoxLmg2O1xuICAgIGlucHV0VWludDMyQXJyYXlbN10gPSBvYmoxLmg3O1xuICAgIGlucHV0VWludDMyQXJyYXlbOF0gPSBvYmoyLmgwO1xuICAgIGlucHV0VWludDMyQXJyYXlbOV0gPSBvYmoyLmgxO1xuICAgIGlucHV0VWludDMyQXJyYXlbMTBdID0gb2JqMi5oMjtcbiAgICBpbnB1dFVpbnQzMkFycmF5WzExXSA9IG9iajIuaDM7XG4gICAgaW5wdXRVaW50MzJBcnJheVsxMl0gPSBvYmoyLmg0O1xuICAgIGlucHV0VWludDMyQXJyYXlbMTNdID0gb2JqMi5oNTtcbiAgICBpbnB1dFVpbnQzMkFycmF5WzE0XSA9IG9iajIuaDY7XG4gICAgaW5wdXRVaW50MzJBcnJheVsxNV0gPSBvYmoyLmg3O1xuICAgIGN0eC5kaWdlc3Q2NCh3YXNtSW5wdXRWYWx1ZSwgd2FzbU91dHB1dFZhbHVlKTtcbiAgICAvLyBleHRyYWN0aW5nIG51bWJlcnMgZnJvbSBVaW50MzJBcnJheSBjYXVzZXMgbW9yZSBtZW1vcnlcbiAgICByZXR1cm4gaGFzaE9iamVjdF8xLmJ5dGVBcnJheVRvSGFzaE9iamVjdChvdXRwdXRVaW50OEFycmF5KTtcbn1cbmV4cG9ydHMuZGlnZXN0NjRIYXNoT2JqZWN0cyA9IGRpZ2VzdDY0SGFzaE9iamVjdHM7XG5mdW5jdGlvbiB1cGRhdGUoZGF0YSkge1xuICAgIGNvbnN0IElOUFVUX0xFTkdUSCA9IGN0eC5JTlBVVF9MRU5HVEg7XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gSU5QVVRfTEVOR1RIKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gSU5QVVRfTEVOR1RIKSB7XG4gICAgICAgICAgICBjb25zdCBzbGljZWQgPSBkYXRhLnNsaWNlKGksIGkgKyBJTlBVVF9MRU5HVEgpO1xuICAgICAgICAgICAgaW5wdXRVaW50OEFycmF5LnNldChzbGljZWQpO1xuICAgICAgICAgICAgY3R4LnVwZGF0ZSh3YXNtSW5wdXRWYWx1ZSwgc2xpY2VkLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlucHV0VWludDhBcnJheS5zZXQoZGF0YSk7XG4gICAgICAgIGN0eC51cGRhdGUod2FzbUlucHV0VmFsdWUsIGRhdGEubGVuZ3RoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmaW5hbCgpIHtcbiAgICBjdHguZmluYWwod2FzbU91dHB1dFZhbHVlKTtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgb3V0cHV0LnNldChvdXRwdXRVaW50OEFycmF5KTtcbiAgICByZXR1cm4gb3V0cHV0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRpZ2VzdDY0SGFzaE9iamVjdHMiLCJkaWdlc3QyQnl0ZXMzMiIsImRpZ2VzdDY0IiwiZGlnZXN0IiwiU0hBMjU2IiwiaGFzaE9iamVjdFRvQnl0ZUFycmF5IiwiYnl0ZUFycmF5VG9IYXNoT2JqZWN0Iiwid2FzbV8xIiwicmVxdWlyZSIsImhhc2hPYmplY3RfMSIsImVudW1lcmFibGUiLCJnZXQiLCJzaGEyNTZfMSIsImRlZmF1bHQiLCJjdHgiLCJuZXdJbnN0YW5jZSIsIndhc21JbnB1dFZhbHVlIiwiaW5wdXQiLCJ3YXNtT3V0cHV0VmFsdWUiLCJvdXRwdXQiLCJpbnB1dFVpbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwibWVtb3J5IiwiYnVmZmVyIiwiSU5QVVRfTEVOR1RIIiwib3V0cHV0VWludDhBcnJheSIsImlucHV0VWludDMyQXJyYXkiLCJVaW50MzJBcnJheSIsImRhdGEiLCJsZW5ndGgiLCJzZXQiLCJpbml0IiwidXBkYXRlIiwiZmluYWwiLCJFcnJvciIsImJ5dGVzMSIsImJ5dGVzMiIsIm9iajEiLCJvYmoyIiwiaDAiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoNyIsImkiLCJzbGljZWQiLCJzbGljZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-sha256/lib/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-sha256/lib/sha256.js":
/*!*********************************************************!*\
!*** ./node_modules/@chainsafe/as-sha256/lib/sha256.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst wasm_1 = __webpack_require__(/*! ./wasm */ \"(ssr)/./node_modules/@chainsafe/as-sha256/lib/wasm.js\");\n/**\n * Class based SHA256\n */ class SHA256 {\n constructor(){\n this.ctx = wasm_1.newInstance();\n this.wasmInputValue = this.ctx.input.value;\n this.wasmOutputValue = this.ctx.output.value;\n this.uint8InputArray = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH);\n this.uint8OutputArray = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32);\n }\n init() {\n this.ctx.init();\n return this;\n }\n update(data) {\n const INPUT_LENGTH = this.ctx.INPUT_LENGTH;\n if (data.length > INPUT_LENGTH) {\n for(let i = 0; i < data.length; i += INPUT_LENGTH){\n const sliced = data.slice(i, i + INPUT_LENGTH);\n this.uint8InputArray.set(sliced);\n this.ctx.update(this.wasmInputValue, sliced.length);\n }\n } else {\n this.uint8InputArray.set(data);\n this.ctx.update(this.wasmInputValue, data.length);\n }\n return this;\n }\n final() {\n this.ctx.final(this.wasmOutputValue);\n const output = new Uint8Array(32);\n output.set(this.uint8OutputArray);\n return output;\n }\n}\nexports[\"default\"] = SHA256; //# sourceMappingURL=sha256.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1zaGEyNTYvbGliL3NoYTI1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFBRUcsT0FBTztBQUFLLENBQUMsRUFBQztBQUM3RCxNQUFNQyxTQUFTQyxtQkFBT0EsQ0FBQyxxRUFBUTtBQUMvQjs7Q0FFQyxHQUNELE1BQU1DO0lBQ0ZDLGFBQWM7UUFDVixJQUFJLENBQUNDLEdBQUcsR0FBR0osT0FBT0ssV0FBVztRQUM3QixJQUFJLENBQUNDLGNBQWMsR0FBRyxJQUFJLENBQUNGLEdBQUcsQ0FBQ0csS0FBSyxDQUFDUixLQUFLO1FBQzFDLElBQUksQ0FBQ1MsZUFBZSxHQUFHLElBQUksQ0FBQ0osR0FBRyxDQUFDSyxNQUFNLENBQUNWLEtBQUs7UUFDNUMsSUFBSSxDQUFDVyxlQUFlLEdBQUcsSUFBSUMsV0FBVyxJQUFJLENBQUNQLEdBQUcsQ0FBQ1EsTUFBTSxDQUFDQyxNQUFNLEVBQUUsSUFBSSxDQUFDUCxjQUFjLEVBQUUsSUFBSSxDQUFDRixHQUFHLENBQUNVLFlBQVk7UUFDeEcsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxJQUFJSixXQUFXLElBQUksQ0FBQ1AsR0FBRyxDQUFDUSxNQUFNLENBQUNDLE1BQU0sRUFBRSxJQUFJLENBQUNMLGVBQWUsRUFBRTtJQUN6RjtJQUNBUSxPQUFPO1FBQ0gsSUFBSSxDQUFDWixHQUFHLENBQUNZLElBQUk7UUFDYixPQUFPLElBQUk7SUFDZjtJQUNBQyxPQUFPQyxJQUFJLEVBQUU7UUFDVCxNQUFNSixlQUFlLElBQUksQ0FBQ1YsR0FBRyxDQUFDVSxZQUFZO1FBQzFDLElBQUlJLEtBQUtDLE1BQU0sR0FBR0wsY0FBYztZQUM1QixJQUFLLElBQUlNLElBQUksR0FBR0EsSUFBSUYsS0FBS0MsTUFBTSxFQUFFQyxLQUFLTixhQUFjO2dCQUNoRCxNQUFNTyxTQUFTSCxLQUFLSSxLQUFLLENBQUNGLEdBQUdBLElBQUlOO2dCQUNqQyxJQUFJLENBQUNKLGVBQWUsQ0FBQ2EsR0FBRyxDQUFDRjtnQkFDekIsSUFBSSxDQUFDakIsR0FBRyxDQUFDYSxNQUFNLENBQUMsSUFBSSxDQUFDWCxjQUFjLEVBQUVlLE9BQU9GLE1BQU07WUFDdEQ7UUFDSixPQUNLO1lBQ0QsSUFBSSxDQUFDVCxlQUFlLENBQUNhLEdBQUcsQ0FBQ0w7WUFDekIsSUFBSSxDQUFDZCxHQUFHLENBQUNhLE1BQU0sQ0FBQyxJQUFJLENBQUNYLGNBQWMsRUFBRVksS0FBS0MsTUFBTTtRQUNwRDtRQUNBLE9BQU8sSUFBSTtJQUNmO0lBQ0FLLFFBQVE7UUFDSixJQUFJLENBQUNwQixHQUFHLENBQUNvQixLQUFLLENBQUMsSUFBSSxDQUFDaEIsZUFBZTtRQUNuQyxNQUFNQyxTQUFTLElBQUlFLFdBQVc7UUFDOUJGLE9BQU9jLEdBQUcsQ0FBQyxJQUFJLENBQUNSLGdCQUFnQjtRQUNoQyxPQUFPTjtJQUNYO0FBQ0o7QUFDQVgsa0JBQWUsR0FBR0ksUUFDbEIsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1zaGEyNTYvbGliL3NoYTI1Ni5qcz8yMzVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgd2FzbV8xID0gcmVxdWlyZShcIi4vd2FzbVwiKTtcbi8qKlxuICogQ2xhc3MgYmFzZWQgU0hBMjU2XG4gKi9cbmNsYXNzIFNIQTI1NiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY3R4ID0gd2FzbV8xLm5ld0luc3RhbmNlKCk7XG4gICAgICAgIHRoaXMud2FzbUlucHV0VmFsdWUgPSB0aGlzLmN0eC5pbnB1dC52YWx1ZTtcbiAgICAgICAgdGhpcy53YXNtT3V0cHV0VmFsdWUgPSB0aGlzLmN0eC5vdXRwdXQudmFsdWU7XG4gICAgICAgIHRoaXMudWludDhJbnB1dEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5jdHgubWVtb3J5LmJ1ZmZlciwgdGhpcy53YXNtSW5wdXRWYWx1ZSwgdGhpcy5jdHguSU5QVVRfTEVOR1RIKTtcbiAgICAgICAgdGhpcy51aW50OE91dHB1dEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5jdHgubWVtb3J5LmJ1ZmZlciwgdGhpcy53YXNtT3V0cHV0VmFsdWUsIDMyKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5jdHguaW5pdCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdXBkYXRlKGRhdGEpIHtcbiAgICAgICAgY29uc3QgSU5QVVRfTEVOR1RIID0gdGhpcy5jdHguSU5QVVRfTEVOR1RIO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiBJTlBVVF9MRU5HVEgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gSU5QVVRfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xpY2VkID0gZGF0YS5zbGljZShpLCBpICsgSU5QVVRfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVpbnQ4SW5wdXRBcnJheS5zZXQoc2xpY2VkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC51cGRhdGUodGhpcy53YXNtSW5wdXRWYWx1ZSwgc2xpY2VkLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVpbnQ4SW5wdXRBcnJheS5zZXQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmN0eC51cGRhdGUodGhpcy53YXNtSW5wdXRWYWx1ZSwgZGF0YS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmaW5hbCgpIHtcbiAgICAgICAgdGhpcy5jdHguZmluYWwodGhpcy53YXNtT3V0cHV0VmFsdWUpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgICAgIG91dHB1dC5zZXQodGhpcy51aW50OE91dHB1dEFycmF5KTtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTSEEyNTY7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGEyNTYuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwid2FzbV8xIiwicmVxdWlyZSIsIlNIQTI1NiIsImNvbnN0cnVjdG9yIiwiY3R4IiwibmV3SW5zdGFuY2UiLCJ3YXNtSW5wdXRWYWx1ZSIsImlucHV0Iiwid2FzbU91dHB1dFZhbHVlIiwib3V0cHV0IiwidWludDhJbnB1dEFycmF5IiwiVWludDhBcnJheSIsIm1lbW9yeSIsImJ1ZmZlciIsIklOUFVUX0xFTkdUSCIsInVpbnQ4T3V0cHV0QXJyYXkiLCJpbml0IiwidXBkYXRlIiwiZGF0YSIsImxlbmd0aCIsImkiLCJzbGljZWQiLCJzbGljZSIsInNldCIsImZpbmFsIiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-sha256/lib/sha256.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-sha256/lib/wasm.js":
/*!*******************************************************!*\
!*** ./node_modules/@chainsafe/as-sha256/lib/wasm.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.newInstance = void 0;\nconst wasmCode_1 = __webpack_require__(/*! ./wasmCode */ \"(ssr)/./node_modules/@chainsafe/as-sha256/lib/wasmCode.js\");\nconst _module = new WebAssembly.Module(wasmCode_1.wasmCode);\nconst importObj = {\n env: {\n // modified from https://github.com/AssemblyScript/assemblyscript/blob/v0.9.2/lib/loader/index.js#L70\n abort: function(msg, file, line, col) {\n throw Error(`abort: ${msg}:${file}:${line}:${col}`);\n }\n }\n};\nfunction newInstance() {\n return new WebAssembly.Instance(_module, importObj).exports;\n}\nexports.newInstance = newInstance; //# sourceMappingURL=wasm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1zaGEyNTYvbGliL3dhc20uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQUVHLE9BQU87QUFBSyxDQUFDLEVBQUM7QUFDN0RELG1CQUFtQixHQUFHLEtBQUs7QUFDM0IsTUFBTUcsYUFBYUMsbUJBQU9BLENBQUMsNkVBQVk7QUFDdkMsTUFBTUMsVUFBVSxJQUFJQyxZQUFZQyxNQUFNLENBQUNKLFdBQVdLLFFBQVE7QUFDMUQsTUFBTUMsWUFBWTtJQUNkQyxLQUFLO1FBQ0QscUdBQXFHO1FBQ3JHQyxPQUFPLFNBQVVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLEdBQUc7WUFDakMsTUFBTUMsTUFBTSxDQUFDLE9BQU8sRUFBRUosSUFBSSxDQUFDLEVBQUVDLEtBQUssQ0FBQyxFQUFFQyxLQUFLLENBQUMsRUFBRUMsSUFBSSxDQUFDO1FBQ3REO0lBQ0o7QUFDSjtBQUNBLFNBQVNiO0lBQ0wsT0FBTyxJQUFJSSxZQUFZVyxRQUFRLENBQUNaLFNBQVNJLFdBQVdULE9BQU87QUFDL0Q7QUFDQUEsbUJBQW1CLEdBQUdFLGFBQ3RCLGdDQUFnQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvYXMtc2hhMjU2L2xpYi93YXNtLmpzPzNhMDgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLm5ld0luc3RhbmNlID0gdm9pZCAwO1xuY29uc3Qgd2FzbUNvZGVfMSA9IHJlcXVpcmUoXCIuL3dhc21Db2RlXCIpO1xuY29uc3QgX21vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUod2FzbUNvZGVfMS53YXNtQ29kZSk7XG5jb25zdCBpbXBvcnRPYmogPSB7XG4gICAgZW52OiB7XG4gICAgICAgIC8vIG1vZGlmaWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL0Fzc2VtYmx5U2NyaXB0L2Fzc2VtYmx5c2NyaXB0L2Jsb2IvdjAuOS4yL2xpYi9sb2FkZXIvaW5kZXguanMjTDcwXG4gICAgICAgIGFib3J0OiBmdW5jdGlvbiAobXNnLCBmaWxlLCBsaW5lLCBjb2wpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBhYm9ydDogJHttc2d9OiR7ZmlsZX06JHtsaW5lfToke2NvbH1gKTtcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbmZ1bmN0aW9uIG5ld0luc3RhbmNlKCkge1xuICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UoX21vZHVsZSwgaW1wb3J0T2JqKS5leHBvcnRzO1xufVxuZXhwb3J0cy5uZXdJbnN0YW5jZSA9IG5ld0luc3RhbmNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2FzbS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJuZXdJbnN0YW5jZSIsIndhc21Db2RlXzEiLCJyZXF1aXJlIiwiX21vZHVsZSIsIldlYkFzc2VtYmx5IiwiTW9kdWxlIiwid2FzbUNvZGUiLCJpbXBvcnRPYmoiLCJlbnYiLCJhYm9ydCIsIm1zZyIsImZpbGUiLCJsaW5lIiwiY29sIiwiRXJyb3IiLCJJbnN0YW5jZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-sha256/lib/wasm.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/as-sha256/lib/wasmCode.js":
/*!***********************************************************!*\
!*** ./node_modules/@chainsafe/as-sha256/lib/wasmCode.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports) => {
eval("\n// This file was autogenerated by scripts/codegen.ts\n// DO NOT modify this file by hand!\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nexports.wasmCode = void 0;\n// eslint-disable-next-line prettier/prettier\nexports.wasmCode = Uint8Array.from([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 31,\n 6,\n 96,\n 1,\n 127,\n 0,\n 96,\n 2,\n 127,\n 127,\n 0,\n 96,\n 0,\n 0,\n 96,\n 1,\n 127,\n 1,\n 127,\n 96,\n 3,\n 127,\n 127,\n 127,\n 0,\n 96,\n 4,\n 127,\n 127,\n 127,\n 127,\n 0,\n 2,\n 13,\n 1,\n 3,\n 101,\n 110,\n 118,\n 5,\n 97,\n 98,\n 111,\n 114,\n 116,\n 0,\n 5,\n 3,\n 16,\n 15,\n 0,\n 3,\n 1,\n 3,\n 2,\n 2,\n 4,\n 1,\n 1,\n 3,\n 0,\n 0,\n 0,\n 1,\n 2,\n 5,\n 3,\n 1,\n 0,\n 1,\n 6,\n 172,\n 1,\n 34,\n 127,\n 0,\n 65,\n 128,\n 4,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 127,\n 1,\n 65,\n 0,\n 11,\n 7,\n 86,\n 9,\n 6,\n 109,\n 101,\n 109,\n 111,\n 114,\n 121,\n 2,\n 0,\n 12,\n 73,\n 78,\n 80,\n 85,\n 84,\n 95,\n 76,\n 69,\n 78,\n 71,\n 84,\n 72,\n 3,\n 0,\n 5,\n 105,\n 110,\n 112,\n 117,\n 116,\n 3,\n 28,\n 6,\n 111,\n 117,\n 116,\n 112,\n 117,\n 116,\n 3,\n 30,\n 4,\n 105,\n 110,\n 105,\n 116,\n 0,\n 6,\n 6,\n 117,\n 112,\n 100,\n 97,\n 116,\n 101,\n 0,\n 9,\n 5,\n 102,\n 105,\n 110,\n 97,\n 108,\n 0,\n 11,\n 6,\n 100,\n 105,\n 103,\n 101,\n 115,\n 116,\n 0,\n 12,\n 8,\n 100,\n 105,\n 103,\n 101,\n 115,\n 116,\n 54,\n 52,\n 0,\n 14,\n 8,\n 1,\n 15,\n 10,\n 202,\n 14,\n 15,\n 70,\n 1,\n 2,\n 127,\n 32,\n 0,\n 63,\n 0,\n 34,\n 2,\n 65,\n 16,\n 116,\n 34,\n 1,\n 75,\n 4,\n 64,\n 32,\n 2,\n 32,\n 0,\n 32,\n 1,\n 107,\n 65,\n 255,\n 255,\n 3,\n 106,\n 65,\n 128,\n 128,\n 124,\n 113,\n 65,\n 16,\n 118,\n 34,\n 1,\n 32,\n 2,\n 32,\n 1,\n 74,\n 27,\n 64,\n 0,\n 65,\n 0,\n 72,\n 4,\n 64,\n 32,\n 1,\n 64,\n 0,\n 65,\n 0,\n 72,\n 4,\n 64,\n 0,\n 11,\n 11,\n 11,\n 32,\n 0,\n 36,\n 23,\n 11,\n 82,\n 1,\n 3,\n 127,\n 32,\n 0,\n 65,\n 240,\n 255,\n 255,\n 255,\n 3,\n 75,\n 4,\n 64,\n 0,\n 11,\n 35,\n 23,\n 65,\n 16,\n 106,\n 34,\n 2,\n 32,\n 0,\n 65,\n 15,\n 106,\n 65,\n 112,\n 113,\n 34,\n 1,\n 65,\n 16,\n 32,\n 1,\n 65,\n 16,\n 75,\n 27,\n 34,\n 3,\n 106,\n 16,\n 1,\n 32,\n 2,\n 65,\n 16,\n 107,\n 34,\n 1,\n 32,\n 3,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 1,\n 54,\n 2,\n 4,\n 32,\n 1,\n 65,\n 0,\n 54,\n 2,\n 8,\n 32,\n 1,\n 32,\n 0,\n 54,\n 2,\n 12,\n 32,\n 2,\n 11,\n 37,\n 1,\n 1,\n 127,\n 3,\n 64,\n 32,\n 1,\n 4,\n 64,\n 32,\n 0,\n 34,\n 2,\n 65,\n 1,\n 106,\n 33,\n 0,\n 32,\n 2,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 1,\n 65,\n 1,\n 107,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 11,\n 41,\n 1,\n 1,\n 127,\n 32,\n 0,\n 65,\n 240,\n 255,\n 255,\n 255,\n 3,\n 75,\n 4,\n 64,\n 65,\n 128,\n 5,\n 65,\n 176,\n 5,\n 65,\n 54,\n 65,\n 42,\n 16,\n 0,\n 0,\n 11,\n 32,\n 0,\n 16,\n 2,\n 34,\n 1,\n 32,\n 0,\n 16,\n 3,\n 32,\n 1,\n 11,\n 71,\n 0,\n 65,\n 180,\n 2,\n 40,\n 2,\n 0,\n 36,\n 1,\n 65,\n 228,\n 4,\n 40,\n 2,\n 0,\n 36,\n 2,\n 65,\n 224,\n 5,\n 36,\n 22,\n 65,\n 224,\n 5,\n 36,\n 23,\n 65,\n 192,\n 0,\n 16,\n 4,\n 36,\n 24,\n 35,\n 24,\n 36,\n 25,\n 65,\n 128,\n 2,\n 16,\n 4,\n 36,\n 26,\n 35,\n 26,\n 36,\n 27,\n 65,\n 128,\n 4,\n 16,\n 4,\n 36,\n 28,\n 35,\n 28,\n 36,\n 29,\n 65,\n 32,\n 16,\n 4,\n 36,\n 30,\n 35,\n 30,\n 36,\n 31,\n 11,\n 74,\n 0,\n 65,\n 231,\n 204,\n 167,\n 208,\n 6,\n 36,\n 3,\n 65,\n 133,\n 221,\n 158,\n 219,\n 123,\n 36,\n 4,\n 65,\n 242,\n 230,\n 187,\n 227,\n 3,\n 36,\n 5,\n 65,\n 186,\n 234,\n 191,\n 170,\n 122,\n 36,\n 6,\n 65,\n 255,\n 164,\n 185,\n 136,\n 5,\n 36,\n 7,\n 65,\n 140,\n 209,\n 149,\n 216,\n 121,\n 36,\n 8,\n 65,\n 171,\n 179,\n 143,\n 252,\n 1,\n 36,\n 9,\n 65,\n 153,\n 154,\n 131,\n 223,\n 5,\n 36,\n 10,\n 65,\n 0,\n 36,\n 32,\n 65,\n 0,\n 36,\n 33,\n 11,\n 103,\n 1,\n 2,\n 127,\n 2,\n 64,\n 32,\n 2,\n 33,\n 3,\n 32,\n 0,\n 32,\n 1,\n 70,\n 13,\n 0,\n 32,\n 0,\n 32,\n 1,\n 73,\n 4,\n 64,\n 3,\n 64,\n 32,\n 3,\n 4,\n 64,\n 32,\n 0,\n 34,\n 2,\n 65,\n 1,\n 106,\n 33,\n 0,\n 32,\n 1,\n 34,\n 4,\n 65,\n 1,\n 106,\n 33,\n 1,\n 32,\n 2,\n 32,\n 4,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 32,\n 3,\n 65,\n 1,\n 107,\n 33,\n 3,\n 12,\n 1,\n 11,\n 11,\n 5,\n 3,\n 64,\n 32,\n 3,\n 4,\n 64,\n 32,\n 3,\n 65,\n 1,\n 107,\n 34,\n 3,\n 32,\n 0,\n 106,\n 32,\n 1,\n 32,\n 3,\n 106,\n 45,\n 0,\n 0,\n 58,\n 0,\n 0,\n 12,\n 1,\n 11,\n 11,\n 11,\n 11,\n 11,\n 231,\n 3,\n 1,\n 1,\n 127,\n 35,\n 3,\n 36,\n 11,\n 35,\n 4,\n 36,\n 12,\n 35,\n 5,\n 36,\n 13,\n 35,\n 6,\n 36,\n 14,\n 35,\n 7,\n 36,\n 15,\n 35,\n 8,\n 36,\n 16,\n 35,\n 9,\n 36,\n 17,\n 35,\n 10,\n 36,\n 18,\n 65,\n 0,\n 36,\n 19,\n 3,\n 64,\n 35,\n 19,\n 65,\n 16,\n 73,\n 4,\n 64,\n 32,\n 0,\n 35,\n 19,\n 65,\n 2,\n 116,\n 106,\n 32,\n 1,\n 35,\n 19,\n 65,\n 2,\n 116,\n 34,\n 2,\n 106,\n 45,\n 0,\n 0,\n 65,\n 24,\n 116,\n 32,\n 1,\n 32,\n 2,\n 65,\n 1,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 16,\n 116,\n 114,\n 32,\n 1,\n 32,\n 2,\n 65,\n 2,\n 106,\n 106,\n 45,\n 0,\n 0,\n 65,\n 8,\n 116,\n 114,\n 32,\n 1,\n 32,\n 2,\n 65,\n 3,\n 106,\n 106,\n 45,\n 0,\n 0,\n 114,\n 54,\n 2,\n 0,\n 35,\n 19,\n 65,\n 1,\n 106,\n 36,\n 19,\n 12,\n 1,\n 11,\n 11,\n 65,\n 16,\n 36,\n 19,\n 3,\n 64,\n 35,\n 19,\n 65,\n 192,\n 0,\n 73,\n 4,\n 64,\n 32,\n 0,\n 35,\n 19,\n 65,\n 2,\n 116,\n 106,\n 32,\n 0,\n 35,\n 19,\n 65,\n 16,\n 107,\n 65,\n 2,\n 116,\n 106,\n 40,\n 2,\n 0,\n 32,\n 0,\n 35,\n 19,\n 65,\n 7,\n 107,\n 65,\n 2,\n 116,\n 106,\n 40,\n 2,\n 0,\n 32,\n 0,\n 35,\n 19,\n 65,\n 2,\n 107,\n 65,\n 2,\n 116,\n 106,\n 40,\n 2,\n 0,\n 34,\n 1,\n 65,\n 17,\n 120,\n 32,\n 1,\n 65,\n 19,\n 120,\n 115,\n 32,\n 1,\n 65,\n 10,\n 118,\n 115,\n 106,\n 32,\n 0,\n 35,\n 19,\n 65,\n 15,\n 107,\n 65,\n 2,\n 116,\n 106,\n 40,\n 2,\n 0,\n 34,\n 1,\n 65,\n 7,\n 120,\n 32,\n 1,\n 65,\n 18,\n 120,\n 115,\n 32,\n 1,\n 65,\n 3,\n 118,\n 115,\n 106,\n 106,\n 54,\n 2,\n 0,\n 35,\n 19,\n 65,\n 1,\n 106,\n 36,\n 19,\n 12,\n 1,\n 11,\n 11,\n 65,\n 0,\n 36,\n 19,\n 3,\n 64,\n 35,\n 19,\n 65,\n 192,\n 0,\n 73,\n 4,\n 64,\n 32,\n 0,\n 35,\n 19,\n 65,\n 2,\n 116,\n 106,\n 40,\n 2,\n 0,\n 35,\n 1,\n 35,\n 19,\n 65,\n 2,\n 116,\n 106,\n 40,\n 2,\n 0,\n 35,\n 18,\n 35,\n 15,\n 34,\n 1,\n 65,\n 6,\n 120,\n 32,\n 1,\n 65,\n 11,\n 120,\n 115,\n 32,\n 1,\n 65,\n 25,\n 120,\n 115,\n 106,\n 35,\n 15,\n 34,\n 1,\n 35,\n 16,\n 113,\n 35,\n 17,\n 32,\n 1,\n 65,\n 127,\n 115,\n 113,\n 115,\n 106,\n 106,\n 106,\n 36,\n 20,\n 35,\n 11,\n 34,\n 1,\n 65,\n 2,\n 120,\n 32,\n 1,\n 65,\n 13,\n 120,\n 115,\n 32,\n 1,\n 65,\n 22,\n 120,\n 115,\n 35,\n 11,\n 34,\n 1,\n 35,\n 12,\n 34,\n 2,\n 113,\n 32,\n 1,\n 35,\n 13,\n 34,\n 1,\n 113,\n 115,\n 32,\n 1,\n 32,\n 2,\n 113,\n 115,\n 106,\n 36,\n 21,\n 35,\n 17,\n 36,\n 18,\n 35,\n 16,\n 36,\n 17,\n 35,\n 15,\n 36,\n 16,\n 35,\n 14,\n 35,\n 20,\n 106,\n 36,\n 15,\n 35,\n 13,\n 36,\n 14,\n 35,\n 12,\n 36,\n 13,\n 35,\n 11,\n 36,\n 12,\n 35,\n 20,\n 35,\n 21,\n 106,\n 36,\n 11,\n 35,\n 19,\n 65,\n 1,\n 106,\n 36,\n 19,\n 12,\n 1,\n 11,\n 11,\n 35,\n 3,\n 35,\n 11,\n 106,\n 36,\n 3,\n 35,\n 4,\n 35,\n 12,\n 106,\n 36,\n 4,\n 35,\n 5,\n 35,\n 13,\n 106,\n 36,\n 5,\n 35,\n 6,\n 35,\n 14,\n 106,\n 36,\n 6,\n 35,\n 7,\n 35,\n 15,\n 106,\n 36,\n 7,\n 35,\n 8,\n 35,\n 16,\n 106,\n 36,\n 8,\n 35,\n 9,\n 35,\n 17,\n 106,\n 36,\n 9,\n 35,\n 10,\n 35,\n 18,\n 106,\n 36,\n 10,\n 11,\n 177,\n 1,\n 1,\n 2,\n 127,\n 32,\n 1,\n 35,\n 33,\n 106,\n 36,\n 33,\n 35,\n 32,\n 4,\n 64,\n 65,\n 192,\n 0,\n 35,\n 32,\n 107,\n 32,\n 1,\n 76,\n 4,\n 64,\n 35,\n 25,\n 35,\n 32,\n 106,\n 32,\n 0,\n 65,\n 192,\n 0,\n 35,\n 32,\n 107,\n 16,\n 7,\n 35,\n 32,\n 65,\n 192,\n 0,\n 35,\n 32,\n 107,\n 106,\n 36,\n 32,\n 65,\n 192,\n 0,\n 35,\n 32,\n 107,\n 33,\n 2,\n 32,\n 1,\n 65,\n 192,\n 0,\n 35,\n 32,\n 107,\n 107,\n 33,\n 1,\n 35,\n 27,\n 35,\n 25,\n 16,\n 8,\n 65,\n 0,\n 36,\n 32,\n 5,\n 35,\n 25,\n 35,\n 32,\n 106,\n 32,\n 0,\n 32,\n 1,\n 16,\n 7,\n 32,\n 1,\n 35,\n 32,\n 106,\n 36,\n 32,\n 15,\n 11,\n 11,\n 3,\n 64,\n 32,\n 3,\n 32,\n 1,\n 65,\n 192,\n 0,\n 109,\n 72,\n 4,\n 64,\n 35,\n 27,\n 32,\n 0,\n 32,\n 2,\n 106,\n 16,\n 8,\n 32,\n 3,\n 65,\n 1,\n 106,\n 33,\n 3,\n 32,\n 2,\n 65,\n 64,\n 107,\n 33,\n 2,\n 12,\n 1,\n 11,\n 11,\n 32,\n 1,\n 65,\n 63,\n 113,\n 4,\n 64,\n 35,\n 25,\n 35,\n 32,\n 106,\n 32,\n 0,\n 32,\n 2,\n 106,\n 32,\n 1,\n 65,\n 63,\n 113,\n 34,\n 0,\n 16,\n 7,\n 32,\n 0,\n 35,\n 32,\n 106,\n 36,\n 32,\n 11,\n 11,\n 25,\n 0,\n 32,\n 0,\n 65,\n 128,\n 254,\n 131,\n 120,\n 113,\n 65,\n 8,\n 119,\n 32,\n 0,\n 65,\n 255,\n 129,\n 252,\n 7,\n 113,\n 65,\n 8,\n 120,\n 114,\n 11,\n 173,\n 2,\n 1,\n 2,\n 127,\n 35,\n 33,\n 65,\n 63,\n 113,\n 65,\n 63,\n 72,\n 4,\n 64,\n 35,\n 25,\n 35,\n 32,\n 106,\n 65,\n 128,\n 1,\n 58,\n 0,\n 0,\n 35,\n 32,\n 65,\n 1,\n 106,\n 36,\n 32,\n 11,\n 35,\n 33,\n 65,\n 63,\n 113,\n 65,\n 56,\n 78,\n 4,\n 64,\n 35,\n 25,\n 35,\n 32,\n 106,\n 34,\n 1,\n 65,\n 192,\n 0,\n 35,\n 32,\n 107,\n 106,\n 33,\n 2,\n 3,\n 64,\n 32,\n 1,\n 32,\n 2,\n 73,\n 4,\n 64,\n 32,\n 1,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 35,\n 27,\n 35,\n 25,\n 16,\n 8,\n 65,\n 0,\n 36,\n 32,\n 11,\n 35,\n 33,\n 65,\n 63,\n 113,\n 65,\n 63,\n 78,\n 4,\n 64,\n 35,\n 25,\n 35,\n 32,\n 106,\n 65,\n 128,\n 1,\n 58,\n 0,\n 0,\n 35,\n 32,\n 65,\n 1,\n 106,\n 36,\n 32,\n 11,\n 35,\n 25,\n 35,\n 32,\n 106,\n 34,\n 1,\n 65,\n 56,\n 35,\n 32,\n 107,\n 106,\n 33,\n 2,\n 3,\n 64,\n 32,\n 1,\n 32,\n 2,\n 73,\n 4,\n 64,\n 32,\n 1,\n 65,\n 0,\n 58,\n 0,\n 0,\n 32,\n 1,\n 65,\n 1,\n 106,\n 33,\n 1,\n 12,\n 1,\n 11,\n 11,\n 35,\n 25,\n 65,\n 56,\n 106,\n 35,\n 33,\n 65,\n 128,\n 128,\n 128,\n 128,\n 2,\n 109,\n 16,\n 10,\n 54,\n 2,\n 0,\n 35,\n 25,\n 65,\n 60,\n 106,\n 35,\n 33,\n 65,\n 3,\n 116,\n 16,\n 10,\n 54,\n 2,\n 0,\n 35,\n 27,\n 35,\n 25,\n 16,\n 8,\n 32,\n 0,\n 35,\n 3,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 4,\n 106,\n 35,\n 4,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 8,\n 106,\n 35,\n 5,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 12,\n 106,\n 35,\n 6,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 16,\n 106,\n 35,\n 7,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 20,\n 106,\n 35,\n 8,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 24,\n 106,\n 35,\n 9,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 0,\n 65,\n 28,\n 106,\n 35,\n 10,\n 16,\n 10,\n 54,\n 2,\n 0,\n 11,\n 14,\n 0,\n 16,\n 6,\n 35,\n 29,\n 32,\n 0,\n 16,\n 9,\n 35,\n 31,\n 16,\n 11,\n 11,\n 253,\n 1,\n 1,\n 2,\n 127,\n 35,\n 3,\n 36,\n 11,\n 35,\n 4,\n 36,\n 12,\n 35,\n 5,\n 36,\n 13,\n 35,\n 6,\n 36,\n 14,\n 35,\n 7,\n 36,\n 15,\n 35,\n 8,\n 36,\n 16,\n 35,\n 9,\n 36,\n 17,\n 35,\n 10,\n 36,\n 18,\n 65,\n 0,\n 36,\n 19,\n 3,\n 64,\n 35,\n 19,\n 65,\n 192,\n 0,\n 73,\n 4,\n 64,\n 32,\n 0,\n 35,\n 19,\n 65,\n 2,\n 116,\n 106,\n 40,\n 2,\n 0,\n 35,\n 18,\n 35,\n 15,\n 34,\n 1,\n 65,\n 6,\n 120,\n 32,\n 1,\n 65,\n 11,\n 120,\n 115,\n 32,\n 1,\n 65,\n 25,\n 120,\n 115,\n 106,\n 35,\n 15,\n 34,\n 1,\n 35,\n 16,\n 113,\n 35,\n 17,\n 32,\n 1,\n 65,\n 127,\n 115,\n 113,\n 115,\n 106,\n 106,\n 36,\n 20,\n 35,\n 11,\n 34,\n 1,\n 65,\n 2,\n 120,\n 32,\n 1,\n 65,\n 13,\n 120,\n 115,\n 32,\n 1,\n 65,\n 22,\n 120,\n 115,\n 35,\n 11,\n 34,\n 1,\n 35,\n 12,\n 34,\n 2,\n 113,\n 32,\n 1,\n 35,\n 13,\n 34,\n 1,\n 113,\n 115,\n 32,\n 1,\n 32,\n 2,\n 113,\n 115,\n 106,\n 36,\n 21,\n 35,\n 17,\n 36,\n 18,\n 35,\n 16,\n 36,\n 17,\n 35,\n 15,\n 36,\n 16,\n 35,\n 14,\n 35,\n 20,\n 106,\n 36,\n 15,\n 35,\n 13,\n 36,\n 14,\n 35,\n 12,\n 36,\n 13,\n 35,\n 11,\n 36,\n 12,\n 35,\n 20,\n 35,\n 21,\n 106,\n 36,\n 11,\n 35,\n 19,\n 65,\n 1,\n 106,\n 36,\n 19,\n 12,\n 1,\n 11,\n 11,\n 35,\n 3,\n 35,\n 11,\n 106,\n 36,\n 3,\n 35,\n 4,\n 35,\n 12,\n 106,\n 36,\n 4,\n 35,\n 5,\n 35,\n 13,\n 106,\n 36,\n 5,\n 35,\n 6,\n 35,\n 14,\n 106,\n 36,\n 6,\n 35,\n 7,\n 35,\n 15,\n 106,\n 36,\n 7,\n 35,\n 8,\n 35,\n 16,\n 106,\n 36,\n 8,\n 35,\n 9,\n 35,\n 17,\n 106,\n 36,\n 9,\n 35,\n 10,\n 35,\n 18,\n 106,\n 36,\n 10,\n 11,\n 107,\n 0,\n 16,\n 6,\n 35,\n 27,\n 32,\n 0,\n 16,\n 8,\n 35,\n 2,\n 16,\n 13,\n 32,\n 1,\n 35,\n 3,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 4,\n 106,\n 35,\n 4,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 8,\n 106,\n 35,\n 5,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 12,\n 106,\n 35,\n 6,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 16,\n 106,\n 35,\n 7,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 20,\n 106,\n 35,\n 8,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 24,\n 106,\n 35,\n 9,\n 16,\n 10,\n 54,\n 2,\n 0,\n 32,\n 1,\n 65,\n 28,\n 106,\n 35,\n 10,\n 16,\n 10,\n 54,\n 2,\n 0,\n 11,\n 4,\n 0,\n 16,\n 5,\n 11,\n 11,\n 222,\n 5,\n 6,\n 0,\n 65,\n 17,\n 11,\n 143,\n 2,\n 1,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 152,\n 47,\n 138,\n 66,\n 145,\n 68,\n 55,\n 113,\n 207,\n 251,\n 192,\n 181,\n 165,\n 219,\n 181,\n 233,\n 91,\n 194,\n 86,\n 57,\n 241,\n 17,\n 241,\n 89,\n 164,\n 130,\n 63,\n 146,\n 213,\n 94,\n 28,\n 171,\n 152,\n 170,\n 7,\n 216,\n 1,\n 91,\n 131,\n 18,\n 190,\n 133,\n 49,\n 36,\n 195,\n 125,\n 12,\n 85,\n 116,\n 93,\n 190,\n 114,\n 254,\n 177,\n 222,\n 128,\n 167,\n 6,\n 220,\n 155,\n 116,\n 241,\n 155,\n 193,\n 193,\n 105,\n 155,\n 228,\n 134,\n 71,\n 190,\n 239,\n 198,\n 157,\n 193,\n 15,\n 204,\n 161,\n 12,\n 36,\n 111,\n 44,\n 233,\n 45,\n 170,\n 132,\n 116,\n 74,\n 220,\n 169,\n 176,\n 92,\n 218,\n 136,\n 249,\n 118,\n 82,\n 81,\n 62,\n 152,\n 109,\n 198,\n 49,\n 168,\n 200,\n 39,\n 3,\n 176,\n 199,\n 127,\n 89,\n 191,\n 243,\n 11,\n 224,\n 198,\n 71,\n 145,\n 167,\n 213,\n 81,\n 99,\n 202,\n 6,\n 103,\n 41,\n 41,\n 20,\n 133,\n 10,\n 183,\n 39,\n 56,\n 33,\n 27,\n 46,\n 252,\n 109,\n 44,\n 77,\n 19,\n 13,\n 56,\n 83,\n 84,\n 115,\n 10,\n 101,\n 187,\n 10,\n 106,\n 118,\n 46,\n 201,\n 194,\n 129,\n 133,\n 44,\n 114,\n 146,\n 161,\n 232,\n 191,\n 162,\n 75,\n 102,\n 26,\n 168,\n 112,\n 139,\n 75,\n 194,\n 163,\n 81,\n 108,\n 199,\n 25,\n 232,\n 146,\n 209,\n 36,\n 6,\n 153,\n 214,\n 133,\n 53,\n 14,\n 244,\n 112,\n 160,\n 106,\n 16,\n 22,\n 193,\n 164,\n 25,\n 8,\n 108,\n 55,\n 30,\n 76,\n 119,\n 72,\n 39,\n 181,\n 188,\n 176,\n 52,\n 179,\n 12,\n 28,\n 57,\n 74,\n 170,\n 216,\n 78,\n 79,\n 202,\n 156,\n 91,\n 243,\n 111,\n 46,\n 104,\n 238,\n 130,\n 143,\n 116,\n 111,\n 99,\n 165,\n 120,\n 20,\n 120,\n 200,\n 132,\n 8,\n 2,\n 199,\n 140,\n 250,\n 255,\n 190,\n 144,\n 235,\n 108,\n 80,\n 164,\n 247,\n 163,\n 249,\n 190,\n 242,\n 120,\n 113,\n 198,\n 0,\n 65,\n 160,\n 2,\n 11,\n 29,\n 16,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 3,\n 0,\n 0,\n 0,\n 16,\n 0,\n 0,\n 0,\n 32,\n 0,\n 0,\n 0,\n 32,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 64,\n 0,\n 65,\n 193,\n 2,\n 11,\n 143,\n 2,\n 1,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 152,\n 47,\n 138,\n 194,\n 145,\n 68,\n 55,\n 113,\n 207,\n 251,\n 192,\n 181,\n 165,\n 219,\n 181,\n 233,\n 91,\n 194,\n 86,\n 57,\n 241,\n 17,\n 241,\n 89,\n 164,\n 130,\n 63,\n 146,\n 213,\n 94,\n 28,\n 171,\n 152,\n 170,\n 7,\n 216,\n 1,\n 91,\n 131,\n 18,\n 190,\n 133,\n 49,\n 36,\n 195,\n 125,\n 12,\n 85,\n 116,\n 93,\n 190,\n 114,\n 254,\n 177,\n 222,\n 128,\n 167,\n 6,\n 220,\n 155,\n 116,\n 243,\n 155,\n 193,\n 193,\n 105,\n 155,\n 100,\n 134,\n 71,\n 254,\n 240,\n 198,\n 237,\n 225,\n 15,\n 84,\n 242,\n 12,\n 36,\n 111,\n 52,\n 233,\n 79,\n 190,\n 132,\n 201,\n 108,\n 30,\n 65,\n 185,\n 97,\n 250,\n 136,\n 249,\n 22,\n 82,\n 81,\n 198,\n 242,\n 109,\n 90,\n 142,\n 168,\n 101,\n 252,\n 25,\n 176,\n 199,\n 158,\n 217,\n 185,\n 195,\n 49,\n 18,\n 154,\n 160,\n 234,\n 14,\n 231,\n 43,\n 35,\n 177,\n 253,\n 176,\n 62,\n 53,\n 199,\n 213,\n 186,\n 105,\n 48,\n 95,\n 109,\n 151,\n 203,\n 143,\n 17,\n 15,\n 90,\n 253,\n 238,\n 30,\n 220,\n 137,\n 182,\n 53,\n 10,\n 4,\n 122,\n 11,\n 222,\n 157,\n 202,\n 244,\n 88,\n 22,\n 91,\n 93,\n 225,\n 134,\n 62,\n 127,\n 0,\n 128,\n 137,\n 8,\n 55,\n 50,\n 234,\n 7,\n 165,\n 55,\n 149,\n 171,\n 111,\n 16,\n 97,\n 64,\n 23,\n 241,\n 214,\n 140,\n 13,\n 109,\n 59,\n 170,\n 205,\n 55,\n 190,\n 187,\n 192,\n 218,\n 59,\n 97,\n 131,\n 99,\n 163,\n 72,\n 219,\n 49,\n 233,\n 2,\n 11,\n 167,\n 92,\n 209,\n 111,\n 202,\n 250,\n 26,\n 82,\n 49,\n 132,\n 51,\n 49,\n 149,\n 26,\n 212,\n 110,\n 144,\n 120,\n 67,\n 109,\n 242,\n 145,\n 156,\n 195,\n 189,\n 171,\n 204,\n 158,\n 230,\n 160,\n 201,\n 181,\n 60,\n 182,\n 47,\n 83,\n 198,\n 65,\n 199,\n 210,\n 163,\n 126,\n 35,\n 7,\n 104,\n 75,\n 149,\n 164,\n 118,\n 29,\n 25,\n 76,\n 0,\n 65,\n 208,\n 4,\n 11,\n 29,\n 16,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 3,\n 0,\n 0,\n 0,\n 16,\n 0,\n 0,\n 0,\n 80,\n 1,\n 0,\n 0,\n 80,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 64,\n 0,\n 65,\n 240,\n 4,\n 11,\n 43,\n 28,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 28,\n 0,\n 0,\n 0,\n 73,\n 0,\n 110,\n 0,\n 118,\n 0,\n 97,\n 0,\n 108,\n 0,\n 105,\n 0,\n 100,\n 0,\n 32,\n 0,\n 108,\n 0,\n 101,\n 0,\n 110,\n 0,\n 103,\n 0,\n 116,\n 0,\n 104,\n 0,\n 65,\n 160,\n 5,\n 11,\n 53,\n 38,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 38,\n 0,\n 0,\n 0,\n 126,\n 0,\n 108,\n 0,\n 105,\n 0,\n 98,\n 0,\n 47,\n 0,\n 97,\n 0,\n 114,\n 0,\n 114,\n 0,\n 97,\n 0,\n 121,\n 0,\n 98,\n 0,\n 117,\n 0,\n 102,\n 0,\n 102,\n 0,\n 101,\n 0,\n 114,\n 0,\n 46,\n 0,\n 116,\n 0,\n 115\n]); //# sourceMappingURL=wasmCode.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9hcy1zaGEyNTYvbGliL3dhc21Db2RlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isb0RBQW9EO0FBQ3BELG1DQUFtQztBQUNuQ0EsOENBQTZDO0lBQUVHLE9BQU87QUFBSyxDQUFDLEVBQUM7QUFDN0RELGdCQUFnQixHQUFHLEtBQUs7QUFDeEIsNkNBQTZDO0FBQzdDQSxnQkFBZ0IsR0FBR0csV0FBV0MsSUFBSSxDQUFDO0lBQUM7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFHO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBRztJQUFHO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUc7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSTtJQUFLO0lBQUc7SUFBRztJQUFHO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUc7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFHO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUk7SUFBSztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUc7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFLO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBRztJQUFLO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSztJQUFHO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUk7SUFBSztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUs7SUFBSztJQUFJO0lBQUs7SUFBSTtJQUFJO0lBQUs7SUFBSTtJQUFLO0lBQUs7SUFBSztJQUFLO0lBQUk7SUFBRztJQUFLO0lBQUk7SUFBSztJQUFLO0lBQUs7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFLO0lBQUc7SUFBSTtJQUFJO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUk7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUs7SUFBRztJQUFJO0lBQUk7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBSTtJQUFHO0lBQUc7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFJO0lBQUc7SUFBSTtJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUk7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSztJQUFHO0lBQUs7SUFBRztJQUFLO0lBQUc7SUFBSTtJQUFHO0lBQUs7SUFBRztDQUFJLEdBQ2gvVyxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2FzLXNoYTI1Ni9saWIvd2FzbUNvZGUuanM/ODBlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8vIFRoaXMgZmlsZSB3YXMgYXV0b2dlbmVyYXRlZCBieSBzY3JpcHRzL2NvZGVnZW4udHNcbi8vIERPIE5PVCBtb2RpZnkgdGhpcyBmaWxlIGJ5IGhhbmQhXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLndhc21Db2RlID0gdm9pZCAwO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG5leHBvcnRzLndhc21Db2RlID0gVWludDhBcnJheS5mcm9tKFswLCA5NywgMTE1LCAxMDksIDEsIDAsIDAsIDAsIDEsIDMxLCA2LCA5NiwgMSwgMTI3LCAwLCA5NiwgMiwgMTI3LCAxMjcsIDAsIDk2LCAwLCAwLCA5NiwgMSwgMTI3LCAxLCAxMjcsIDk2LCAzLCAxMjcsIDEyNywgMTI3LCAwLCA5NiwgNCwgMTI3LCAxMjcsIDEyNywgMTI3LCAwLCAyLCAxMywgMSwgMywgMTAxLCAxMTAsIDExOCwgNSwgOTcsIDk4LCAxMTEsIDExNCwgMTE2LCAwLCA1LCAzLCAxNiwgMTUsIDAsIDMsIDEsIDMsIDIsIDIsIDQsIDEsIDEsIDMsIDAsIDAsIDAsIDEsIDIsIDUsIDMsIDEsIDAsIDEsIDYsIDE3MiwgMSwgMzQsIDEyNywgMCwgNjUsIDEyOCwgNCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDEyNywgMSwgNjUsIDAsIDExLCAxMjcsIDEsIDY1LCAwLCAxMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDcsIDg2LCA5LCA2LCAxMDksIDEwMSwgMTA5LCAxMTEsIDExNCwgMTIxLCAyLCAwLCAxMiwgNzMsIDc4LCA4MCwgODUsIDg0LCA5NSwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMywgMCwgNSwgMTA1LCAxMTAsIDExMiwgMTE3LCAxMTYsIDMsIDI4LCA2LCAxMTEsIDExNywgMTE2LCAxMTIsIDExNywgMTE2LCAzLCAzMCwgNCwgMTA1LCAxMTAsIDEwNSwgMTE2LCAwLCA2LCA2LCAxMTcsIDExMiwgMTAwLCA5NywgMTE2LCAxMDEsIDAsIDksIDUsIDEwMiwgMTA1LCAxMTAsIDk3LCAxMDgsIDAsIDExLCA2LCAxMDAsIDEwNSwgMTAzLCAxMDEsIDExNSwgMTE2LCAwLCAxMiwgOCwgMTAwLCAxMDUsIDEwMywgMTAxLCAxMTUsIDExNiwgNTQsIDUyLCAwLCAxNCwgOCwgMSwgMTUsIDEwLCAyMDIsIDE0LCAxNSwgNzAsIDEsIDIsIDEyNywgMzIsIDAsIDYzLCAwLCAzNCwgMiwgNjUsIDE2LCAxMTYsIDM0LCAxLCA3NSwgNCwgNjQsIDMyLCAyLCAzMiwgMCwgMzIsIDEsIDEwNywgNjUsIDI1NSwgMjU1LCAzLCAxMDYsIDY1LCAxMjgsIDEyOCwgMTI0LCAxMTMsIDY1LCAxNiwgMTE4LCAzNCwgMSwgMzIsIDIsIDMyLCAxLCA3NCwgMjcsIDY0LCAwLCA2NSwgMCwgNzIsIDQsIDY0LCAzMiwgMSwgNjQsIDAsIDY1LCAwLCA3MiwgNCwgNjQsIDAsIDExLCAxMSwgMTEsIDMyLCAwLCAzNiwgMjMsIDExLCA4MiwgMSwgMywgMTI3LCAzMiwgMCwgNjUsIDI0MCwgMjU1LCAyNTUsIDI1NSwgMywgNzUsIDQsIDY0LCAwLCAxMSwgMzUsIDIzLCA2NSwgMTYsIDEwNiwgMzQsIDIsIDMyLCAwLCA2NSwgMTUsIDEwNiwgNjUsIDExMiwgMTEzLCAzNCwgMSwgNjUsIDE2LCAzMiwgMSwgNjUsIDE2LCA3NSwgMjcsIDM0LCAzLCAxMDYsIDE2LCAxLCAzMiwgMiwgNjUsIDE2LCAxMDcsIDM0LCAxLCAzMiwgMywgNTQsIDIsIDAsIDMyLCAxLCA2NSwgMSwgNTQsIDIsIDQsIDMyLCAxLCA2NSwgMCwgNTQsIDIsIDgsIDMyLCAxLCAzMiwgMCwgNTQsIDIsIDEyLCAzMiwgMiwgMTEsIDM3LCAxLCAxLCAxMjcsIDMsIDY0LCAzMiwgMSwgNCwgNjQsIDMyLCAwLCAzNCwgMiwgNjUsIDEsIDEwNiwgMzMsIDAsIDMyLCAyLCA2NSwgMCwgNTgsIDAsIDAsIDMyLCAxLCA2NSwgMSwgMTA3LCAzMywgMSwgMTIsIDEsIDExLCAxMSwgMTEsIDQxLCAxLCAxLCAxMjcsIDMyLCAwLCA2NSwgMjQwLCAyNTUsIDI1NSwgMjU1LCAzLCA3NSwgNCwgNjQsIDY1LCAxMjgsIDUsIDY1LCAxNzYsIDUsIDY1LCA1NCwgNjUsIDQyLCAxNiwgMCwgMCwgMTEsIDMyLCAwLCAxNiwgMiwgMzQsIDEsIDMyLCAwLCAxNiwgMywgMzIsIDEsIDExLCA3MSwgMCwgNjUsIDE4MCwgMiwgNDAsIDIsIDAsIDM2LCAxLCA2NSwgMjI4LCA0LCA0MCwgMiwgMCwgMzYsIDIsIDY1LCAyMjQsIDUsIDM2LCAyMiwgNjUsIDIyNCwgNSwgMzYsIDIzLCA2NSwgMTkyLCAwLCAxNiwgNCwgMzYsIDI0LCAzNSwgMjQsIDM2LCAyNSwgNjUsIDEyOCwgMiwgMTYsIDQsIDM2LCAyNiwgMzUsIDI2LCAzNiwgMjcsIDY1LCAxMjgsIDQsIDE2LCA0LCAzNiwgMjgsIDM1LCAyOCwgMzYsIDI5LCA2NSwgMzIsIDE2LCA0LCAzNiwgMzAsIDM1LCAzMCwgMzYsIDMxLCAxMSwgNzQsIDAsIDY1LCAyMzEsIDIwNCwgMTY3LCAyMDgsIDYsIDM2LCAzLCA2NSwgMTMzLCAyMjEsIDE1OCwgMjE5LCAxMjMsIDM2LCA0LCA2NSwgMjQyLCAyMzAsIDE4NywgMjI3LCAzLCAzNiwgNSwgNjUsIDE4NiwgMjM0LCAxOTEsIDE3MCwgMTIyLCAzNiwgNiwgNjUsIDI1NSwgMTY0LCAxODUsIDEzNiwgNSwgMzYsIDcsIDY1LCAxNDAsIDIwOSwgMTQ5LCAyMTYsIDEyMSwgMzYsIDgsIDY1LCAxNzEsIDE3OSwgMTQzLCAyNTIsIDEsIDM2LCA5LCA2NSwgMTUzLCAxNTQsIDEzMSwgMjIzLCA1LCAzNiwgMTAsIDY1LCAwLCAzNiwgMzIsIDY1LCAwLCAzNiwgMzMsIDExLCAxMDMsIDEsIDIsIDEyNywgMiwgNjQsIDMyLCAyLCAzMywgMywgMzIsIDAsIDMyLCAxLCA3MCwgMTMsIDAsIDMyLCAwLCAzMiwgMSwgNzMsIDQsIDY0LCAzLCA2NCwgMzIsIDMsIDQsIDY0LCAzMiwgMCwgMzQsIDIsIDY1LCAxLCAxMDYsIDMzLCAwLCAzMiwgMSwgMzQsIDQsIDY1LCAxLCAxMDYsIDMzLCAxLCAzMiwgMiwgMzIsIDQsIDQ1LCAwLCAwLCA1OCwgMCwgMCwgMzIsIDMsIDY1LCAxLCAxMDcsIDMzLCAzLCAxMiwgMSwgMTEsIDExLCA1LCAzLCA2NCwgMzIsIDMsIDQsIDY0LCAzMiwgMywgNjUsIDEsIDEwNywgMzQsIDMsIDMyLCAwLCAxMDYsIDMyLCAxLCAzMiwgMywgMTA2LCA0NSwgMCwgMCwgNTgsIDAsIDAsIDEyLCAxLCAxMSwgMTEsIDExLCAxMSwgMTEsIDIzMSwgMywgMSwgMSwgMTI3LCAzNSwgMywgMzYsIDExLCAzNSwgNCwgMzYsIDEyLCAzNSwgNSwgMzYsIDEzLCAzNSwgNiwgMzYsIDE0LCAzNSwgNywgMzYsIDE1LCAzNSwgOCwgMzYsIDE2LCAzNSwgOSwgMzYsIDE3LCAzNSwgMTAsIDM2LCAxOCwgNjUsIDAsIDM2LCAxOSwgMywgNjQsIDM1LCAxOSwgNjUsIDE2LCA3MywgNCwgNjQsIDMyLCAwLCAzNSwgMTksIDY1LCAyLCAxMTYsIDEwNiwgMzIsIDEsIDM1LCAxOSwgNjUsIDIsIDExNiwgMzQsIDIsIDEwNiwgNDUsIDAsIDAsIDY1LCAyNCwgMTE2LCAzMiwgMSwgMzIsIDIsIDY1LCAxLCAxMDYsIDEwNiwgNDUsIDAsIDAsIDY1LCAxNiwgMTE2LCAxMTQsIDMyLCAxLCAzMiwgMiwgNjUsIDIsIDEwNiwgMTA2LCA0NSwgMCwgMCwgNjUsIDgsIDExNiwgMTE0LCAzMiwgMSwgMzIsIDIsIDY1LCAzLCAxMDYsIDEwNiwgNDUsIDAsIDAsIDExNCwgNTQsIDIsIDAsIDM1LCAxOSwgNjUsIDEsIDEwNiwgMzYsIDE5LCAxMiwgMSwgMTEsIDExLCA2NSwgMTYsIDM2LCAxOSwgMywgNjQsIDM1LCAxOSwgNjUsIDE5MiwgMCwgNzMsIDQsIDY0LCAzMiwgMCwgMzUsIDE5LCA2NSwgMiwgMTE2LCAxMDYsIDMyLCAwLCAzNSwgMTksIDY1LCAxNiwgMTA3LCA2NSwgMiwgMTE2LCAxMDYsIDQwLCAyLCAwLCAzMiwgMCwgMzUsIDE5LCA2NSwgNywgMTA3LCA2NSwgMiwgMTE2LCAxMDYsIDQwLCAyLCAwLCAzMiwgMCwgMzUsIDE5LCA2NSwgMiwgMTA3LCA2NSwgMiwgMTE2LCAxMDYsIDQwLCAyLCAwLCAzNCwgMSwgNjUsIDE3LCAxMjAsIDMyLCAxLCA2NSwgMTksIDEyMCwgMTE1LCAzMiwgMSwgNjUsIDEwLCAxMTgsIDExNSwgMTA2LCAzMiwgMCwgMzUsIDE5LCA2NSwgMTUsIDEwNywgNjUsIDIsIDExNiwgMTA2LCA0MCwgMiwgMCwgMzQsIDEsIDY1LCA3LCAxMjAsIDMyLCAxLCA2NSwgMTgsIDEyMCwgMTE1LCAzMiwgMSwgNjUsIDMsIDExOCwgMTE1LCAxMDYsIDEwNiwgNTQsIDIsIDAsIDM1LCAxOSwgNjUsIDEsIDEwNiwgMzYsIDE5LCAxMiwgMSwgMTEsIDExLCA2NSwgMCwgMzYsIDE5LCAzLCA2NCwgMzUsIDE5LCA2NSwgMTkyLCAwLCA3MywgNCwgNjQsIDMyLCAwLCAzNSwgMTksIDY1LCAyLCAxMTYsIDEwNiwgNDAsIDIsIDAsIDM1LCAxLCAzNSwgMTksIDY1LCAyLCAxMTYsIDEwNiwgNDAsIDIsIDAsIDM1LCAxOCwgMzUsIDE1LCAzNCwgMSwgNjUsIDYsIDEyMCwgMzIsIDEsIDY1LCAxMSwgMTIwLCAxMTUsIDMyLCAxLCA2NSwgMjUsIDEyMCwgMTE1LCAxMDYsIDM1LCAxNSwgMzQsIDEsIDM1LCAxNiwgMTEzLCAzNSwgMTcsIDMyLCAxLCA2NSwgMTI3LCAxMTUsIDExMywgMTE1LCAxMDYsIDEwNiwgMTA2LCAzNiwgMjAsIDM1LCAxMSwgMzQsIDEsIDY1LCAyLCAxMjAsIDMyLCAxLCA2NSwgMTMsIDEyMCwgMTE1LCAzMiwgMSwgNjUsIDIyLCAxMjAsIDExNSwgMzUsIDExLCAzNCwgMSwgMzUsIDEyLCAzNCwgMiwgMTEzLCAzMiwgMSwgMzUsIDEzLCAzNCwgMSwgMTEzLCAxMTUsIDMyLCAxLCAzMiwgMiwgMTEzLCAxMTUsIDEwNiwgMzYsIDIxLCAzNSwgMTcsIDM2LCAxOCwgMzUsIDE2LCAzNiwgMTcsIDM1LCAxNSwgMzYsIDE2LCAzNSwgMTQsIDM1LCAyMCwgMTA2LCAzNiwgMTUsIDM1LCAxMywgMzYsIDE0LCAzNSwgMTIsIDM2LCAxMywgMzUsIDExLCAzNiwgMTIsIDM1LCAyMCwgMzUsIDIxLCAxMDYsIDM2LCAxMSwgMzUsIDE5LCA2NSwgMSwgMTA2LCAzNiwgMTksIDEyLCAxLCAxMSwgMTEsIDM1LCAzLCAzNSwgMTEsIDEwNiwgMzYsIDMsIDM1LCA0LCAzNSwgMTIsIDEwNiwgMzYsIDQsIDM1LCA1LCAzNSwgMTMsIDEwNiwgMzYsIDUsIDM1LCA2LCAzNSwgMTQsIDEwNiwgMzYsIDYsIDM1LCA3LCAzNSwgMTUsIDEwNiwgMzYsIDcsIDM1LCA4LCAzNSwgMTYsIDEwNiwgMzYsIDgsIDM1LCA5LCAzNSwgMTcsIDEwNiwgMzYsIDksIDM1LCAxMCwgMzUsIDE4LCAxMDYsIDM2LCAxMCwgMTEsIDE3NywgMSwgMSwgMiwgMTI3LCAzMiwgMSwgMzUsIDMzLCAxMDYsIDM2LCAzMywgMzUsIDMyLCA0LCA2NCwgNjUsIDE5MiwgMCwgMzUsIDMyLCAxMDcsIDMyLCAxLCA3NiwgNCwgNjQsIDM1LCAyNSwgMzUsIDMyLCAxMDYsIDMyLCAwLCA2NSwgMTkyLCAwLCAzNSwgMzIsIDEwNywgMTYsIDcsIDM1LCAzMiwgNjUsIDE5MiwgMCwgMzUsIDMyLCAxMDcsIDEwNiwgMzYsIDMyLCA2NSwgMTkyLCAwLCAzNSwgMzIsIDEwNywgMzMsIDIsIDMyLCAxLCA2NSwgMTkyLCAwLCAzNSwgMzIsIDEwNywgMTA3LCAzMywgMSwgMzUsIDI3LCAzNSwgMjUsIDE2LCA4LCA2NSwgMCwgMzYsIDMyLCA1LCAzNSwgMjUsIDM1LCAzMiwgMTA2LCAzMiwgMCwgMzIsIDEsIDE2LCA3LCAzMiwgMSwgMzUsIDMyLCAxMDYsIDM2LCAzMiwgMTUsIDExLCAxMSwgMywgNjQsIDMyLCAzLCAzMiwgMSwgNjUsIDE5MiwgMCwgMTA5LCA3MiwgNCwgNjQsIDM1LCAyNywgMzIsIDAsIDMyLCAyLCAxMDYsIDE2LCA4LCAzMiwgMywgNjUsIDEsIDEwNiwgMzMsIDMsIDMyLCAyLCA2NSwgNjQsIDEwNywgMzMsIDIsIDEyLCAxLCAxMSwgMTEsIDMyLCAxLCA2NSwgNjMsIDExMywgNCwgNjQsIDM1LCAyNSwgMzUsIDMyLCAxMDYsIDMyLCAwLCAzMiwgMiwgMTA2LCAzMiwgMSwgNjUsIDYzLCAxMTMsIDM0LCAwLCAxNiwgNywgMzIsIDAsIDM1LCAzMiwgMTA2LCAzNiwgMzIsIDExLCAxMSwgMjUsIDAsIDMyLCAwLCA2NSwgMTI4LCAyNTQsIDEzMSwgMTIwLCAxMTMsIDY1LCA4LCAxMTksIDMyLCAwLCA2NSwgMjU1LCAxMjksIDI1MiwgNywgMTEzLCA2NSwgOCwgMTIwLCAxMTQsIDExLCAxNzMsIDIsIDEsIDIsIDEyNywgMzUsIDMzLCA2NSwgNjMsIDExMywgNjUsIDYzLCA3MiwgNCwgNjQsIDM1LCAyNSwgMzUsIDMyLCAxMDYsIDY1LCAxMjgsIDEsIDU4LCAwLCAwLCAzNSwgMzIsIDY1LCAxLCAxMDYsIDM2LCAzMiwgMTEsIDM1LCAzMywgNjUsIDYzLCAxMTMsIDY1LCA1NiwgNzgsIDQsIDY0LCAzNSwgMjUsIDM1LCAzMiwgMTA2LCAzNCwgMSwgNjUsIDE5MiwgMCwgMzUsIDMyLCAxMDcsIDEwNiwgMzMsIDIsIDMsIDY0LCAzMiwgMSwgMzIsIDIsIDczLCA0LCA2NCwgMzIsIDEsIDY1LCAwLCA1OCwgMCwgMCwgMzIsIDEsIDY1LCAxLCAxMDYsIDMzLCAxLCAxMiwgMSwgMTEsIDExLCAzNSwgMjcsIDM1LCAyNSwgMTYsIDgsIDY1LCAwLCAzNiwgMzIsIDExLCAzNSwgMzMsIDY1LCA2MywgMTEzLCA2NSwgNjMsIDc4LCA0LCA2NCwgMzUsIDI1LCAzNSwgMzIsIDEwNiwgNjUsIDEyOCwgMSwgNTgsIDAsIDAsIDM1LCAzMiwgNjUsIDEsIDEwNiwgMzYsIDMyLCAxMSwgMzUsIDI1LCAzNSwgMzIsIDEwNiwgMzQsIDEsIDY1LCA1NiwgMzUsIDMyLCAxMDcsIDEwNiwgMzMsIDIsIDMsIDY0LCAzMiwgMSwgMzIsIDIsIDczLCA0LCA2NCwgMzIsIDEsIDY1LCAwLCA1OCwgMCwgMCwgMzIsIDEsIDY1LCAxLCAxMDYsIDMzLCAxLCAxMiwgMSwgMTEsIDExLCAzNSwgMjUsIDY1LCA1NiwgMTA2LCAzNSwgMzMsIDY1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDIsIDEwOSwgMTYsIDEwLCA1NCwgMiwgMCwgMzUsIDI1LCA2NSwgNjAsIDEwNiwgMzUsIDMzLCA2NSwgMywgMTE2LCAxNiwgMTAsIDU0LCAyLCAwLCAzNSwgMjcsIDM1LCAyNSwgMTYsIDgsIDMyLCAwLCAzNSwgMywgMTYsIDEwLCA1NCwgMiwgMCwgMzIsIDAsIDY1LCA0LCAxMDYsIDM1LCA0LCAxNiwgMTAsIDU0LCAyLCAwLCAzMiwgMCwgNjUsIDgsIDEwNiwgMzUsIDUsIDE2LCAxMCwgNTQsIDIsIDAsIDMyLCAwLCA2NSwgMTIsIDEwNiwgMzUsIDYsIDE2LCAxMCwgNTQsIDIsIDAsIDMyLCAwLCA2NSwgMTYsIDEwNiwgMzUsIDcsIDE2LCAxMCwgNTQsIDIsIDAsIDMyLCAwLCA2NSwgMjAsIDEwNiwgMzUsIDgsIDE2LCAxMCwgNTQsIDIsIDAsIDMyLCAwLCA2NSwgMjQsIDEwNiwgMzUsIDksIDE2LCAxMCwgNTQsIDIsIDAsIDMyLCAwLCA2NSwgMjgsIDEwNiwgMzUsIDEwLCAxNiwgMTAsIDU0LCAyLCAwLCAxMSwgMTQsIDAsIDE2LCA2LCAzNSwgMjksIDMyLCAwLCAxNiwgOSwgMzUsIDMxLCAxNiwgMTEsIDExLCAyNTMsIDEsIDEsIDIsIDEyNywgMzUsIDMsIDM2LCAxMSwgMzUsIDQsIDM2LCAxMiwgMzUsIDUsIDM2LCAxMywgMzUsIDYsIDM2LCAxNCwgMzUsIDcsIDM2LCAxNSwgMzUsIDgsIDM2LCAxNiwgMzUsIDksIDM2LCAxNywgMzUsIDEwLCAzNiwgMTgsIDY1LCAwLCAzNiwgMTksIDMsIDY0LCAzNSwgMTksIDY1LCAxOTIsIDAsIDczLCA0LCA2NCwgMzIsIDAsIDM1LCAxOSwgNjUsIDIsIDExNiwgMTA2LCA0MCwgMiwgMCwgMzUsIDE4LCAzNSwgMTUsIDM0LCAxLCA2NSwgNiwgMTIwLCAzMiwgMSwgNjUsIDExLCAxMjAsIDExNSwgMzIsIDEsIDY1LCAyNSwgMTIwLCAxMTUsIDEwNiwgMzUsIDE1LCAzNCwgMSwgMzUsIDE2LCAxMTMsIDM1LCAxNywgMzIsIDEsIDY1LCAxMjcsIDExNSwgMTEzLCAxMTUsIDEwNiwgMTA2LCAzNiwgMjAsIDM1LCAxMSwgMzQsIDEsIDY1LCAyLCAxMjAsIDMyLCAxLCA2NSwgMTMsIDEyMCwgMTE1LCAzMiwgMSwgNjUsIDIyLCAxMjAsIDExNSwgMzUsIDExLCAzNCwgMSwgMzUsIDEyLCAzNCwgMiwgMTEzLCAzMiwgMSwgMzUsIDEzLCAzNCwgMSwgMTEzLCAxMTUsIDMyLCAxLCAzMiwgMiwgMTEzLCAxMTUsIDEwNiwgMzYsIDIxLCAzNSwgMTcsIDM2LCAxOCwgMzUsIDE2LCAzNiwgMTcsIDM1LCAxNSwgMzYsIDE2LCAzNSwgMTQsIDM1LCAyMCwgMTA2LCAzNiwgMTUsIDM1LCAxMywgMzYsIDE0LCAzNSwgMTIsIDM2LCAxMywgMzUsIDExLCAzNiwgMTIsIDM1LCAyMCwgMzUsIDIxLCAxMDYsIDM2LCAxMSwgMzUsIDE5LCA2NSwgMSwgMTA2LCAzNiwgMTksIDEyLCAxLCAxMSwgMTEsIDM1LCAzLCAzNSwgMTEsIDEwNiwgMzYsIDMsIDM1LCA0LCAzNSwgMTIsIDEwNiwgMzYsIDQsIDM1LCA1LCAzNSwgMTMsIDEwNiwgMzYsIDUsIDM1LCA2LCAzNSwgMTQsIDEwNiwgMzYsIDYsIDM1LCA3LCAzNSwgMTUsIDEwNiwgMzYsIDcsIDM1LCA4LCAzNSwgMTYsIDEwNiwgMzYsIDgsIDM1LCA5LCAzNSwgMTcsIDEwNiwgMzYsIDksIDM1LCAxMCwgMzUsIDE4LCAxMDYsIDM2LCAxMCwgMTEsIDEwNywgMCwgMTYsIDYsIDM1LCAyNywgMzIsIDAsIDE2LCA4LCAzNSwgMiwgMTYsIDEzLCAzMiwgMSwgMzUsIDMsIDE2LCAxMCwgNTQsIDIsIDAsIDMyLCAxLCA2NSwgNCwgMTA2LCAzNSwgNCwgMTYsIDEwLCA1NCwgMiwgMCwgMzIsIDEsIDY1LCA4LCAxMDYsIDM1LCA1LCAxNiwgMTAsIDU0LCAyLCAwLCAzMiwgMSwgNjUsIDEyLCAxMDYsIDM1LCA2LCAxNiwgMTAsIDU0LCAyLCAwLCAzMiwgMSwgNjUsIDE2LCAxMDYsIDM1LCA3LCAxNiwgMTAsIDU0LCAyLCAwLCAzMiwgMSwgNjUsIDIwLCAxMDYsIDM1LCA4LCAxNiwgMTAsIDU0LCAyLCAwLCAzMiwgMSwgNjUsIDI0LCAxMDYsIDM1LCA5LCAxNiwgMTAsIDU0LCAyLCAwLCAzMiwgMSwgNjUsIDI4LCAxMDYsIDM1LCAxMCwgMTYsIDEwLCA1NCwgMiwgMCwgMTEsIDQsIDAsIDE2LCA1LCAxMSwgMTEsIDIyMiwgNSwgNiwgMCwgNjUsIDE3LCAxMSwgMTQzLCAyLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAxNTIsIDQ3LCAxMzgsIDY2LCAxNDUsIDY4LCA1NSwgMTEzLCAyMDcsIDI1MSwgMTkyLCAxODEsIDE2NSwgMjE5LCAxODEsIDIzMywgOTEsIDE5NCwgODYsIDU3LCAyNDEsIDE3LCAyNDEsIDg5LCAxNjQsIDEzMCwgNjMsIDE0NiwgMjEzLCA5NCwgMjgsIDE3MSwgMTUyLCAxNzAsIDcsIDIxNiwgMSwgOTEsIDEzMSwgMTgsIDE5MCwgMTMzLCA0OSwgMzYsIDE5NSwgMTI1LCAxMiwgODUsIDExNiwgOTMsIDE5MCwgMTE0LCAyNTQsIDE3NywgMjIyLCAxMjgsIDE2NywgNiwgMjIwLCAxNTUsIDExNiwgMjQxLCAxNTUsIDE5MywgMTkzLCAxMDUsIDE1NSwgMjI4LCAxMzQsIDcxLCAxOTAsIDIzOSwgMTk4LCAxNTcsIDE5MywgMTUsIDIwNCwgMTYxLCAxMiwgMzYsIDExMSwgNDQsIDIzMywgNDUsIDE3MCwgMTMyLCAxMTYsIDc0LCAyMjAsIDE2OSwgMTc2LCA5MiwgMjE4LCAxMzYsIDI0OSwgMTE4LCA4MiwgODEsIDYyLCAxNTIsIDEwOSwgMTk4LCA0OSwgMTY4LCAyMDAsIDM5LCAzLCAxNzYsIDE5OSwgMTI3LCA4OSwgMTkxLCAyNDMsIDExLCAyMjQsIDE5OCwgNzEsIDE0NSwgMTY3LCAyMTMsIDgxLCA5OSwgMjAyLCA2LCAxMDMsIDQxLCA0MSwgMjAsIDEzMywgMTAsIDE4MywgMzksIDU2LCAzMywgMjcsIDQ2LCAyNTIsIDEwOSwgNDQsIDc3LCAxOSwgMTMsIDU2LCA4MywgODQsIDExNSwgMTAsIDEwMSwgMTg3LCAxMCwgMTA2LCAxMTgsIDQ2LCAyMDEsIDE5NCwgMTI5LCAxMzMsIDQ0LCAxMTQsIDE0NiwgMTYxLCAyMzIsIDE5MSwgMTYyLCA3NSwgMTAyLCAyNiwgMTY4LCAxMTIsIDEzOSwgNzUsIDE5NCwgMTYzLCA4MSwgMTA4LCAxOTksIDI1LCAyMzIsIDE0NiwgMjA5LCAzNiwgNiwgMTUzLCAyMTQsIDEzMywgNTMsIDE0LCAyNDQsIDExMiwgMTYwLCAxMDYsIDE2LCAyMiwgMTkzLCAxNjQsIDI1LCA4LCAxMDgsIDU1LCAzMCwgNzYsIDExOSwgNzIsIDM5LCAxODEsIDE4OCwgMTc2LCA1MiwgMTc5LCAxMiwgMjgsIDU3LCA3NCwgMTcwLCAyMTYsIDc4LCA3OSwgMjAyLCAxNTYsIDkxLCAyNDMsIDExMSwgNDYsIDEwNCwgMjM4LCAxMzAsIDE0MywgMTE2LCAxMTEsIDk5LCAxNjUsIDEyMCwgMjAsIDEyMCwgMjAwLCAxMzIsIDgsIDIsIDE5OSwgMTQwLCAyNTAsIDI1NSwgMTkwLCAxNDQsIDIzNSwgMTA4LCA4MCwgMTY0LCAyNDcsIDE2MywgMjQ5LCAxOTAsIDI0MiwgMTIwLCAxMTMsIDE5OCwgMCwgNjUsIDE2MCwgMiwgMTEsIDI5LCAxNiwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDMyLCAwLCAwLCAwLCAzMiwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgNjQsIDAsIDY1LCAxOTMsIDIsIDExLCAxNDMsIDIsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDE1MiwgNDcsIDEzOCwgMTk0LCAxNDUsIDY4LCA1NSwgMTEzLCAyMDcsIDI1MSwgMTkyLCAxODEsIDE2NSwgMjE5LCAxODEsIDIzMywgOTEsIDE5NCwgODYsIDU3LCAyNDEsIDE3LCAyNDEsIDg5LCAxNjQsIDEzMCwgNjMsIDE0NiwgMjEzLCA5NCwgMjgsIDE3MSwgMTUyLCAxNzAsIDcsIDIxNiwgMSwgOTEsIDEzMSwgMTgsIDE5MCwgMTMzLCA0OSwgMzYsIDE5NSwgMTI1LCAxMiwgODUsIDExNiwgOTMsIDE5MCwgMTE0LCAyNTQsIDE3NywgMjIyLCAxMjgsIDE2NywgNiwgMjIwLCAxNTUsIDExNiwgMjQzLCAxNTUsIDE5MywgMTkzLCAxMDUsIDE1NSwgMTAwLCAxMzQsIDcxLCAyNTQsIDI0MCwgMTk4LCAyMzcsIDIyNSwgMTUsIDg0LCAyNDIsIDEyLCAzNiwgMTExLCA1MiwgMjMzLCA3OSwgMTkwLCAxMzIsIDIwMSwgMTA4LCAzMCwgNjUsIDE4NSwgOTcsIDI1MCwgMTM2LCAyNDksIDIyLCA4MiwgODEsIDE5OCwgMjQyLCAxMDksIDkwLCAxNDIsIDE2OCwgMTAxLCAyNTIsIDI1LCAxNzYsIDE5OSwgMTU4LCAyMTcsIDE4NSwgMTk1LCA0OSwgMTgsIDE1NCwgMTYwLCAyMzQsIDE0LCAyMzEsIDQzLCAzNSwgMTc3LCAyNTMsIDE3NiwgNjIsIDUzLCAxOTksIDIxMywgMTg2LCAxMDUsIDQ4LCA5NSwgMTA5LCAxNTEsIDIwMywgMTQzLCAxNywgMTUsIDkwLCAyNTMsIDIzOCwgMzAsIDIyMCwgMTM3LCAxODIsIDUzLCAxMCwgNCwgMTIyLCAxMSwgMjIyLCAxNTcsIDIwMiwgMjQ0LCA4OCwgMjIsIDkxLCA5MywgMjI1LCAxMzQsIDYyLCAxMjcsIDAsIDEyOCwgMTM3LCA4LCA1NSwgNTAsIDIzNCwgNywgMTY1LCA1NSwgMTQ5LCAxNzEsIDExMSwgMTYsIDk3LCA2NCwgMjMsIDI0MSwgMjE0LCAxNDAsIDEzLCAxMDksIDU5LCAxNzAsIDIwNSwgNTUsIDE5MCwgMTg3LCAxOTIsIDIxOCwgNTksIDk3LCAxMzEsIDk5LCAxNjMsIDcyLCAyMTksIDQ5LCAyMzMsIDIsIDExLCAxNjcsIDkyLCAyMDksIDExMSwgMjAyLCAyNTAsIDI2LCA4MiwgNDksIDEzMiwgNTEsIDQ5LCAxNDksIDI2LCAyMTIsIDExMCwgMTQ0LCAxMjAsIDY3LCAxMDksIDI0MiwgMTQ1LCAxNTYsIDE5NSwgMTg5LCAxNzEsIDIwNCwgMTU4LCAyMzAsIDE2MCwgMjAxLCAxODEsIDYwLCAxODIsIDQ3LCA4MywgMTk4LCA2NSwgMTk5LCAyMTAsIDE2MywgMTI2LCAzNSwgNywgMTA0LCA3NSwgMTQ5LCAxNjQsIDExOCwgMjksIDI1LCA3NiwgMCwgNjUsIDIwOCwgNCwgMTEsIDI5LCAxNiwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDgwLCAxLCAwLCAwLCA4MCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgNjQsIDAsIDY1LCAyNDAsIDQsIDExLCA0MywgMjgsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDI4LCAwLCAwLCAwLCA3MywgMCwgMTEwLCAwLCAxMTgsIDAsIDk3LCAwLCAxMDgsIDAsIDEwNSwgMCwgMTAwLCAwLCAzMiwgMCwgMTA4LCAwLCAxMDEsIDAsIDExMCwgMCwgMTAzLCAwLCAxMTYsIDAsIDEwNCwgMCwgNjUsIDE2MCwgNSwgMTEsIDUzLCAzOCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMzgsIDAsIDAsIDAsIDEyNiwgMCwgMTA4LCAwLCAxMDUsIDAsIDk4LCAwLCA0NywgMCwgOTcsIDAsIDExNCwgMCwgMTE0LCAwLCA5NywgMCwgMTIxLCAwLCA5OCwgMCwgMTE3LCAwLCAxMDIsIDAsIDEwMiwgMCwgMTAxLCAwLCAxMTQsIDAsIDQ2LCAwLCAxMTYsIDAsIDExNV0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2FzbUNvZGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwid2FzbUNvZGUiLCJVaW50OEFycmF5IiwiZnJvbSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/as-sha256/lib/wasmCode.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/is-ip/lib/is-ip.node.js":
/*!*********************************************************!*\
!*** ./node_modules/@chainsafe/is-ip/lib/is-ip.node.js ***!
\*********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ipVersion: () => (/* reexport safe */ node_net__WEBPACK_IMPORTED_MODULE_0__.isIP),\n/* harmony export */ isIP: () => (/* binding */ isIP),\n/* harmony export */ isIPv4: () => (/* reexport safe */ node_net__WEBPACK_IMPORTED_MODULE_0__.isIPv4),\n/* harmony export */ isIPv6: () => (/* reexport safe */ node_net__WEBPACK_IMPORTED_MODULE_0__.isIPv6)\n/* harmony export */ });\n/* harmony import */ var node_net__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:net */ \"node:net\");\n\n\n/** Check if `input` is IPv4 or IPv6. */ function isIP(input) {\n return Boolean((0,node_net__WEBPACK_IMPORTED_MODULE_0__.isIP)(input));\n} //# sourceMappingURL=is-ip.node.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9pcy1pcC9saWIvaXMtaXAubm9kZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE2RDtBQUN4QjtBQUNyQyxzQ0FBc0MsR0FDL0IsU0FBU0UsS0FBS0UsS0FBSztJQUN0QixPQUFPQyxRQUFRRiw4Q0FBU0EsQ0FBQ0M7QUFDN0IsRUFDQSxzQ0FBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2lzLWlwL2xpYi9pcy1pcC5ub2RlLmpzPzU0ZGUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJUHY0LCBpc0lQdjYsIGlzSVAgYXMgaXBWZXJzaW9uIH0gZnJvbSBcIm5vZGU6bmV0XCI7XG5leHBvcnQgeyBpc0lQdjQsIGlzSVB2NiwgaXBWZXJzaW9uIH07XG4vKiogQ2hlY2sgaWYgYGlucHV0YCBpcyBJUHY0IG9yIElQdjYuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJUChpbnB1dCkge1xuICAgIHJldHVybiBCb29sZWFuKGlwVmVyc2lvbihpbnB1dCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtaXAubm9kZS5qcy5tYXAiXSwibmFtZXMiOlsiaXNJUHY0IiwiaXNJUHY2IiwiaXNJUCIsImlwVmVyc2lvbiIsImlucHV0IiwiQm9vbGVhbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/is-ip/lib/is-ip.node.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/is-ip/lib/parse.js":
/*!****************************************************!*\
!*** ./node_modules/@chainsafe/is-ip/lib/parse.js ***!
\****************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ parseIP: () => (/* binding */ parseIP),\n/* harmony export */ parseIPv4: () => (/* binding */ parseIPv4),\n/* harmony export */ parseIPv6: () => (/* binding */ parseIPv6)\n/* harmony export */ });\n/* harmony import */ var _parser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parser.js */ \"(ssr)/./node_modules/@chainsafe/is-ip/lib/parser.js\");\n\n// See https://stackoverflow.com/questions/166132/maximum-length-of-the-textual-representation-of-an-ipv6-address\nconst MAX_IPV6_LENGTH = 45;\nconst MAX_IPV4_LENGTH = 15;\nconst parser = new _parser_js__WEBPACK_IMPORTED_MODULE_0__.Parser();\n/** Parse `input` into IPv4 bytes. */ function parseIPv4(input) {\n if (input.length > MAX_IPV4_LENGTH) {\n return undefined;\n }\n return parser.new(input).parseWith(()=>parser.readIPv4Addr());\n}\n/** Parse `input` into IPv6 bytes. */ function parseIPv6(input) {\n // strip zone index if it is present\n if (input.includes(\"%\")) {\n input = input.split(\"%\")[0];\n }\n if (input.length > MAX_IPV6_LENGTH) {\n return undefined;\n }\n return parser.new(input).parseWith(()=>parser.readIPv6Addr());\n}\n/** Parse `input` into IPv4 or IPv6 bytes. */ function parseIP(input) {\n // strip zone index if it is present\n if (input.includes(\"%\")) {\n input = input.split(\"%\")[0];\n }\n if (input.length > MAX_IPV6_LENGTH) {\n return undefined;\n }\n return parser.new(input).parseWith(()=>parser.readIPAddr());\n} //# sourceMappingURL=parse.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9pcy1pcC9saWIvcGFyc2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFxQztBQUNyQyxpSEFBaUg7QUFDakgsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyxTQUFTLElBQUlILDhDQUFNQTtBQUN6QixtQ0FBbUMsR0FDNUIsU0FBU0ksVUFBVUMsS0FBSztJQUMzQixJQUFJQSxNQUFNQyxNQUFNLEdBQUdKLGlCQUFpQjtRQUNoQyxPQUFPSztJQUNYO0lBQ0EsT0FBT0osT0FBT0ssR0FBRyxDQUFDSCxPQUFPSSxTQUFTLENBQUMsSUFBTU4sT0FBT08sWUFBWTtBQUNoRTtBQUNBLG1DQUFtQyxHQUM1QixTQUFTQyxVQUFVTixLQUFLO0lBQzNCLG9DQUFvQztJQUNwQyxJQUFJQSxNQUFNTyxRQUFRLENBQUMsTUFBTTtRQUNyQlAsUUFBUUEsTUFBTVEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQy9CO0lBQ0EsSUFBSVIsTUFBTUMsTUFBTSxHQUFHTCxpQkFBaUI7UUFDaEMsT0FBT007SUFDWDtJQUNBLE9BQU9KLE9BQU9LLEdBQUcsQ0FBQ0gsT0FBT0ksU0FBUyxDQUFDLElBQU1OLE9BQU9XLFlBQVk7QUFDaEU7QUFDQSwyQ0FBMkMsR0FDcEMsU0FBU0MsUUFBUVYsS0FBSztJQUN6QixvQ0FBb0M7SUFDcEMsSUFBSUEsTUFBTU8sUUFBUSxDQUFDLE1BQU07UUFDckJQLFFBQVFBLE1BQU1RLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUMvQjtJQUNBLElBQUlSLE1BQU1DLE1BQU0sR0FBR0wsaUJBQWlCO1FBQ2hDLE9BQU9NO0lBQ1g7SUFDQSxPQUFPSixPQUFPSyxHQUFHLENBQUNILE9BQU9JLFNBQVMsQ0FBQyxJQUFNTixPQUFPYSxVQUFVO0FBQzlELEVBQ0EsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9pcy1pcC9saWIvcGFyc2UuanM/YTNmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXIuanNcIjtcbi8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNjYxMzIvbWF4aW11bS1sZW5ndGgtb2YtdGhlLXRleHR1YWwtcmVwcmVzZW50YXRpb24tb2YtYW4taXB2Ni1hZGRyZXNzXG5jb25zdCBNQVhfSVBWNl9MRU5HVEggPSA0NTtcbmNvbnN0IE1BWF9JUFY0X0xFTkdUSCA9IDE1O1xuY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpO1xuLyoqIFBhcnNlIGBpbnB1dGAgaW50byBJUHY0IGJ5dGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVB2NChpbnB1dCkge1xuICAgIGlmIChpbnB1dC5sZW5ndGggPiBNQVhfSVBWNF9MRU5HVEgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlci5uZXcoaW5wdXQpLnBhcnNlV2l0aCgoKSA9PiBwYXJzZXIucmVhZElQdjRBZGRyKCkpO1xufVxuLyoqIFBhcnNlIGBpbnB1dGAgaW50byBJUHY2IGJ5dGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSVB2NihpbnB1dCkge1xuICAgIC8vIHN0cmlwIHpvbmUgaW5kZXggaWYgaXQgaXMgcHJlc2VudFxuICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcIiVcIikpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zcGxpdChcIiVcIilbMF07XG4gICAgfVxuICAgIGlmIChpbnB1dC5sZW5ndGggPiBNQVhfSVBWNl9MRU5HVEgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlci5uZXcoaW5wdXQpLnBhcnNlV2l0aCgoKSA9PiBwYXJzZXIucmVhZElQdjZBZGRyKCkpO1xufVxuLyoqIFBhcnNlIGBpbnB1dGAgaW50byBJUHY0IG9yIElQdjYgYnl0ZXMuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJUChpbnB1dCkge1xuICAgIC8vIHN0cmlwIHpvbmUgaW5kZXggaWYgaXQgaXMgcHJlc2VudFxuICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcIiVcIikpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zcGxpdChcIiVcIilbMF07XG4gICAgfVxuICAgIGlmIChpbnB1dC5sZW5ndGggPiBNQVhfSVBWNl9MRU5HVEgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlci5uZXcoaW5wdXQpLnBhcnNlV2l0aCgoKSA9PiBwYXJzZXIucmVhZElQQWRkcigpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLmpzLm1hcCJdLCJuYW1lcyI6WyJQYXJzZXIiLCJNQVhfSVBWNl9MRU5HVEgiLCJNQVhfSVBWNF9MRU5HVEgiLCJwYXJzZXIiLCJwYXJzZUlQdjQiLCJpbnB1dCIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm5ldyIsInBhcnNlV2l0aCIsInJlYWRJUHY0QWRkciIsInBhcnNlSVB2NiIsImluY2x1ZGVzIiwic3BsaXQiLCJyZWFkSVB2NkFkZHIiLCJwYXJzZUlQIiwicmVhZElQQWRkciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/is-ip/lib/parse.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/is-ip/lib/parser.js":
/*!*****************************************************!*\
!*** ./node_modules/@chainsafe/is-ip/lib/parser.js ***!
\*****************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parser: () => (/* binding */ Parser)\n/* harmony export */ });\n/* eslint-disable @typescript-eslint/no-unsafe-return */ class Parser {\n new(input) {\n this.index = 0;\n this.input = input;\n return this;\n }\n /** Run a parser, and restore the pre-parse state if it fails. */ readAtomically(fn) {\n const index = this.index;\n const result = fn();\n if (result === undefined) {\n this.index = index;\n }\n return result;\n }\n /** Run a parser, but fail if the entire input wasn't consumed. Doesn't run atomically. */ parseWith(fn) {\n const result = fn();\n if (this.index !== this.input.length) {\n return undefined;\n }\n return result;\n }\n /** Peek the next character from the input */ peekChar() {\n if (this.index >= this.input.length) {\n return undefined;\n }\n return this.input[this.index];\n }\n /** Read the next character from the input */ readChar() {\n if (this.index >= this.input.length) {\n return undefined;\n }\n return this.input[this.index++];\n }\n /** Read the next character from the input if it matches the target. */ readGivenChar(target) {\n return this.readAtomically(()=>{\n const char = this.readChar();\n if (char !== target) {\n return undefined;\n }\n return char;\n });\n }\n /**\n * Helper for reading separators in an indexed loop. Reads the separator\n * character iff index > 0, then runs the parser. When used in a loop,\n * the separator character will only be read on index > 0 (see\n * readIPv4Addr for an example)\n */ readSeparator(sep, index, inner) {\n return this.readAtomically(()=>{\n if (index > 0) {\n if (this.readGivenChar(sep) === undefined) {\n return undefined;\n }\n }\n return inner();\n });\n }\n /**\n * Read a number off the front of the input in the given radix, stopping\n * at the first non-digit character or eof. Fails if the number has more\n * digits than max_digits or if there is no number.\n */ readNumber(radix, maxDigits, allowZeroPrefix, maxBytes) {\n return this.readAtomically(()=>{\n let result = 0;\n let digitCount = 0;\n const leadingChar = this.peekChar();\n if (leadingChar === undefined) {\n return undefined;\n }\n const hasLeadingZero = leadingChar === \"0\";\n const maxValue = 2 ** (8 * maxBytes) - 1;\n // eslint-disable-next-line no-constant-condition\n while(true){\n const digit = this.readAtomically(()=>{\n const char = this.readChar();\n if (char === undefined) {\n return undefined;\n }\n const num = Number.parseInt(char, radix);\n if (Number.isNaN(num)) {\n return undefined;\n }\n return num;\n });\n if (digit === undefined) {\n break;\n }\n result *= radix;\n result += digit;\n if (result > maxValue) {\n return undefined;\n }\n digitCount += 1;\n if (maxDigits !== undefined) {\n if (digitCount > maxDigits) {\n return undefined;\n }\n }\n }\n if (digitCount === 0) {\n return undefined;\n } else if (!allowZeroPrefix && hasLeadingZero && digitCount > 1) {\n return undefined;\n } else {\n return result;\n }\n });\n }\n /** Read an IPv4 address. */ readIPv4Addr() {\n return this.readAtomically(()=>{\n const out = new Uint8Array(4);\n for(let i = 0; i < out.length; i++){\n const ix = this.readSeparator(\".\", i, ()=>this.readNumber(10, 3, false, 1));\n if (ix === undefined) {\n return undefined;\n }\n out[i] = ix;\n }\n return out;\n });\n }\n /** Read an IPv6 Address. */ readIPv6Addr() {\n /**\n * Read a chunk of an IPv6 address into `groups`. Returns the number\n * of groups read, along with a bool indicating if an embedded\n * trailing IPv4 address was read. Specifically, read a series of\n * colon-separated IPv6 groups (0x0000 - 0xFFFF), with an optional\n * trailing embedded IPv4 address.\n */ const readGroups = (groups)=>{\n for(let i = 0; i < groups.length / 2; i++){\n const ix = i * 2;\n // Try to read a trailing embedded IPv4 address. There must be at least 4 groups left.\n if (i < groups.length - 3) {\n const ipv4 = this.readSeparator(\":\", i, ()=>this.readIPv4Addr());\n if (ipv4 !== undefined) {\n groups[ix] = ipv4[0];\n groups[ix + 1] = ipv4[1];\n groups[ix + 2] = ipv4[2];\n groups[ix + 3] = ipv4[3];\n return [\n ix + 4,\n true\n ];\n }\n }\n const group = this.readSeparator(\":\", i, ()=>this.readNumber(16, 4, true, 2));\n if (group === undefined) {\n return [\n ix,\n false\n ];\n }\n groups[ix] = group >> 8;\n groups[ix + 1] = group & 255;\n }\n return [\n groups.length,\n false\n ];\n };\n return this.readAtomically(()=>{\n // Read the front part of the address; either the whole thing, or up to the first ::\n const head = new Uint8Array(16);\n const [headSize, headIp4] = readGroups(head);\n if (headSize === 16) {\n return head;\n }\n // IPv4 part is not allowed before `::`\n if (headIp4) {\n return undefined;\n }\n // Read `::` if previous code parsed less than 8 groups.\n // `::` indicates one or more groups of 16 bits of zeros.\n if (this.readGivenChar(\":\") === undefined) {\n return undefined;\n }\n if (this.readGivenChar(\":\") === undefined) {\n return undefined;\n }\n // Read the back part of the address. The :: must contain at least one\n // set of zeroes, so our max length is 7.\n const tail = new Uint8Array(14);\n const limit = 16 - (headSize + 2);\n const [tailSize] = readGroups(tail.subarray(0, limit));\n // Concat the head and tail of the IP address\n head.set(tail.subarray(0, tailSize), 16 - tailSize);\n return head;\n });\n }\n /** Read an IP Address, either IPv4 or IPv6. */ readIPAddr() {\n return this.readIPv4Addr() ?? this.readIPv6Addr();\n }\n constructor(){\n this.index = 0;\n this.input = \"\";\n }\n} //# sourceMappingURL=parser.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9pcy1pcC9saWIvcGFyc2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxzREFBc0QsR0FDL0MsTUFBTUE7SUFHVEMsSUFBSUMsS0FBSyxFQUFFO1FBQ1AsSUFBSSxDQUFDQyxLQUFLLEdBQUc7UUFDYixJQUFJLENBQUNELEtBQUssR0FBR0E7UUFDYixPQUFPLElBQUk7SUFDZjtJQUNBLCtEQUErRCxHQUMvREUsZUFBZUMsRUFBRSxFQUFFO1FBQ2YsTUFBTUYsUUFBUSxJQUFJLENBQUNBLEtBQUs7UUFDeEIsTUFBTUcsU0FBU0Q7UUFDZixJQUFJQyxXQUFXQyxXQUFXO1lBQ3RCLElBQUksQ0FBQ0osS0FBSyxHQUFHQTtRQUNqQjtRQUNBLE9BQU9HO0lBQ1g7SUFDQSx3RkFBd0YsR0FDeEZFLFVBQVVILEVBQUUsRUFBRTtRQUNWLE1BQU1DLFNBQVNEO1FBQ2YsSUFBSSxJQUFJLENBQUNGLEtBQUssS0FBSyxJQUFJLENBQUNELEtBQUssQ0FBQ08sTUFBTSxFQUFFO1lBQ2xDLE9BQU9GO1FBQ1g7UUFDQSxPQUFPRDtJQUNYO0lBQ0EsMkNBQTJDLEdBQzNDSSxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUNQLEtBQUssSUFBSSxJQUFJLENBQUNELEtBQUssQ0FBQ08sTUFBTSxFQUFFO1lBQ2pDLE9BQU9GO1FBQ1g7UUFDQSxPQUFPLElBQUksQ0FBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDO0lBQ2pDO0lBQ0EsMkNBQTJDLEdBQzNDUSxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUNSLEtBQUssSUFBSSxJQUFJLENBQUNELEtBQUssQ0FBQ08sTUFBTSxFQUFFO1lBQ2pDLE9BQU9GO1FBQ1g7UUFDQSxPQUFPLElBQUksQ0FBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQ0MsS0FBSyxHQUFHO0lBQ25DO0lBQ0EscUVBQXFFLEdBQ3JFUyxjQUFjQyxNQUFNLEVBQUU7UUFDbEIsT0FBTyxJQUFJLENBQUNULGNBQWMsQ0FBQztZQUN2QixNQUFNVSxPQUFPLElBQUksQ0FBQ0gsUUFBUTtZQUMxQixJQUFJRyxTQUFTRCxRQUFRO2dCQUNqQixPQUFPTjtZQUNYO1lBQ0EsT0FBT087UUFDWDtJQUNKO0lBQ0E7Ozs7O0tBS0MsR0FDREMsY0FBY0MsR0FBRyxFQUFFYixLQUFLLEVBQUVjLEtBQUssRUFBRTtRQUM3QixPQUFPLElBQUksQ0FBQ2IsY0FBYyxDQUFDO1lBQ3ZCLElBQUlELFFBQVEsR0FBRztnQkFDWCxJQUFJLElBQUksQ0FBQ1MsYUFBYSxDQUFDSSxTQUFTVCxXQUFXO29CQUN2QyxPQUFPQTtnQkFDWDtZQUNKO1lBQ0EsT0FBT1U7UUFDWDtJQUNKO0lBQ0E7Ozs7S0FJQyxHQUNEQyxXQUFXQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxRQUFRLEVBQUU7UUFDcEQsT0FBTyxJQUFJLENBQUNsQixjQUFjLENBQUM7WUFDdkIsSUFBSUUsU0FBUztZQUNiLElBQUlpQixhQUFhO1lBQ2pCLE1BQU1DLGNBQWMsSUFBSSxDQUFDZCxRQUFRO1lBQ2pDLElBQUljLGdCQUFnQmpCLFdBQVc7Z0JBQzNCLE9BQU9BO1lBQ1g7WUFDQSxNQUFNa0IsaUJBQWlCRCxnQkFBZ0I7WUFDdkMsTUFBTUUsV0FBVyxLQUFNLEtBQUlKLFFBQU8sSUFBSztZQUN2QyxpREFBaUQ7WUFDakQsTUFBTyxLQUFNO2dCQUNULE1BQU1LLFFBQVEsSUFBSSxDQUFDdkIsY0FBYyxDQUFDO29CQUM5QixNQUFNVSxPQUFPLElBQUksQ0FBQ0gsUUFBUTtvQkFDMUIsSUFBSUcsU0FBU1AsV0FBVzt3QkFDcEIsT0FBT0E7b0JBQ1g7b0JBQ0EsTUFBTXFCLE1BQU1DLE9BQU9DLFFBQVEsQ0FBQ2hCLE1BQU1LO29CQUNsQyxJQUFJVSxPQUFPRSxLQUFLLENBQUNILE1BQU07d0JBQ25CLE9BQU9yQjtvQkFDWDtvQkFDQSxPQUFPcUI7Z0JBQ1g7Z0JBQ0EsSUFBSUQsVUFBVXBCLFdBQVc7b0JBQ3JCO2dCQUNKO2dCQUNBRCxVQUFVYTtnQkFDVmIsVUFBVXFCO2dCQUNWLElBQUlyQixTQUFTb0IsVUFBVTtvQkFDbkIsT0FBT25CO2dCQUNYO2dCQUNBZ0IsY0FBYztnQkFDZCxJQUFJSCxjQUFjYixXQUFXO29CQUN6QixJQUFJZ0IsYUFBYUgsV0FBVzt3QkFDeEIsT0FBT2I7b0JBQ1g7Z0JBQ0o7WUFDSjtZQUNBLElBQUlnQixlQUFlLEdBQUc7Z0JBQ2xCLE9BQU9oQjtZQUNYLE9BQ0ssSUFBSSxDQUFDYyxtQkFBbUJJLGtCQUFrQkYsYUFBYSxHQUFHO2dCQUMzRCxPQUFPaEI7WUFDWCxPQUNLO2dCQUNELE9BQU9EO1lBQ1g7UUFDSjtJQUNKO0lBQ0EsMEJBQTBCLEdBQzFCMEIsZUFBZTtRQUNYLE9BQU8sSUFBSSxDQUFDNUIsY0FBYyxDQUFDO1lBQ3ZCLE1BQU02QixNQUFNLElBQUlDLFdBQVc7WUFDM0IsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlGLElBQUl4QixNQUFNLEVBQUUwQixJQUFLO2dCQUNqQyxNQUFNQyxLQUFLLElBQUksQ0FBQ3JCLGFBQWEsQ0FBQyxLQUFLb0IsR0FBRyxJQUFNLElBQUksQ0FBQ2pCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsT0FBTztnQkFDMUUsSUFBSWtCLE9BQU83QixXQUFXO29CQUNsQixPQUFPQTtnQkFDWDtnQkFDQTBCLEdBQUcsQ0FBQ0UsRUFBRSxHQUFHQztZQUNiO1lBQ0EsT0FBT0g7UUFDWDtJQUNKO0lBQ0EsMEJBQTBCLEdBQzFCSSxlQUFlO1FBQ1g7Ozs7OztTQU1DLEdBQ0QsTUFBTUMsYUFBYSxDQUFDQztZQUNoQixJQUFLLElBQUlKLElBQUksR0FBR0EsSUFBSUksT0FBTzlCLE1BQU0sR0FBRyxHQUFHMEIsSUFBSztnQkFDeEMsTUFBTUMsS0FBS0QsSUFBSTtnQkFDZixzRkFBc0Y7Z0JBQ3RGLElBQUlBLElBQUlJLE9BQU85QixNQUFNLEdBQUcsR0FBRztvQkFDdkIsTUFBTStCLE9BQU8sSUFBSSxDQUFDekIsYUFBYSxDQUFDLEtBQUtvQixHQUFHLElBQU0sSUFBSSxDQUFDSCxZQUFZO29CQUMvRCxJQUFJUSxTQUFTakMsV0FBVzt3QkFDcEJnQyxNQUFNLENBQUNILEdBQUcsR0FBR0ksSUFBSSxDQUFDLEVBQUU7d0JBQ3BCRCxNQUFNLENBQUNILEtBQUssRUFBRSxHQUFHSSxJQUFJLENBQUMsRUFBRTt3QkFDeEJELE1BQU0sQ0FBQ0gsS0FBSyxFQUFFLEdBQUdJLElBQUksQ0FBQyxFQUFFO3dCQUN4QkQsTUFBTSxDQUFDSCxLQUFLLEVBQUUsR0FBR0ksSUFBSSxDQUFDLEVBQUU7d0JBQ3hCLE9BQU87NEJBQUNKLEtBQUs7NEJBQUc7eUJBQUs7b0JBQ3pCO2dCQUNKO2dCQUNBLE1BQU1LLFFBQVEsSUFBSSxDQUFDMUIsYUFBYSxDQUFDLEtBQUtvQixHQUFHLElBQU0sSUFBSSxDQUFDakIsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNO2dCQUM1RSxJQUFJdUIsVUFBVWxDLFdBQVc7b0JBQ3JCLE9BQU87d0JBQUM2Qjt3QkFBSTtxQkFBTTtnQkFDdEI7Z0JBQ0FHLE1BQU0sQ0FBQ0gsR0FBRyxHQUFHSyxTQUFTO2dCQUN0QkYsTUFBTSxDQUFDSCxLQUFLLEVBQUUsR0FBR0ssUUFBUTtZQUM3QjtZQUNBLE9BQU87Z0JBQUNGLE9BQU85QixNQUFNO2dCQUFFO2FBQU07UUFDakM7UUFDQSxPQUFPLElBQUksQ0FBQ0wsY0FBYyxDQUFDO1lBQ3ZCLG9GQUFvRjtZQUNwRixNQUFNc0MsT0FBTyxJQUFJUixXQUFXO1lBQzVCLE1BQU0sQ0FBQ1MsVUFBVUMsUUFBUSxHQUFHTixXQUFXSTtZQUN2QyxJQUFJQyxhQUFhLElBQUk7Z0JBQ2pCLE9BQU9EO1lBQ1g7WUFDQSx1Q0FBdUM7WUFDdkMsSUFBSUUsU0FBUztnQkFDVCxPQUFPckM7WUFDWDtZQUNBLHdEQUF3RDtZQUN4RCx5REFBeUQ7WUFDekQsSUFBSSxJQUFJLENBQUNLLGFBQWEsQ0FBQyxTQUFTTCxXQUFXO2dCQUN2QyxPQUFPQTtZQUNYO1lBQ0EsSUFBSSxJQUFJLENBQUNLLGFBQWEsQ0FBQyxTQUFTTCxXQUFXO2dCQUN2QyxPQUFPQTtZQUNYO1lBQ0Esc0VBQXNFO1lBQ3RFLHlDQUF5QztZQUN6QyxNQUFNc0MsT0FBTyxJQUFJWCxXQUFXO1lBQzVCLE1BQU1ZLFFBQVEsS0FBTUgsQ0FBQUEsV0FBVztZQUMvQixNQUFNLENBQUNJLFNBQVMsR0FBR1QsV0FBV08sS0FBS0csUUFBUSxDQUFDLEdBQUdGO1lBQy9DLDZDQUE2QztZQUM3Q0osS0FBS08sR0FBRyxDQUFDSixLQUFLRyxRQUFRLENBQUMsR0FBR0QsV0FBVyxLQUFLQTtZQUMxQyxPQUFPTDtRQUNYO0lBQ0o7SUFDQSw2Q0FBNkMsR0FDN0NRLGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQ2xCLFlBQVksTUFBTSxJQUFJLENBQUNLLFlBQVk7SUFDbkQ7O2FBcE1BbEMsUUFBUTthQUNSRCxRQUFROztBQW9NWixFQUNBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvaXMtaXAvbGliL3BhcnNlci5qcz85YzA0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuICovXG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcbiAgICBpbmRleCA9IDA7XG4gICAgaW5wdXQgPSBcIlwiO1xuICAgIG5ldyhpbnB1dCkge1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqIFJ1biBhIHBhcnNlciwgYW5kIHJlc3RvcmUgdGhlIHByZS1wYXJzZSBzdGF0ZSBpZiBpdCBmYWlscy4gKi9cbiAgICByZWFkQXRvbWljYWxseShmbikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKCk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKiBSdW4gYSBwYXJzZXIsIGJ1dCBmYWlsIGlmIHRoZSBlbnRpcmUgaW5wdXQgd2Fzbid0IGNvbnN1bWVkLiBEb2Vzbid0IHJ1biBhdG9taWNhbGx5LiAqL1xuICAgIHBhcnNlV2l0aChmbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmbigpO1xuICAgICAgICBpZiAodGhpcy5pbmRleCAhPT0gdGhpcy5pbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqIFBlZWsgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGlucHV0ICovXG4gICAgcGVla0NoYXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0W3RoaXMuaW5kZXhdO1xuICAgIH1cbiAgICAvKiogUmVhZCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgaW5wdXQgKi9cbiAgICByZWFkQ2hhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRbdGhpcy5pbmRleCsrXTtcbiAgICB9XG4gICAgLyoqIFJlYWQgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGlucHV0IGlmIGl0IG1hdGNoZXMgdGhlIHRhcmdldC4gKi9cbiAgICByZWFkR2l2ZW5DaGFyKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQXRvbWljYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGFyID0gdGhpcy5yZWFkQ2hhcigpO1xuICAgICAgICAgICAgaWYgKGNoYXIgIT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hhcjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmb3IgcmVhZGluZyBzZXBhcmF0b3JzIGluIGFuIGluZGV4ZWQgbG9vcC4gUmVhZHMgdGhlIHNlcGFyYXRvclxuICAgICAqIGNoYXJhY3RlciBpZmYgaW5kZXggPiAwLCB0aGVuIHJ1bnMgdGhlIHBhcnNlci4gV2hlbiB1c2VkIGluIGEgbG9vcCxcbiAgICAgKiB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciB3aWxsIG9ubHkgYmUgcmVhZCBvbiBpbmRleCA+IDAgKHNlZVxuICAgICAqIHJlYWRJUHY0QWRkciBmb3IgYW4gZXhhbXBsZSlcbiAgICAgKi9cbiAgICByZWFkU2VwYXJhdG9yKHNlcCwgaW5kZXgsIGlubmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRBdG9taWNhbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkR2l2ZW5DaGFyKHNlcCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbm5lcigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIG51bWJlciBvZmYgdGhlIGZyb250IG9mIHRoZSBpbnB1dCBpbiB0aGUgZ2l2ZW4gcmFkaXgsIHN0b3BwaW5nXG4gICAgICogYXQgdGhlIGZpcnN0IG5vbi1kaWdpdCBjaGFyYWN0ZXIgb3IgZW9mLiBGYWlscyBpZiB0aGUgbnVtYmVyIGhhcyBtb3JlXG4gICAgICogZGlnaXRzIHRoYW4gbWF4X2RpZ2l0cyBvciBpZiB0aGVyZSBpcyBubyBudW1iZXIuXG4gICAgICovXG4gICAgcmVhZE51bWJlcihyYWRpeCwgbWF4RGlnaXRzLCBhbGxvd1plcm9QcmVmaXgsIG1heEJ5dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRBdG9taWNhbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICAgICAgbGV0IGRpZ2l0Q291bnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgbGVhZGluZ0NoYXIgPSB0aGlzLnBlZWtDaGFyKCk7XG4gICAgICAgICAgICBpZiAobGVhZGluZ0NoYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYXNMZWFkaW5nWmVybyA9IGxlYWRpbmdDaGFyID09PSBcIjBcIjtcbiAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gMiAqKiAoOCAqIG1heEJ5dGVzKSAtIDE7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpZ2l0ID0gdGhpcy5yZWFkQXRvbWljYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgPSB0aGlzLnJlYWRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyLnBhcnNlSW50KGNoYXIsIHJhZGl4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCAqPSByYWRpeDtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gZGlnaXQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA+IG1heFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpZ2l0Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAobWF4RGlnaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0Q291bnQgPiBtYXhEaWdpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGlnaXRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghYWxsb3daZXJvUHJlZml4ICYmIGhhc0xlYWRpbmdaZXJvICYmIGRpZ2l0Q291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiogUmVhZCBhbiBJUHY0IGFkZHJlc3MuICovXG4gICAgcmVhZElQdjRBZGRyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQXRvbWljYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXggPSB0aGlzLnJlYWRTZXBhcmF0b3IoXCIuXCIsIGksICgpID0+IHRoaXMucmVhZE51bWJlcigxMCwgMywgZmFsc2UsIDEpKTtcbiAgICAgICAgICAgICAgICBpZiAoaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXRbaV0gPSBpeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiogUmVhZCBhbiBJUHY2IEFkZHJlc3MuICovXG4gICAgcmVhZElQdjZBZGRyKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVhZCBhIGNodW5rIG9mIGFuIElQdjYgYWRkcmVzcyBpbnRvIGBncm91cHNgLiBSZXR1cm5zIHRoZSBudW1iZXJcbiAgICAgICAgICogb2YgZ3JvdXBzIHJlYWQsIGFsb25nIHdpdGggYSBib29sIGluZGljYXRpbmcgaWYgYW4gZW1iZWRkZWRcbiAgICAgICAgICogdHJhaWxpbmcgSVB2NCBhZGRyZXNzIHdhcyByZWFkLiBTcGVjaWZpY2FsbHksIHJlYWQgYSBzZXJpZXMgb2ZcbiAgICAgICAgICogY29sb24tc2VwYXJhdGVkIElQdjYgZ3JvdXBzICgweDAwMDAgLSAweEZGRkYpLCB3aXRoIGFuIG9wdGlvbmFsXG4gICAgICAgICAqIHRyYWlsaW5nIGVtYmVkZGVkIElQdjQgYWRkcmVzcy5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHJlYWRHcm91cHMgPSAoZ3JvdXBzKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpeCA9IGkgKiAyO1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byByZWFkIGEgdHJhaWxpbmcgZW1iZWRkZWQgSVB2NCBhZGRyZXNzLiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDQgZ3JvdXBzIGxlZnQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPCBncm91cHMubGVuZ3RoIC0gMykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpcHY0ID0gdGhpcy5yZWFkU2VwYXJhdG9yKFwiOlwiLCBpLCAoKSA9PiB0aGlzLnJlYWRJUHY0QWRkcigpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlwdjQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2l4XSA9IGlwdjRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbaXggKyAxXSA9IGlwdjRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbaXggKyAyXSA9IGlwdjRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbaXggKyAzXSA9IGlwdjRbM107XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2l4ICsgNCwgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlYWRTZXBhcmF0b3IoXCI6XCIsIGksICgpID0+IHRoaXMucmVhZE51bWJlcigxNiwgNCwgdHJ1ZSwgMikpO1xuICAgICAgICAgICAgICAgIGlmIChncm91cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbaXgsIGZhbHNlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBzW2l4XSA9IGdyb3VwID4+IDg7XG4gICAgICAgICAgICAgICAgZ3JvdXBzW2l4ICsgMV0gPSBncm91cCAmIDI1NTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbZ3JvdXBzLmxlbmd0aCwgZmFsc2VdO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQXRvbWljYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBSZWFkIHRoZSBmcm9udCBwYXJ0IG9mIHRoZSBhZGRyZXNzOyBlaXRoZXIgdGhlIHdob2xlIHRoaW5nLCBvciB1cCB0byB0aGUgZmlyc3QgOjpcbiAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgICAgICBjb25zdCBbaGVhZFNpemUsIGhlYWRJcDRdID0gcmVhZEdyb3VwcyhoZWFkKTtcbiAgICAgICAgICAgIGlmIChoZWFkU2l6ZSA9PT0gMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGVhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElQdjQgcGFydCBpcyBub3QgYWxsb3dlZCBiZWZvcmUgYDo6YFxuICAgICAgICAgICAgaWYgKGhlYWRJcDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVhZCBgOjpgIGlmIHByZXZpb3VzIGNvZGUgcGFyc2VkIGxlc3MgdGhhbiA4IGdyb3Vwcy5cbiAgICAgICAgICAgIC8vIGA6OmAgaW5kaWNhdGVzIG9uZSBvciBtb3JlIGdyb3VwcyBvZiAxNiBiaXRzIG9mIHplcm9zLlxuICAgICAgICAgICAgaWYgKHRoaXMucmVhZEdpdmVuQ2hhcihcIjpcIikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkR2l2ZW5DaGFyKFwiOlwiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlYWQgdGhlIGJhY2sgcGFydCBvZiB0aGUgYWRkcmVzcy4gVGhlIDo6IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHNldCBvZiB6ZXJvZXMsIHNvIG91ciBtYXggbGVuZ3RoIGlzIDcuXG4gICAgICAgICAgICBjb25zdCB0YWlsID0gbmV3IFVpbnQ4QXJyYXkoMTQpO1xuICAgICAgICAgICAgY29uc3QgbGltaXQgPSAxNiAtIChoZWFkU2l6ZSArIDIpO1xuICAgICAgICAgICAgY29uc3QgW3RhaWxTaXplXSA9IHJlYWRHcm91cHModGFpbC5zdWJhcnJheSgwLCBsaW1pdCkpO1xuICAgICAgICAgICAgLy8gQ29uY2F0IHRoZSBoZWFkIGFuZCB0YWlsIG9mIHRoZSBJUCBhZGRyZXNzXG4gICAgICAgICAgICBoZWFkLnNldCh0YWlsLnN1YmFycmF5KDAsIHRhaWxTaXplKSwgMTYgLSB0YWlsU2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gaGVhZDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBSZWFkIGFuIElQIEFkZHJlc3MsIGVpdGhlciBJUHY0IG9yIElQdjYuICovXG4gICAgcmVhZElQQWRkcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZElQdjRBZGRyKCkgPz8gdGhpcy5yZWFkSVB2NkFkZHIoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZXIuanMubWFwIl0sIm5hbWVzIjpbIlBhcnNlciIsIm5ldyIsImlucHV0IiwiaW5kZXgiLCJyZWFkQXRvbWljYWxseSIsImZuIiwicmVzdWx0IiwidW5kZWZpbmVkIiwicGFyc2VXaXRoIiwibGVuZ3RoIiwicGVla0NoYXIiLCJyZWFkQ2hhciIsInJlYWRHaXZlbkNoYXIiLCJ0YXJnZXQiLCJjaGFyIiwicmVhZFNlcGFyYXRvciIsInNlcCIsImlubmVyIiwicmVhZE51bWJlciIsInJhZGl4IiwibWF4RGlnaXRzIiwiYWxsb3daZXJvUHJlZml4IiwibWF4Qnl0ZXMiLCJkaWdpdENvdW50IiwibGVhZGluZ0NoYXIiLCJoYXNMZWFkaW5nWmVybyIsIm1heFZhbHVlIiwiZGlnaXQiLCJudW0iLCJOdW1iZXIiLCJwYXJzZUludCIsImlzTmFOIiwicmVhZElQdjRBZGRyIiwib3V0IiwiVWludDhBcnJheSIsImkiLCJpeCIsInJlYWRJUHY2QWRkciIsInJlYWRHcm91cHMiLCJncm91cHMiLCJpcHY0IiwiZ3JvdXAiLCJoZWFkIiwiaGVhZFNpemUiLCJoZWFkSXA0IiwidGFpbCIsImxpbWl0IiwidGFpbFNpemUiLCJzdWJhcnJheSIsInNldCIsInJlYWRJUEFkZHIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/is-ip/lib/parser.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/constants.js":
/*!************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/constants.js ***!
\************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ACCEPT_FROM_WHITELIST_DURATION_MS: () => (/* binding */ ACCEPT_FROM_WHITELIST_DURATION_MS),\n/* harmony export */ ACCEPT_FROM_WHITELIST_MAX_MESSAGES: () => (/* binding */ ACCEPT_FROM_WHITELIST_MAX_MESSAGES),\n/* harmony export */ ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE: () => (/* binding */ ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE),\n/* harmony export */ BACKOFF_SLACK: () => (/* binding */ BACKOFF_SLACK),\n/* harmony export */ DEFAULT_METRIC_MESH_MESSAGE_DELIVERIES_WINDOWS: () => (/* binding */ DEFAULT_METRIC_MESH_MESSAGE_DELIVERIES_WINDOWS),\n/* harmony export */ ERR_TOPIC_VALIDATOR_IGNORE: () => (/* binding */ ERR_TOPIC_VALIDATOR_IGNORE),\n/* harmony export */ ERR_TOPIC_VALIDATOR_REJECT: () => (/* binding */ ERR_TOPIC_VALIDATOR_REJECT),\n/* harmony export */ FloodsubID: () => (/* binding */ FloodsubID),\n/* harmony export */ GossipsubConnectionTimeout: () => (/* binding */ GossipsubConnectionTimeout),\n/* harmony export */ GossipsubConnectors: () => (/* binding */ GossipsubConnectors),\n/* harmony export */ GossipsubD: () => (/* binding */ GossipsubD),\n/* harmony export */ GossipsubDhi: () => (/* binding */ GossipsubDhi),\n/* harmony export */ GossipsubDirectConnectInitialDelay: () => (/* binding */ GossipsubDirectConnectInitialDelay),\n/* harmony export */ GossipsubDirectConnectTicks: () => (/* binding */ GossipsubDirectConnectTicks),\n/* harmony export */ GossipsubDlazy: () => (/* binding */ GossipsubDlazy),\n/* harmony export */ GossipsubDlo: () => (/* binding */ GossipsubDlo),\n/* harmony export */ GossipsubDout: () => (/* binding */ GossipsubDout),\n/* harmony export */ GossipsubDscore: () => (/* binding */ GossipsubDscore),\n/* harmony export */ GossipsubFanoutTTL: () => (/* binding */ GossipsubFanoutTTL),\n/* harmony export */ GossipsubGossipFactor: () => (/* binding */ GossipsubGossipFactor),\n/* harmony export */ GossipsubGossipRetransmission: () => (/* binding */ GossipsubGossipRetransmission),\n/* harmony export */ GossipsubGraftFloodThreshold: () => (/* binding */ GossipsubGraftFloodThreshold),\n/* harmony export */ GossipsubHeartbeatInitialDelay: () => (/* binding */ GossipsubHeartbeatInitialDelay),\n/* harmony export */ GossipsubHeartbeatInterval: () => (/* binding */ GossipsubHeartbeatInterval),\n/* harmony export */ GossipsubHistoryGossip: () => (/* binding */ GossipsubHistoryGossip),\n/* harmony export */ GossipsubHistoryLength: () => (/* binding */ GossipsubHistoryLength),\n/* harmony export */ GossipsubIDv10: () => (/* binding */ GossipsubIDv10),\n/* harmony export */ GossipsubIDv11: () => (/* binding */ GossipsubIDv11),\n/* harmony export */ GossipsubIWantFollowupTime: () => (/* binding */ GossipsubIWantFollowupTime),\n/* harmony export */ GossipsubMaxIHaveLength: () => (/* binding */ GossipsubMaxIHaveLength),\n/* harmony export */ GossipsubMaxIHaveMessages: () => (/* binding */ GossipsubMaxIHaveMessages),\n/* harmony export */ GossipsubMaxPendingConnections: () => (/* binding */ GossipsubMaxPendingConnections),\n/* harmony export */ GossipsubOpportunisticGraftPeers: () => (/* binding */ GossipsubOpportunisticGraftPeers),\n/* harmony export */ GossipsubOpportunisticGraftTicks: () => (/* binding */ GossipsubOpportunisticGraftTicks),\n/* harmony export */ GossipsubPruneBackoff: () => (/* binding */ GossipsubPruneBackoff),\n/* harmony export */ GossipsubPruneBackoffTicks: () => (/* binding */ GossipsubPruneBackoffTicks),\n/* harmony export */ GossipsubPrunePeers: () => (/* binding */ GossipsubPrunePeers),\n/* harmony export */ GossipsubSeenTTL: () => (/* binding */ GossipsubSeenTTL),\n/* harmony export */ GossipsubUnsubscribeBackoff: () => (/* binding */ GossipsubUnsubscribeBackoff),\n/* harmony export */ TimeCacheDuration: () => (/* binding */ TimeCacheDuration),\n/* harmony export */ minute: () => (/* binding */ minute),\n/* harmony export */ second: () => (/* binding */ second)\n/* harmony export */ });\nconst second = 1000;\nconst minute = 60 * second;\n// Protocol identifiers\nconst FloodsubID = \"/floodsub/1.0.0\";\n/**\n * The protocol ID for version 1.0.0 of the Gossipsub protocol\n * It is advertised along with GossipsubIDv11 for backwards compatability\n */ const GossipsubIDv10 = \"/meshsub/1.0.0\";\n/**\n * The protocol ID for version 1.1.0 of the Gossipsub protocol\n * See the spec for details about how v1.1.0 compares to v1.0.0:\n * https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md\n */ const GossipsubIDv11 = \"/meshsub/1.1.0\";\n// Overlay parameters\n/**\n * GossipsubD sets the optimal degree for a Gossipsub topic mesh. For example, if GossipsubD == 6,\n * each peer will want to have about six peers in their mesh for each topic they're subscribed to.\n * GossipsubD should be set somewhere between GossipsubDlo and GossipsubDhi.\n */ const GossipsubD = 6;\n/**\n * GossipsubDlo sets the lower bound on the number of peers we keep in a Gossipsub topic mesh.\n * If we have fewer than GossipsubDlo peers, we will attempt to graft some more into the mesh at\n * the next heartbeat.\n */ const GossipsubDlo = 4;\n/**\n * GossipsubDhi sets the upper bound on the number of peers we keep in a Gossipsub topic mesh.\n * If we have more than GossipsubDhi peers, we will select some to prune from the mesh at the next heartbeat.\n */ const GossipsubDhi = 12;\n/**\n * GossipsubDscore affects how peers are selected when pruning a mesh due to over subscription.\n * At least GossipsubDscore of the retained peers will be high-scoring, while the remainder are\n * chosen randomly.\n */ const GossipsubDscore = 4;\n/**\n * GossipsubDout sets the quota for the number of outbound connections to maintain in a topic mesh.\n * When the mesh is pruned due to over subscription, we make sure that we have outbound connections\n * to at least GossipsubDout of the survivor peers. This prevents sybil attackers from overwhelming\n * our mesh with incoming connections.\n *\n * GossipsubDout must be set below GossipsubDlo, and must not exceed GossipsubD / 2.\n */ const GossipsubDout = 2;\n// Gossip parameters\n/**\n * GossipsubHistoryLength controls the size of the message cache used for gossip.\n * The message cache will remember messages for GossipsubHistoryLength heartbeats.\n */ const GossipsubHistoryLength = 5;\n/**\n * GossipsubHistoryGossip controls how many cached message ids we will advertise in\n * IHAVE gossip messages. When asked for our seen message IDs, we will return\n * only those from the most recent GossipsubHistoryGossip heartbeats. The slack between\n * GossipsubHistoryGossip and GossipsubHistoryLength allows us to avoid advertising messages\n * that will be expired by the time they're requested.\n *\n * GossipsubHistoryGossip must be less than or equal to GossipsubHistoryLength to\n * avoid a runtime panic.\n */ const GossipsubHistoryGossip = 3;\n/**\n * GossipsubDlazy affects how many peers we will emit gossip to at each heartbeat.\n * We will send gossip to at least GossipsubDlazy peers outside our mesh. The actual\n * number may be more, depending on GossipsubGossipFactor and how many peers we're\n * connected to.\n */ const GossipsubDlazy = 6;\n/**\n * GossipsubGossipFactor affects how many peers we will emit gossip to at each heartbeat.\n * We will send gossip to GossipsubGossipFactor * (total number of non-mesh peers), or\n * GossipsubDlazy, whichever is greater.\n */ const GossipsubGossipFactor = 0.25;\n/**\n * GossipsubGossipRetransmission controls how many times we will allow a peer to request\n * the same message id through IWANT gossip before we start ignoring them. This is designed\n * to prevent peers from spamming us with requests and wasting our resources.\n */ const GossipsubGossipRetransmission = 3;\n// Heartbeat interval\n/**\n * GossipsubHeartbeatInitialDelay is the short delay before the heartbeat timer begins\n * after the router is initialized.\n */ const GossipsubHeartbeatInitialDelay = 100;\n/**\n * GossipsubHeartbeatInterval controls the time between heartbeats.\n */ const GossipsubHeartbeatInterval = second;\n/**\n * GossipsubFanoutTTL controls how long we keep track of the fanout state. If it's been\n * GossipsubFanoutTTL since we've published to a topic that we're not subscribed to,\n * we'll delete the fanout map for that topic.\n */ const GossipsubFanoutTTL = minute;\n/**\n * GossipsubPrunePeers controls the number of peers to include in prune Peer eXchange.\n * When we prune a peer that's eligible for PX (has a good score, etc), we will try to\n * send them signed peer records for up to GossipsubPrunePeers other peers that we\n * know of.\n */ const GossipsubPrunePeers = 16;\n/**\n * GossipsubPruneBackoff controls the backoff time for pruned peers. This is how long\n * a peer must wait before attempting to graft into our mesh again after being pruned.\n * When pruning a peer, we send them our value of GossipsubPruneBackoff so they know\n * the minimum time to wait. Peers running older versions may not send a backoff time,\n * so if we receive a prune message without one, we will wait at least GossipsubPruneBackoff\n * before attempting to re-graft.\n */ const GossipsubPruneBackoff = minute;\n/**\n * Backoff to use when unsuscribing from a topic. Should not resubscribe to this topic before it expired.\n */ const GossipsubUnsubscribeBackoff = 10 * second;\n/**\n * GossipsubPruneBackoffTicks is the number of heartbeat ticks for attempting to prune expired\n * backoff timers.\n */ const GossipsubPruneBackoffTicks = 15;\n/**\n * GossipsubConnectors controls the number of active connection attempts for peers obtained through PX.\n */ const GossipsubConnectors = 8;\n/**\n * GossipsubMaxPendingConnections sets the maximum number of pending connections for peers attempted through px.\n */ const GossipsubMaxPendingConnections = 128;\n/**\n * GossipsubConnectionTimeout controls the timeout for connection attempts.\n */ const GossipsubConnectionTimeout = 30 * second;\n/**\n * GossipsubDirectConnectTicks is the number of heartbeat ticks for attempting to reconnect direct peers\n * that are not currently connected.\n */ const GossipsubDirectConnectTicks = 300;\n/**\n * GossipsubDirectConnectInitialDelay is the initial delay before opening connections to direct peers\n */ const GossipsubDirectConnectInitialDelay = second;\n/**\n * GossipsubOpportunisticGraftTicks is the number of heartbeat ticks for attempting to improve the mesh\n * with opportunistic grafting. Every GossipsubOpportunisticGraftTicks we will attempt to select some\n * high-scoring mesh peers to replace lower-scoring ones, if the median score of our mesh peers falls\n * below a threshold\n */ const GossipsubOpportunisticGraftTicks = 60;\n/**\n * GossipsubOpportunisticGraftPeers is the number of peers to opportunistically graft.\n */ const GossipsubOpportunisticGraftPeers = 2;\n/**\n * If a GRAFT comes before GossipsubGraftFloodThreshold has elapsed since the last PRUNE,\n * then there is an extra score penalty applied to the peer through P7.\n */ const GossipsubGraftFloodThreshold = 10 * second;\n/**\n * GossipsubMaxIHaveLength is the maximum number of messages to include in an IHAVE message.\n * Also controls the maximum number of IHAVE ids we will accept and request with IWANT from a\n * peer within a heartbeat, to protect from IHAVE floods. You should adjust this value from the\n * default if your system is pushing more than 5000 messages in GossipsubHistoryGossip heartbeats;\n * with the defaults this is 1666 messages/s.\n */ const GossipsubMaxIHaveLength = 5000;\n/**\n * GossipsubMaxIHaveMessages is the maximum number of IHAVE messages to accept from a peer within a heartbeat.\n */ const GossipsubMaxIHaveMessages = 10;\n/**\n * Time to wait for a message requested through IWANT following an IHAVE advertisement.\n * If the message is not received within this window, a broken promise is declared and\n * the router may apply bahavioural penalties.\n */ const GossipsubIWantFollowupTime = 3 * second;\n/**\n * Time in milliseconds to keep message ids in the seen cache\n */ const GossipsubSeenTTL = 2 * minute;\nconst TimeCacheDuration = 120 * 1000;\nconst ERR_TOPIC_VALIDATOR_REJECT = \"ERR_TOPIC_VALIDATOR_REJECT\";\nconst ERR_TOPIC_VALIDATOR_IGNORE = \"ERR_TOPIC_VALIDATOR_IGNORE\";\n/**\n * If peer score is better than this, we accept messages from this peer\n * within ACCEPT_FROM_WHITELIST_DURATION_MS from the last time computing score.\n **/ const ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE = 0;\n/**\n * If peer score >= ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE, accept up to this\n * number of messages from that peer.\n */ const ACCEPT_FROM_WHITELIST_MAX_MESSAGES = 128;\n/**\n * If peer score >= ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE, accept messages from\n * this peer up to this time duration.\n */ const ACCEPT_FROM_WHITELIST_DURATION_MS = 1000;\n/**\n * The default MeshMessageDeliveriesWindow to be used in metrics.\n */ const DEFAULT_METRIC_MESH_MESSAGE_DELIVERIES_WINDOWS = 1000;\n/** Wait for 1 more heartbeats before clearing a backoff */ const BACKOFF_SLACK = 1; //# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxNQUFNQSxTQUFTLEtBQUs7QUFDcEIsTUFBTUMsU0FBUyxLQUFLRCxPQUFPO0FBQ2xDLHVCQUF1QjtBQUNoQixNQUFNRSxhQUFhLGtCQUFrQjtBQUM1Qzs7O0NBR0MsR0FDTSxNQUFNQyxpQkFBaUIsaUJBQWlCO0FBQy9DOzs7O0NBSUMsR0FDTSxNQUFNQyxpQkFBaUIsaUJBQWlCO0FBQy9DLHFCQUFxQjtBQUNyQjs7OztDQUlDLEdBQ00sTUFBTUMsYUFBYSxFQUFFO0FBQzVCOzs7O0NBSUMsR0FDTSxNQUFNQyxlQUFlLEVBQUU7QUFDOUI7OztDQUdDLEdBQ00sTUFBTUMsZUFBZSxHQUFHO0FBQy9COzs7O0NBSUMsR0FDTSxNQUFNQyxrQkFBa0IsRUFBRTtBQUNqQzs7Ozs7OztDQU9DLEdBQ00sTUFBTUMsZ0JBQWdCLEVBQUU7QUFDL0Isb0JBQW9CO0FBQ3BCOzs7Q0FHQyxHQUNNLE1BQU1DLHlCQUF5QixFQUFFO0FBQ3hDOzs7Ozs7Ozs7Q0FTQyxHQUNNLE1BQU1DLHlCQUF5QixFQUFFO0FBQ3hDOzs7OztDQUtDLEdBQ00sTUFBTUMsaUJBQWlCLEVBQUU7QUFDaEM7Ozs7Q0FJQyxHQUNNLE1BQU1DLHdCQUF3QixLQUFLO0FBQzFDOzs7O0NBSUMsR0FDTSxNQUFNQyxnQ0FBZ0MsRUFBRTtBQUMvQyxxQkFBcUI7QUFDckI7OztDQUdDLEdBQ00sTUFBTUMsaUNBQWlDLElBQUk7QUFDbEQ7O0NBRUMsR0FDTSxNQUFNQyw2QkFBNkJoQixPQUFPO0FBQ2pEOzs7O0NBSUMsR0FDTSxNQUFNaUIscUJBQXFCaEIsT0FBTztBQUN6Qzs7Ozs7Q0FLQyxHQUNNLE1BQU1pQixzQkFBc0IsR0FBRztBQUN0Qzs7Ozs7OztDQU9DLEdBQ00sTUFBTUMsd0JBQXdCbEIsT0FBTztBQUM1Qzs7Q0FFQyxHQUNNLE1BQU1tQiw4QkFBOEIsS0FBS3BCLE9BQU87QUFDdkQ7OztDQUdDLEdBQ00sTUFBTXFCLDZCQUE2QixHQUFHO0FBQzdDOztDQUVDLEdBQ00sTUFBTUMsc0JBQXNCLEVBQUU7QUFDckM7O0NBRUMsR0FDTSxNQUFNQyxpQ0FBaUMsSUFBSTtBQUNsRDs7Q0FFQyxHQUNNLE1BQU1DLDZCQUE2QixLQUFLeEIsT0FBTztBQUN0RDs7O0NBR0MsR0FDTSxNQUFNeUIsOEJBQThCLElBQUk7QUFDL0M7O0NBRUMsR0FDTSxNQUFNQyxxQ0FBcUMxQixPQUFPO0FBQ3pEOzs7OztDQUtDLEdBQ00sTUFBTTJCLG1DQUFtQyxHQUFHO0FBQ25EOztDQUVDLEdBQ00sTUFBTUMsbUNBQW1DLEVBQUU7QUFDbEQ7OztDQUdDLEdBQ00sTUFBTUMsK0JBQStCLEtBQUs3QixPQUFPO0FBQ3hEOzs7Ozs7Q0FNQyxHQUNNLE1BQU04QiwwQkFBMEIsS0FBSztBQUM1Qzs7Q0FFQyxHQUNNLE1BQU1DLDRCQUE0QixHQUFHO0FBQzVDOzs7O0NBSUMsR0FDTSxNQUFNQyw2QkFBNkIsSUFBSWhDLE9BQU87QUFDckQ7O0NBRUMsR0FDTSxNQUFNaUMsbUJBQW1CLElBQUloQyxPQUFPO0FBQ3BDLE1BQU1pQyxvQkFBb0IsTUFBTSxLQUFLO0FBQ3JDLE1BQU1DLDZCQUE2Qiw2QkFBNkI7QUFDaEUsTUFBTUMsNkJBQTZCLDZCQUE2QjtBQUN2RTs7O0VBR0UsR0FDSyxNQUFNQyx3Q0FBd0MsRUFBRTtBQUN2RDs7O0NBR0MsR0FDTSxNQUFNQyxxQ0FBcUMsSUFBSTtBQUN0RDs7O0NBR0MsR0FDTSxNQUFNQyxvQ0FBb0MsS0FBSztBQUN0RDs7Q0FFQyxHQUNNLE1BQU1DLGlEQUFpRCxLQUFLO0FBQ25FLHlEQUF5RCxHQUNsRCxNQUFNQyxnQkFBZ0IsRUFBRSxDQUMvQixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvY29uc3RhbnRzLmpzPzM3NjYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHNlY29uZCA9IDEwMDA7XG5leHBvcnQgY29uc3QgbWludXRlID0gNjAgKiBzZWNvbmQ7XG4vLyBQcm90b2NvbCBpZGVudGlmaWVyc1xuZXhwb3J0IGNvbnN0IEZsb29kc3ViSUQgPSAnL2Zsb29kc3ViLzEuMC4wJztcbi8qKlxuICogVGhlIHByb3RvY29sIElEIGZvciB2ZXJzaW9uIDEuMC4wIG9mIHRoZSBHb3NzaXBzdWIgcHJvdG9jb2xcbiAqIEl0IGlzIGFkdmVydGlzZWQgYWxvbmcgd2l0aCBHb3NzaXBzdWJJRHYxMSBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHlcbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YklEdjEwID0gJy9tZXNoc3ViLzEuMC4wJztcbi8qKlxuICogVGhlIHByb3RvY29sIElEIGZvciB2ZXJzaW9uIDEuMS4wIG9mIHRoZSBHb3NzaXBzdWIgcHJvdG9jb2xcbiAqIFNlZSB0aGUgc3BlYyBmb3IgZGV0YWlscyBhYm91dCBob3cgdjEuMS4wIGNvbXBhcmVzIHRvIHYxLjAuMDpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJwMnAvc3BlY3MvYmxvYi9tYXN0ZXIvcHVic3ViL2dvc3NpcHN1Yi9nb3NzaXBzdWItdjEuMS5tZFxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViSUR2MTEgPSAnL21lc2hzdWIvMS4xLjAnO1xuLy8gT3ZlcmxheSBwYXJhbWV0ZXJzXG4vKipcbiAqIEdvc3NpcHN1YkQgc2V0cyB0aGUgb3B0aW1hbCBkZWdyZWUgZm9yIGEgR29zc2lwc3ViIHRvcGljIG1lc2guIEZvciBleGFtcGxlLCBpZiBHb3NzaXBzdWJEID09IDYsXG4gKiBlYWNoIHBlZXIgd2lsbCB3YW50IHRvIGhhdmUgYWJvdXQgc2l4IHBlZXJzIGluIHRoZWlyIG1lc2ggZm9yIGVhY2ggdG9waWMgdGhleSdyZSBzdWJzY3JpYmVkIHRvLlxuICogR29zc2lwc3ViRCBzaG91bGQgYmUgc2V0IHNvbWV3aGVyZSBiZXR3ZWVuIEdvc3NpcHN1YkRsbyBhbmQgR29zc2lwc3ViRGhpLlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViRCA9IDY7XG4vKipcbiAqIEdvc3NpcHN1YkRsbyBzZXRzIHRoZSBsb3dlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mIHBlZXJzIHdlIGtlZXAgaW4gYSBHb3NzaXBzdWIgdG9waWMgbWVzaC5cbiAqIElmIHdlIGhhdmUgZmV3ZXIgdGhhbiBHb3NzaXBzdWJEbG8gcGVlcnMsIHdlIHdpbGwgYXR0ZW1wdCB0byBncmFmdCBzb21lIG1vcmUgaW50byB0aGUgbWVzaCBhdFxuICogdGhlIG5leHQgaGVhcnRiZWF0LlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViRGxvID0gNDtcbi8qKlxuICogR29zc2lwc3ViRGhpIHNldHMgdGhlIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgcGVlcnMgd2Uga2VlcCBpbiBhIEdvc3NpcHN1YiB0b3BpYyBtZXNoLlxuICogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gR29zc2lwc3ViRGhpIHBlZXJzLCB3ZSB3aWxsIHNlbGVjdCBzb21lIHRvIHBydW5lIGZyb20gdGhlIG1lc2ggYXQgdGhlIG5leHQgaGVhcnRiZWF0LlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViRGhpID0gMTI7XG4vKipcbiAqIEdvc3NpcHN1YkRzY29yZSBhZmZlY3RzIGhvdyBwZWVycyBhcmUgc2VsZWN0ZWQgd2hlbiBwcnVuaW5nIGEgbWVzaCBkdWUgdG8gb3ZlciBzdWJzY3JpcHRpb24uXG4gKiBBdCBsZWFzdCBHb3NzaXBzdWJEc2NvcmUgb2YgdGhlIHJldGFpbmVkIHBlZXJzIHdpbGwgYmUgaGlnaC1zY29yaW5nLCB3aGlsZSB0aGUgcmVtYWluZGVyIGFyZVxuICogY2hvc2VuIHJhbmRvbWx5LlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViRHNjb3JlID0gNDtcbi8qKlxuICogR29zc2lwc3ViRG91dCBzZXRzIHRoZSBxdW90YSBmb3IgdGhlIG51bWJlciBvZiBvdXRib3VuZCBjb25uZWN0aW9ucyB0byBtYWludGFpbiBpbiBhIHRvcGljIG1lc2guXG4gKiBXaGVuIHRoZSBtZXNoIGlzIHBydW5lZCBkdWUgdG8gb3ZlciBzdWJzY3JpcHRpb24sIHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgb3V0Ym91bmQgY29ubmVjdGlvbnNcbiAqIHRvIGF0IGxlYXN0IEdvc3NpcHN1YkRvdXQgb2YgdGhlIHN1cnZpdm9yIHBlZXJzLiBUaGlzIHByZXZlbnRzIHN5YmlsIGF0dGFja2VycyBmcm9tIG92ZXJ3aGVsbWluZ1xuICogb3VyIG1lc2ggd2l0aCBpbmNvbWluZyBjb25uZWN0aW9ucy5cbiAqXG4gKiBHb3NzaXBzdWJEb3V0IG11c3QgYmUgc2V0IGJlbG93IEdvc3NpcHN1YkRsbywgYW5kIG11c3Qgbm90IGV4Y2VlZCBHb3NzaXBzdWJEIC8gMi5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YkRvdXQgPSAyO1xuLy8gR29zc2lwIHBhcmFtZXRlcnNcbi8qKlxuICogR29zc2lwc3ViSGlzdG9yeUxlbmd0aCBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSBjYWNoZSB1c2VkIGZvciBnb3NzaXAuXG4gKiBUaGUgbWVzc2FnZSBjYWNoZSB3aWxsIHJlbWVtYmVyIG1lc3NhZ2VzIGZvciBHb3NzaXBzdWJIaXN0b3J5TGVuZ3RoIGhlYXJ0YmVhdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBHb3NzaXBzdWJIaXN0b3J5TGVuZ3RoID0gNTtcbi8qKlxuICogR29zc2lwc3ViSGlzdG9yeUdvc3NpcCBjb250cm9scyBob3cgbWFueSBjYWNoZWQgbWVzc2FnZSBpZHMgd2Ugd2lsbCBhZHZlcnRpc2UgaW5cbiAqIElIQVZFIGdvc3NpcCBtZXNzYWdlcy4gV2hlbiBhc2tlZCBmb3Igb3VyIHNlZW4gbWVzc2FnZSBJRHMsIHdlIHdpbGwgcmV0dXJuXG4gKiBvbmx5IHRob3NlIGZyb20gdGhlIG1vc3QgcmVjZW50IEdvc3NpcHN1Ykhpc3RvcnlHb3NzaXAgaGVhcnRiZWF0cy4gVGhlIHNsYWNrIGJldHdlZW5cbiAqIEdvc3NpcHN1Ykhpc3RvcnlHb3NzaXAgYW5kIEdvc3NpcHN1Ykhpc3RvcnlMZW5ndGggYWxsb3dzIHVzIHRvIGF2b2lkIGFkdmVydGlzaW5nIG1lc3NhZ2VzXG4gKiB0aGF0IHdpbGwgYmUgZXhwaXJlZCBieSB0aGUgdGltZSB0aGV5J3JlIHJlcXVlc3RlZC5cbiAqXG4gKiBHb3NzaXBzdWJIaXN0b3J5R29zc2lwIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIEdvc3NpcHN1Ykhpc3RvcnlMZW5ndGggdG9cbiAqIGF2b2lkIGEgcnVudGltZSBwYW5pYy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1Ykhpc3RvcnlHb3NzaXAgPSAzO1xuLyoqXG4gKiBHb3NzaXBzdWJEbGF6eSBhZmZlY3RzIGhvdyBtYW55IHBlZXJzIHdlIHdpbGwgZW1pdCBnb3NzaXAgdG8gYXQgZWFjaCBoZWFydGJlYXQuXG4gKiBXZSB3aWxsIHNlbmQgZ29zc2lwIHRvIGF0IGxlYXN0IEdvc3NpcHN1YkRsYXp5IHBlZXJzIG91dHNpZGUgb3VyIG1lc2guIFRoZSBhY3R1YWxcbiAqIG51bWJlciBtYXkgYmUgbW9yZSwgZGVwZW5kaW5nIG9uIEdvc3NpcHN1Ykdvc3NpcEZhY3RvciBhbmQgaG93IG1hbnkgcGVlcnMgd2UncmVcbiAqIGNvbm5lY3RlZCB0by5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YkRsYXp5ID0gNjtcbi8qKlxuICogR29zc2lwc3ViR29zc2lwRmFjdG9yIGFmZmVjdHMgaG93IG1hbnkgcGVlcnMgd2Ugd2lsbCBlbWl0IGdvc3NpcCB0byBhdCBlYWNoIGhlYXJ0YmVhdC5cbiAqIFdlIHdpbGwgc2VuZCBnb3NzaXAgdG8gR29zc2lwc3ViR29zc2lwRmFjdG9yICogKHRvdGFsIG51bWJlciBvZiBub24tbWVzaCBwZWVycyksIG9yXG4gKiBHb3NzaXBzdWJEbGF6eSwgd2hpY2hldmVyIGlzIGdyZWF0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBHb3NzaXBzdWJHb3NzaXBGYWN0b3IgPSAwLjI1O1xuLyoqXG4gKiBHb3NzaXBzdWJHb3NzaXBSZXRyYW5zbWlzc2lvbiBjb250cm9scyBob3cgbWFueSB0aW1lcyB3ZSB3aWxsIGFsbG93IGEgcGVlciB0byByZXF1ZXN0XG4gKiB0aGUgc2FtZSBtZXNzYWdlIGlkIHRocm91Z2ggSVdBTlQgZ29zc2lwIGJlZm9yZSB3ZSBzdGFydCBpZ25vcmluZyB0aGVtLiBUaGlzIGlzIGRlc2lnbmVkXG4gKiB0byBwcmV2ZW50IHBlZXJzIGZyb20gc3BhbW1pbmcgdXMgd2l0aCByZXF1ZXN0cyBhbmQgd2FzdGluZyBvdXIgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViR29zc2lwUmV0cmFuc21pc3Npb24gPSAzO1xuLy8gSGVhcnRiZWF0IGludGVydmFsXG4vKipcbiAqIEdvc3NpcHN1YkhlYXJ0YmVhdEluaXRpYWxEZWxheSBpcyB0aGUgc2hvcnQgZGVsYXkgYmVmb3JlIHRoZSBoZWFydGJlYXQgdGltZXIgYmVnaW5zXG4gKiBhZnRlciB0aGUgcm91dGVyIGlzIGluaXRpYWxpemVkLlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViSGVhcnRiZWF0SW5pdGlhbERlbGF5ID0gMTAwO1xuLyoqXG4gKiBHb3NzaXBzdWJIZWFydGJlYXRJbnRlcnZhbCBjb250cm9scyB0aGUgdGltZSBiZXR3ZWVuIGhlYXJ0YmVhdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBHb3NzaXBzdWJIZWFydGJlYXRJbnRlcnZhbCA9IHNlY29uZDtcbi8qKlxuICogR29zc2lwc3ViRmFub3V0VFRMIGNvbnRyb2xzIGhvdyBsb25nIHdlIGtlZXAgdHJhY2sgb2YgdGhlIGZhbm91dCBzdGF0ZS4gSWYgaXQncyBiZWVuXG4gKiBHb3NzaXBzdWJGYW5vdXRUVEwgc2luY2Ugd2UndmUgcHVibGlzaGVkIHRvIGEgdG9waWMgdGhhdCB3ZSdyZSBub3Qgc3Vic2NyaWJlZCB0byxcbiAqIHdlJ2xsIGRlbGV0ZSB0aGUgZmFub3V0IG1hcCBmb3IgdGhhdCB0b3BpYy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YkZhbm91dFRUTCA9IG1pbnV0ZTtcbi8qKlxuICogR29zc2lwc3ViUHJ1bmVQZWVycyBjb250cm9scyB0aGUgbnVtYmVyIG9mIHBlZXJzIHRvIGluY2x1ZGUgaW4gcHJ1bmUgUGVlciBlWGNoYW5nZS5cbiAqIFdoZW4gd2UgcHJ1bmUgYSBwZWVyIHRoYXQncyBlbGlnaWJsZSBmb3IgUFggKGhhcyBhIGdvb2Qgc2NvcmUsIGV0YyksIHdlIHdpbGwgdHJ5IHRvXG4gKiBzZW5kIHRoZW0gc2lnbmVkIHBlZXIgcmVjb3JkcyBmb3IgdXAgdG8gR29zc2lwc3ViUHJ1bmVQZWVycyBvdGhlciBwZWVycyB0aGF0IHdlXG4gKiBrbm93IG9mLlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViUHJ1bmVQZWVycyA9IDE2O1xuLyoqXG4gKiBHb3NzaXBzdWJQcnVuZUJhY2tvZmYgY29udHJvbHMgdGhlIGJhY2tvZmYgdGltZSBmb3IgcHJ1bmVkIHBlZXJzLiBUaGlzIGlzIGhvdyBsb25nXG4gKiBhIHBlZXIgbXVzdCB3YWl0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIGdyYWZ0IGludG8gb3VyIG1lc2ggYWdhaW4gYWZ0ZXIgYmVpbmcgcHJ1bmVkLlxuICogV2hlbiBwcnVuaW5nIGEgcGVlciwgd2Ugc2VuZCB0aGVtIG91ciB2YWx1ZSBvZiBHb3NzaXBzdWJQcnVuZUJhY2tvZmYgc28gdGhleSBrbm93XG4gKiB0aGUgbWluaW11bSB0aW1lIHRvIHdhaXQuIFBlZXJzIHJ1bm5pbmcgb2xkZXIgdmVyc2lvbnMgbWF5IG5vdCBzZW5kIGEgYmFja29mZiB0aW1lLFxuICogc28gaWYgd2UgcmVjZWl2ZSBhIHBydW5lIG1lc3NhZ2Ugd2l0aG91dCBvbmUsIHdlIHdpbGwgd2FpdCBhdCBsZWFzdCBHb3NzaXBzdWJQcnVuZUJhY2tvZmZcbiAqIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlLWdyYWZ0LlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViUHJ1bmVCYWNrb2ZmID0gbWludXRlO1xuLyoqXG4gKiBCYWNrb2ZmIHRvIHVzZSB3aGVuIHVuc3VzY3JpYmluZyBmcm9tIGEgdG9waWMuIFNob3VsZCBub3QgcmVzdWJzY3JpYmUgdG8gdGhpcyB0b3BpYyBiZWZvcmUgaXQgZXhwaXJlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YlVuc3Vic2NyaWJlQmFja29mZiA9IDEwICogc2Vjb25kO1xuLyoqXG4gKiBHb3NzaXBzdWJQcnVuZUJhY2tvZmZUaWNrcyBpcyB0aGUgbnVtYmVyIG9mIGhlYXJ0YmVhdCB0aWNrcyBmb3IgYXR0ZW1wdGluZyB0byBwcnVuZSBleHBpcmVkXG4gKiBiYWNrb2ZmIHRpbWVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YlBydW5lQmFja29mZlRpY2tzID0gMTU7XG4vKipcbiAqIEdvc3NpcHN1YkNvbm5lY3RvcnMgY29udHJvbHMgdGhlIG51bWJlciBvZiBhY3RpdmUgY29ubmVjdGlvbiBhdHRlbXB0cyBmb3IgcGVlcnMgb2J0YWluZWQgdGhyb3VnaCBQWC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YkNvbm5lY3RvcnMgPSA4O1xuLyoqXG4gKiBHb3NzaXBzdWJNYXhQZW5kaW5nQ29ubmVjdGlvbnMgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyBjb25uZWN0aW9ucyBmb3IgcGVlcnMgYXR0ZW1wdGVkIHRocm91Z2ggcHguXG4gKi9cbmV4cG9ydCBjb25zdCBHb3NzaXBzdWJNYXhQZW5kaW5nQ29ubmVjdGlvbnMgPSAxMjg7XG4vKipcbiAqIEdvc3NpcHN1YkNvbm5lY3Rpb25UaW1lb3V0IGNvbnRyb2xzIHRoZSB0aW1lb3V0IGZvciBjb25uZWN0aW9uIGF0dGVtcHRzLlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViQ29ubmVjdGlvblRpbWVvdXQgPSAzMCAqIHNlY29uZDtcbi8qKlxuICogR29zc2lwc3ViRGlyZWN0Q29ubmVjdFRpY2tzIGlzIHRoZSBudW1iZXIgb2YgaGVhcnRiZWF0IHRpY2tzIGZvciBhdHRlbXB0aW5nIHRvIHJlY29ubmVjdCBkaXJlY3QgcGVlcnNcbiAqIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkLlxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViRGlyZWN0Q29ubmVjdFRpY2tzID0gMzAwO1xuLyoqXG4gKiBHb3NzaXBzdWJEaXJlY3RDb25uZWN0SW5pdGlhbERlbGF5IGlzIHRoZSBpbml0aWFsIGRlbGF5IGJlZm9yZSBvcGVuaW5nIGNvbm5lY3Rpb25zIHRvIGRpcmVjdCBwZWVyc1xuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViRGlyZWN0Q29ubmVjdEluaXRpYWxEZWxheSA9IHNlY29uZDtcbi8qKlxuICogR29zc2lwc3ViT3Bwb3J0dW5pc3RpY0dyYWZ0VGlja3MgaXMgdGhlIG51bWJlciBvZiBoZWFydGJlYXQgdGlja3MgZm9yIGF0dGVtcHRpbmcgdG8gaW1wcm92ZSB0aGUgbWVzaFxuICogd2l0aCBvcHBvcnR1bmlzdGljIGdyYWZ0aW5nLiBFdmVyeSBHb3NzaXBzdWJPcHBvcnR1bmlzdGljR3JhZnRUaWNrcyB3ZSB3aWxsIGF0dGVtcHQgdG8gc2VsZWN0IHNvbWVcbiAqIGhpZ2gtc2NvcmluZyBtZXNoIHBlZXJzIHRvIHJlcGxhY2UgbG93ZXItc2NvcmluZyBvbmVzLCBpZiB0aGUgbWVkaWFuIHNjb3JlIG9mIG91ciBtZXNoIHBlZXJzIGZhbGxzXG4gKiBiZWxvdyBhIHRocmVzaG9sZFxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViT3Bwb3J0dW5pc3RpY0dyYWZ0VGlja3MgPSA2MDtcbi8qKlxuICogR29zc2lwc3ViT3Bwb3J0dW5pc3RpY0dyYWZ0UGVlcnMgaXMgdGhlIG51bWJlciBvZiBwZWVycyB0byBvcHBvcnR1bmlzdGljYWxseSBncmFmdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1Yk9wcG9ydHVuaXN0aWNHcmFmdFBlZXJzID0gMjtcbi8qKlxuICogSWYgYSBHUkFGVCBjb21lcyBiZWZvcmUgR29zc2lwc3ViR3JhZnRGbG9vZFRocmVzaG9sZCBoYXMgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCBQUlVORSxcbiAqIHRoZW4gdGhlcmUgaXMgYW4gZXh0cmEgc2NvcmUgcGVuYWx0eSBhcHBsaWVkIHRvIHRoZSBwZWVyIHRocm91Z2ggUDcuXG4gKi9cbmV4cG9ydCBjb25zdCBHb3NzaXBzdWJHcmFmdEZsb29kVGhyZXNob2xkID0gMTAgKiBzZWNvbmQ7XG4vKipcbiAqIEdvc3NpcHN1Yk1heElIYXZlTGVuZ3RoIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB0byBpbmNsdWRlIGluIGFuIElIQVZFIG1lc3NhZ2UuXG4gKiBBbHNvIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBJSEFWRSBpZHMgd2Ugd2lsbCBhY2NlcHQgYW5kIHJlcXVlc3Qgd2l0aCBJV0FOVCBmcm9tIGFcbiAqIHBlZXIgd2l0aGluIGEgaGVhcnRiZWF0LCB0byBwcm90ZWN0IGZyb20gSUhBVkUgZmxvb2RzLiBZb3Ugc2hvdWxkIGFkanVzdCB0aGlzIHZhbHVlIGZyb20gdGhlXG4gKiBkZWZhdWx0IGlmIHlvdXIgc3lzdGVtIGlzIHB1c2hpbmcgbW9yZSB0aGFuIDUwMDAgbWVzc2FnZXMgaW4gR29zc2lwc3ViSGlzdG9yeUdvc3NpcCBoZWFydGJlYXRzO1xuICogd2l0aCB0aGUgZGVmYXVsdHMgdGhpcyBpcyAxNjY2IG1lc3NhZ2VzL3MuXG4gKi9cbmV4cG9ydCBjb25zdCBHb3NzaXBzdWJNYXhJSGF2ZUxlbmd0aCA9IDUwMDA7XG4vKipcbiAqIEdvc3NpcHN1Yk1heElIYXZlTWVzc2FnZXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIElIQVZFIG1lc3NhZ2VzIHRvIGFjY2VwdCBmcm9tIGEgcGVlciB3aXRoaW4gYSBoZWFydGJlYXQuXG4gKi9cbmV4cG9ydCBjb25zdCBHb3NzaXBzdWJNYXhJSGF2ZU1lc3NhZ2VzID0gMTA7XG4vKipcbiAqIFRpbWUgdG8gd2FpdCBmb3IgYSBtZXNzYWdlIHJlcXVlc3RlZCB0aHJvdWdoIElXQU5UIGZvbGxvd2luZyBhbiBJSEFWRSBhZHZlcnRpc2VtZW50LlxuICogSWYgdGhlIG1lc3NhZ2UgaXMgbm90IHJlY2VpdmVkIHdpdGhpbiB0aGlzIHdpbmRvdywgYSBicm9rZW4gcHJvbWlzZSBpcyBkZWNsYXJlZCBhbmRcbiAqIHRoZSByb3V0ZXIgbWF5IGFwcGx5IGJhaGF2aW91cmFsIHBlbmFsdGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdvc3NpcHN1YklXYW50Rm9sbG93dXBUaW1lID0gMyAqIHNlY29uZDtcbi8qKlxuICogVGltZSBpbiBtaWxsaXNlY29uZHMgdG8ga2VlcCBtZXNzYWdlIGlkcyBpbiB0aGUgc2VlbiBjYWNoZVxuICovXG5leHBvcnQgY29uc3QgR29zc2lwc3ViU2VlblRUTCA9IDIgKiBtaW51dGU7XG5leHBvcnQgY29uc3QgVGltZUNhY2hlRHVyYXRpb24gPSAxMjAgKiAxMDAwO1xuZXhwb3J0IGNvbnN0IEVSUl9UT1BJQ19WQUxJREFUT1JfUkVKRUNUID0gJ0VSUl9UT1BJQ19WQUxJREFUT1JfUkVKRUNUJztcbmV4cG9ydCBjb25zdCBFUlJfVE9QSUNfVkFMSURBVE9SX0lHTk9SRSA9ICdFUlJfVE9QSUNfVkFMSURBVE9SX0lHTk9SRSc7XG4vKipcbiAqIElmIHBlZXIgc2NvcmUgaXMgYmV0dGVyIHRoYW4gdGhpcywgd2UgYWNjZXB0IG1lc3NhZ2VzIGZyb20gdGhpcyBwZWVyXG4gKiB3aXRoaW4gQUNDRVBUX0ZST01fV0hJVEVMSVNUX0RVUkFUSU9OX01TIGZyb20gdGhlIGxhc3QgdGltZSBjb21wdXRpbmcgc2NvcmUuXG4gKiovXG5leHBvcnQgY29uc3QgQUNDRVBUX0ZST01fV0hJVEVMSVNUX1RIUkVTSE9MRF9TQ09SRSA9IDA7XG4vKipcbiAqIElmIHBlZXIgc2NvcmUgPj0gQUNDRVBUX0ZST01fV0hJVEVMSVNUX1RIUkVTSE9MRF9TQ09SRSwgYWNjZXB0IHVwIHRvIHRoaXNcbiAqIG51bWJlciBvZiBtZXNzYWdlcyBmcm9tIHRoYXQgcGVlci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9GUk9NX1dISVRFTElTVF9NQVhfTUVTU0FHRVMgPSAxMjg7XG4vKipcbiAqIElmIHBlZXIgc2NvcmUgPj0gQUNDRVBUX0ZST01fV0hJVEVMSVNUX1RIUkVTSE9MRF9TQ09SRSwgYWNjZXB0IG1lc3NhZ2VzIGZyb21cbiAqIHRoaXMgcGVlciB1cCB0byB0aGlzIHRpbWUgZHVyYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBBQ0NFUFRfRlJPTV9XSElURUxJU1RfRFVSQVRJT05fTVMgPSAxMDAwO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBNZXNoTWVzc2FnZURlbGl2ZXJpZXNXaW5kb3cgdG8gYmUgdXNlZCBpbiBtZXRyaWNzLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NRVRSSUNfTUVTSF9NRVNTQUdFX0RFTElWRVJJRVNfV0lORE9XUyA9IDEwMDA7XG4vKiogV2FpdCBmb3IgMSBtb3JlIGhlYXJ0YmVhdHMgYmVmb3JlIGNsZWFyaW5nIGEgYmFja29mZiAqL1xuZXhwb3J0IGNvbnN0IEJBQ0tPRkZfU0xBQ0sgPSAxO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6WyJzZWNvbmQiLCJtaW51dGUiLCJGbG9vZHN1YklEIiwiR29zc2lwc3ViSUR2MTAiLCJHb3NzaXBzdWJJRHYxMSIsIkdvc3NpcHN1YkQiLCJHb3NzaXBzdWJEbG8iLCJHb3NzaXBzdWJEaGkiLCJHb3NzaXBzdWJEc2NvcmUiLCJHb3NzaXBzdWJEb3V0IiwiR29zc2lwc3ViSGlzdG9yeUxlbmd0aCIsIkdvc3NpcHN1Ykhpc3RvcnlHb3NzaXAiLCJHb3NzaXBzdWJEbGF6eSIsIkdvc3NpcHN1Ykdvc3NpcEZhY3RvciIsIkdvc3NpcHN1Ykdvc3NpcFJldHJhbnNtaXNzaW9uIiwiR29zc2lwc3ViSGVhcnRiZWF0SW5pdGlhbERlbGF5IiwiR29zc2lwc3ViSGVhcnRiZWF0SW50ZXJ2YWwiLCJHb3NzaXBzdWJGYW5vdXRUVEwiLCJHb3NzaXBzdWJQcnVuZVBlZXJzIiwiR29zc2lwc3ViUHJ1bmVCYWNrb2ZmIiwiR29zc2lwc3ViVW5zdWJzY3JpYmVCYWNrb2ZmIiwiR29zc2lwc3ViUHJ1bmVCYWNrb2ZmVGlja3MiLCJHb3NzaXBzdWJDb25uZWN0b3JzIiwiR29zc2lwc3ViTWF4UGVuZGluZ0Nvbm5lY3Rpb25zIiwiR29zc2lwc3ViQ29ubmVjdGlvblRpbWVvdXQiLCJHb3NzaXBzdWJEaXJlY3RDb25uZWN0VGlja3MiLCJHb3NzaXBzdWJEaXJlY3RDb25uZWN0SW5pdGlhbERlbGF5IiwiR29zc2lwc3ViT3Bwb3J0dW5pc3RpY0dyYWZ0VGlja3MiLCJHb3NzaXBzdWJPcHBvcnR1bmlzdGljR3JhZnRQZWVycyIsIkdvc3NpcHN1YkdyYWZ0Rmxvb2RUaHJlc2hvbGQiLCJHb3NzaXBzdWJNYXhJSGF2ZUxlbmd0aCIsIkdvc3NpcHN1Yk1heElIYXZlTWVzc2FnZXMiLCJHb3NzaXBzdWJJV2FudEZvbGxvd3VwVGltZSIsIkdvc3NpcHN1YlNlZW5UVEwiLCJUaW1lQ2FjaGVEdXJhdGlvbiIsIkVSUl9UT1BJQ19WQUxJREFUT1JfUkVKRUNUIiwiRVJSX1RPUElDX1ZBTElEQVRPUl9JR05PUkUiLCJBQ0NFUFRfRlJPTV9XSElURUxJU1RfVEhSRVNIT0xEX1NDT1JFIiwiQUNDRVBUX0ZST01fV0hJVEVMSVNUX01BWF9NRVNTQUdFUyIsIkFDQ0VQVF9GUk9NX1dISVRFTElTVF9EVVJBVElPTl9NUyIsIkRFRkFVTFRfTUVUUklDX01FU0hfTUVTU0FHRV9ERUxJVkVSSUVTX1dJTkRPV1MiLCJCQUNLT0ZGX1NMQUNLIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/index.js":
/*!********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/index.js ***!
\********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GossipSub: () => (/* binding */ GossipSub),\n/* harmony export */ gossipsub: () => (/* binding */ gossipsub),\n/* harmony export */ multicodec: () => (/* binding */ multicodec)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/event-target.js\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/pubsub/index.js\");\n/* harmony import */ var _libp2p_peer_id__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @libp2p/peer-id */ \"(ssr)/./node_modules/@libp2p/peer-id/dist/src/index.js\");\n/* harmony import */ var it_length_prefixed__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! it-length-prefixed */ \"(ssr)/./node_modules/it-length-prefixed/dist/src/index.js\");\n/* harmony import */ var it_pipe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! it-pipe */ \"(ssr)/./node_modules/it-pipe/dist/src/index.js\");\n/* harmony import */ var it_pushable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! it-pushable */ \"(ssr)/./node_modules/it-pushable/dist/src/index.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/constants.js\");\n/* harmony import */ var _message_decodeRpc_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./message/decodeRpc.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decodeRpc.js\");\n/* harmony import */ var _message_rpc_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./message/rpc.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.js\");\n/* harmony import */ var _message_cache_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./message-cache.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.js\");\n/* harmony import */ var _metrics_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./metrics.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.js\");\n/* harmony import */ var _score_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./score/index.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.js\");\n/* harmony import */ var _score_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./score/index.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.js\");\n/* harmony import */ var _score_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./score/index.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.js\");\n/* harmony import */ var _score_scoreMetrics_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./score/scoreMetrics.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/scoreMetrics.js\");\n/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./stream.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.js\");\n/* harmony import */ var _tracer_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./tracer.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./types.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js\");\n/* harmony import */ var _utils_buildRawMessage_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./utils/buildRawMessage.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/buildRawMessage.js\");\n/* harmony import */ var _utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./utils/create-gossip-rpc.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/create-gossip-rpc.js\");\n/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils/index.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/messageIdToString.js\");\n/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./utils/index.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/shuffle.js\");\n/* harmony import */ var _utils_msgIdFn_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/msgIdFn.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/msgIdFn.js\");\n/* harmony import */ var _utils_multiaddr_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils/multiaddr.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/multiaddr.js\");\n/* harmony import */ var _utils_publishConfig_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/publishConfig.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/publishConfig.js\");\n/* harmony import */ var _utils_set_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./utils/set.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.js\");\n/* harmony import */ var _utils_time_cache_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/time-cache.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/time-cache.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst multicodec = _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubIDv11;\nvar GossipStatusCode;\n(function(GossipStatusCode) {\n GossipStatusCode[GossipStatusCode[\"started\"] = 0] = \"started\";\n GossipStatusCode[GossipStatusCode[\"stopped\"] = 1] = \"stopped\";\n})(GossipStatusCode || (GossipStatusCode = {}));\nclass GossipSub extends _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.TypedEventEmitter {\n static{\n this.multicodec = _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubIDv11;\n }\n constructor(components, options = {}){\n super();\n this.multicodecs = [\n _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubIDv11,\n _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubIDv10\n ];\n // State\n this.peers = new Set();\n this.streamsInbound = new Map();\n this.streamsOutbound = new Map();\n /** Ensures outbound streams are created sequentially */ this.outboundInflightQueue = (0,it_pushable__WEBPACK_IMPORTED_MODULE_2__.pushable)({\n objectMode: true\n });\n /** Direct peers */ this.direct = new Set();\n /** Floodsub peers */ this.floodsubPeers = new Set();\n /**\n * Map of peer id and AcceptRequestWhileListEntry\n */ this.acceptFromWhitelist = new Map();\n /**\n * Map of topics to which peers are subscribed to\n */ this.topics = new Map();\n /**\n * List of our subscriptions\n */ this.subscriptions = new Set();\n /**\n * Map of topic meshes\n * topic => peer id set\n */ this.mesh = new Map();\n /**\n * Map of topics to set of peers. These mesh peers are the ones to which we are publishing without a topic membership\n * topic => peer id set\n */ this.fanout = new Map();\n /**\n * Map of last publish time for fanout topics\n * topic => last publish time\n */ this.fanoutLastpub = new Map();\n /**\n * Map of pending messages to gossip\n * peer id => control messages\n */ this.gossip = new Map();\n /**\n * Map of control messages\n * peer id => control message\n */ this.control = new Map();\n /**\n * Number of IHAVEs received from peer in the last heartbeat\n */ this.peerhave = new Map();\n /** Number of messages we have asked from peer in the last heartbeat */ this.iasked = new Map();\n /** Prune backoff map */ this.backoff = new Map();\n /**\n * Connection direction cache, marks peers with outbound connections\n * peer id => direction\n */ this.outbound = new Map();\n /**\n * Custom validator function per topic.\n * Must return or resolve quickly (< 100ms) to prevent causing penalties for late messages.\n * If you need to apply validation that may require longer times use `asyncValidation` option and callback the\n * validation result through `Gossipsub.reportValidationResult`\n */ this.topicValidators = new Map();\n /**\n * Number of heartbeats since the beginning of time\n * This allows us to amortize some resource cleanup -- eg: backoff cleanup\n */ this.heartbeatTicks = 0;\n this.directPeerInitial = null;\n this.status = {\n code: GossipStatusCode.stopped\n };\n this.heartbeatTimer = null;\n this.runHeartbeat = ()=>{\n const timer = this.metrics?.heartbeatDuration.startTimer();\n this.heartbeat().catch((err)=>{\n this.log(\"Error running heartbeat\", err);\n }).finally(()=>{\n if (timer != null) {\n timer();\n }\n // Schedule the next run if still in started status\n if (this.status.code === GossipStatusCode.started) {\n // Clear previous timeout before overwriting `status.heartbeatTimeout`, it should be completed tho.\n clearTimeout(this.status.heartbeatTimeout);\n // NodeJS setInterval function is innexact, calls drift by a few miliseconds on each call.\n // To run the heartbeat precisely setTimeout() must be used recomputing the delay on every loop.\n let msToNextHeartbeat = this.opts.heartbeatInterval - (Date.now() - this.status.hearbeatStartMs) % this.opts.heartbeatInterval;\n // If too close to next heartbeat, skip one\n if (msToNextHeartbeat < this.opts.heartbeatInterval * 0.25) {\n msToNextHeartbeat += this.opts.heartbeatInterval;\n this.metrics?.heartbeatSkipped.inc();\n }\n this.status.heartbeatTimeout = setTimeout(this.runHeartbeat, msToNextHeartbeat);\n }\n });\n };\n const opts = {\n fallbackToFloodsub: true,\n floodPublish: true,\n batchPublish: false,\n doPX: false,\n directPeers: [],\n D: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubD,\n Dlo: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubDlo,\n Dhi: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubDhi,\n Dscore: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubDscore,\n Dout: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubDout,\n Dlazy: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubDlazy,\n heartbeatInterval: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubHeartbeatInterval,\n fanoutTTL: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubFanoutTTL,\n mcacheLength: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubHistoryLength,\n mcacheGossip: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubHistoryGossip,\n seenTTL: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubSeenTTL,\n gossipsubIWantFollowupMs: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubIWantFollowupTime,\n prunePeers: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubPrunePeers,\n pruneBackoff: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubPruneBackoff,\n unsubcribeBackoff: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubUnsubscribeBackoff,\n graftFloodThreshold: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubGraftFloodThreshold,\n opportunisticGraftPeers: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubOpportunisticGraftPeers,\n opportunisticGraftTicks: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubOpportunisticGraftTicks,\n directConnectTicks: _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubDirectConnectTicks,\n ...options,\n scoreParams: (0,_score_index_js__WEBPACK_IMPORTED_MODULE_5__.createPeerScoreParams)(options.scoreParams),\n scoreThresholds: (0,_score_index_js__WEBPACK_IMPORTED_MODULE_6__.createPeerScoreThresholds)(options.scoreThresholds)\n };\n this.components = components;\n this.decodeRpcLimits = opts.decodeRpcLimits ?? _message_decodeRpc_js__WEBPACK_IMPORTED_MODULE_7__.defaultDecodeRpcLimits;\n this.globalSignaturePolicy = opts.globalSignaturePolicy ?? _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.StrictSign;\n // Also wants to get notified of peers connected using floodsub\n if (opts.fallbackToFloodsub) {\n this.multicodecs.push(_constants_js__WEBPACK_IMPORTED_MODULE_3__.FloodsubID);\n }\n // From pubsub\n this.log = components.logger.forComponent(opts.debugName ?? \"libp2p:gossipsub\");\n // Gossipsub\n this.opts = opts;\n this.direct = new Set(opts.directPeers.map((p)=>p.id.toString()));\n this.seenCache = new _utils_time_cache_js__WEBPACK_IMPORTED_MODULE_9__.SimpleTimeCache({\n validityMs: opts.seenTTL\n });\n this.publishedMessageIds = new _utils_time_cache_js__WEBPACK_IMPORTED_MODULE_9__.SimpleTimeCache({\n validityMs: opts.seenTTL\n });\n if (options.msgIdFn != null) {\n // Use custom function\n this.msgIdFn = options.msgIdFn;\n } else {\n switch(this.globalSignaturePolicy){\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.StrictSign:\n this.msgIdFn = _utils_msgIdFn_js__WEBPACK_IMPORTED_MODULE_10__.msgIdFnStrictSign;\n break;\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.StrictNoSign:\n this.msgIdFn = _utils_msgIdFn_js__WEBPACK_IMPORTED_MODULE_10__.msgIdFnStrictNoSign;\n break;\n default:\n throw new Error(`Invalid globalSignaturePolicy: ${this.globalSignaturePolicy}`);\n }\n }\n if (options.fastMsgIdFn != null) {\n this.fastMsgIdFn = options.fastMsgIdFn;\n this.fastMsgIdCache = new _utils_time_cache_js__WEBPACK_IMPORTED_MODULE_9__.SimpleTimeCache({\n validityMs: opts.seenTTL\n });\n }\n // By default, gossipsub only provide a browser friendly function to convert Uint8Array message id to string.\n this.msgIdToStrFn = options.msgIdToStrFn ?? _utils_index_js__WEBPACK_IMPORTED_MODULE_11__.messageIdToString;\n this.mcache = options.messageCache ?? new _message_cache_js__WEBPACK_IMPORTED_MODULE_12__.MessageCache(opts.mcacheGossip, opts.mcacheLength, this.msgIdToStrFn);\n if (options.dataTransform != null) {\n this.dataTransform = options.dataTransform;\n }\n if (options.metricsRegister != null) {\n if (options.metricsTopicStrToLabel == null) {\n throw Error(\"Must set metricsTopicStrToLabel with metrics\");\n }\n // in theory, each topic has its own meshMessageDeliveriesWindow param\n // however in lodestar, we configure it mostly the same so just pick the max of positive ones\n // (some topics have meshMessageDeliveriesWindow as 0)\n const maxMeshMessageDeliveriesWindowMs = Math.max(...Object.values(opts.scoreParams.topics).map((topicParam)=>topicParam.meshMessageDeliveriesWindow), _constants_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_METRIC_MESH_MESSAGE_DELIVERIES_WINDOWS);\n const metrics = (0,_metrics_js__WEBPACK_IMPORTED_MODULE_13__.getMetrics)(options.metricsRegister, options.metricsTopicStrToLabel, {\n gossipPromiseExpireSec: this.opts.gossipsubIWantFollowupMs / 1000,\n behaviourPenaltyThreshold: opts.scoreParams.behaviourPenaltyThreshold,\n maxMeshMessageDeliveriesWindowSec: maxMeshMessageDeliveriesWindowMs / 1000\n });\n metrics.mcacheSize.addCollect(()=>{\n this.onScrapeMetrics(metrics);\n });\n for (const protocol of this.multicodecs){\n metrics.protocolsEnabled.set({\n protocol\n }, 1);\n }\n this.metrics = metrics;\n } else {\n this.metrics = null;\n }\n this.gossipTracer = new _tracer_js__WEBPACK_IMPORTED_MODULE_14__.IWantTracer(this.opts.gossipsubIWantFollowupMs, this.msgIdToStrFn, this.metrics);\n /**\n * libp2p\n */ this.score = new _score_index_js__WEBPACK_IMPORTED_MODULE_15__.PeerScore(this.opts.scoreParams, this.metrics, this.components.logger, {\n scoreCacheValidityMs: opts.heartbeatInterval\n });\n this.maxInboundStreams = options.maxInboundStreams;\n this.maxOutboundStreams = options.maxOutboundStreams;\n this.runOnTransientConnection = options.runOnTransientConnection;\n this.allowedTopics = opts.allowedTopics != null ? new Set(opts.allowedTopics) : null;\n }\n getPeers() {\n return [\n ...this.peers.keys()\n ].map((str)=>(0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_16__.peerIdFromString)(str));\n }\n isStarted() {\n return this.status.code === GossipStatusCode.started;\n }\n // LIFECYCLE METHODS\n /**\n * Mounts the gossipsub protocol onto the libp2p node and sends our\n * our subscriptions to every peer connected\n */ async start() {\n // From pubsub\n if (this.isStarted()) {\n return;\n }\n this.log(\"starting\");\n this.publishConfig = await (0,_utils_publishConfig_js__WEBPACK_IMPORTED_MODULE_17__.getPublishConfigFromPeerId)(this.globalSignaturePolicy, this.components.peerId);\n // Create the outbound inflight queue\n // This ensures that outbound stream creation happens sequentially\n this.outboundInflightQueue = (0,it_pushable__WEBPACK_IMPORTED_MODULE_2__.pushable)({\n objectMode: true\n });\n (0,it_pipe__WEBPACK_IMPORTED_MODULE_1__.pipe)(this.outboundInflightQueue, async (source)=>{\n for await (const { peerId, connection } of source){\n await this.createOutboundStream(peerId, connection);\n }\n }).catch((e)=>{\n this.log.error(\"outbound inflight queue error\", e);\n });\n // set direct peer addresses in the address book\n await Promise.all(this.opts.directPeers.map(async (p)=>{\n await this.components.peerStore.merge(p.id, {\n multiaddrs: p.addrs\n });\n }));\n const registrar = this.components.registrar;\n // Incoming streams\n // Called after a peer dials us\n await Promise.all(this.multicodecs.map(async (multicodec)=>registrar.handle(multicodec, this.onIncomingStream.bind(this), {\n maxInboundStreams: this.maxInboundStreams,\n maxOutboundStreams: this.maxOutboundStreams,\n runOnTransientConnection: this.runOnTransientConnection\n })));\n // # How does Gossipsub interact with libp2p? Rough guide from Mar 2022\n //\n // ## Setup:\n // Gossipsub requests libp2p to callback, TBD\n //\n // `this.libp2p.handle()` registers a handler for `/meshsub/1.1.0` and other Gossipsub protocols\n // The handler callback is registered in libp2p Upgrader.protocols map.\n //\n // Upgrader receives an inbound connection from some transport and (`Upgrader.upgradeInbound`):\n // - Adds encryption (NOISE in our case)\n // - Multiplex stream\n // - Create a muxer and register that for each new stream call Upgrader.protocols handler\n //\n // ## Topology\n // - new instance of Topology (unlinked to libp2p) with handlers\n // - registar.register(topology)\n // register protocol with topology\n // Topology callbacks called on connection manager changes\n const topology = {\n onConnect: this.onPeerConnected.bind(this),\n onDisconnect: this.onPeerDisconnected.bind(this),\n notifyOnTransient: this.runOnTransientConnection\n };\n const registrarTopologyIds = await Promise.all(this.multicodecs.map(async (multicodec)=>registrar.register(multicodec, topology)));\n // Schedule to start heartbeat after `GossipsubHeartbeatInitialDelay`\n const heartbeatTimeout = setTimeout(this.runHeartbeat, _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubHeartbeatInitialDelay);\n // Then, run heartbeat every `heartbeatInterval` offset by `GossipsubHeartbeatInitialDelay`\n this.status = {\n code: GossipStatusCode.started,\n registrarTopologyIds,\n heartbeatTimeout,\n hearbeatStartMs: Date.now() + _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubHeartbeatInitialDelay\n };\n this.score.start();\n // connect to direct peers\n this.directPeerInitial = setTimeout(()=>{\n Promise.resolve().then(async ()=>{\n await Promise.all(Array.from(this.direct).map(async (id)=>this.connect(id)));\n }).catch((err)=>{\n this.log(err);\n });\n }, _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubDirectConnectInitialDelay);\n this.log(\"started\");\n }\n /**\n * Unmounts the gossipsub protocol and shuts down every connection\n */ async stop() {\n this.log(\"stopping\");\n // From pubsub\n if (this.status.code !== GossipStatusCode.started) {\n return;\n }\n const { registrarTopologyIds } = this.status;\n this.status = {\n code: GossipStatusCode.stopped\n };\n // unregister protocol and handlers\n const registrar = this.components.registrar;\n await Promise.all(this.multicodecs.map(async (multicodec)=>registrar.unhandle(multicodec)));\n registrarTopologyIds.forEach((id)=>{\n registrar.unregister(id);\n });\n this.outboundInflightQueue.end();\n const closePromises = [];\n for (const outboundStream of this.streamsOutbound.values()){\n closePromises.push(outboundStream.close());\n }\n this.streamsOutbound.clear();\n for (const inboundStream of this.streamsInbound.values()){\n closePromises.push(inboundStream.close());\n }\n this.streamsInbound.clear();\n await Promise.all(closePromises);\n this.peers.clear();\n this.subscriptions.clear();\n // Gossipsub\n if (this.heartbeatTimer != null) {\n this.heartbeatTimer.cancel();\n this.heartbeatTimer = null;\n }\n this.score.stop();\n this.mesh.clear();\n this.fanout.clear();\n this.fanoutLastpub.clear();\n this.gossip.clear();\n this.control.clear();\n this.peerhave.clear();\n this.iasked.clear();\n this.backoff.clear();\n this.outbound.clear();\n this.gossipTracer.clear();\n this.seenCache.clear();\n if (this.fastMsgIdCache != null) this.fastMsgIdCache.clear();\n if (this.directPeerInitial != null) clearTimeout(this.directPeerInitial);\n this.log(\"stopped\");\n }\n /** FOR DEBUG ONLY - Dump peer stats for all peers. Data is cloned, safe to mutate */ dumpPeerScoreStats() {\n return this.score.dumpPeerScoreStats();\n }\n /**\n * On an inbound stream opened\n */ onIncomingStream({ stream, connection }) {\n if (!this.isStarted()) {\n return;\n }\n const peerId = connection.remotePeer;\n // add peer to router\n this.addPeer(peerId, connection.direction, connection.remoteAddr);\n // create inbound stream\n this.createInboundStream(peerId, stream);\n // attempt to create outbound stream\n this.outboundInflightQueue.push({\n peerId,\n connection\n });\n }\n /**\n * Registrar notifies an established connection with pubsub protocol\n */ onPeerConnected(peerId, connection) {\n this.metrics?.newConnectionCount.inc({\n status: connection.status\n });\n // libp2p may emit a closed connection and never issue peer:disconnect event\n // see https://github.com/ChainSafe/js-libp2p-gossipsub/issues/398\n if (!this.isStarted() || connection.status !== \"open\") {\n return;\n }\n this.addPeer(peerId, connection.direction, connection.remoteAddr);\n this.outboundInflightQueue.push({\n peerId,\n connection\n });\n }\n /**\n * Registrar notifies a closing connection with pubsub protocol\n */ onPeerDisconnected(peerId) {\n this.log(\"connection ended %p\", peerId);\n this.removePeer(peerId);\n }\n async createOutboundStream(peerId, connection) {\n if (!this.isStarted()) {\n return;\n }\n const id = peerId.toString();\n if (!this.peers.has(id)) {\n return;\n }\n // TODO make this behavior more robust\n // This behavior is different than for inbound streams\n // If an outbound stream already exists, don't create a new stream\n if (this.streamsOutbound.has(id)) {\n return;\n }\n try {\n const stream = new _stream_js__WEBPACK_IMPORTED_MODULE_18__.OutboundStream(await connection.newStream(this.multicodecs, {\n runOnTransientConnection: this.runOnTransientConnection\n }), (e)=>{\n this.log.error(\"outbound pipe error\", e);\n }, {\n maxBufferSize: this.opts.maxOutboundBufferSize\n });\n this.log(\"create outbound stream %p\", peerId);\n this.streamsOutbound.set(id, stream);\n const protocol = stream.protocol;\n if (protocol === _constants_js__WEBPACK_IMPORTED_MODULE_3__.FloodsubID) {\n this.floodsubPeers.add(id);\n }\n this.metrics?.peersPerProtocol.inc({\n protocol\n }, 1);\n // Immediately send own subscriptions via the newly attached stream\n if (this.subscriptions.size > 0) {\n this.log(\"send subscriptions to\", id);\n this.sendSubscriptions(id, Array.from(this.subscriptions), true);\n }\n } catch (e) {\n this.log.error(\"createOutboundStream error\", e);\n }\n }\n createInboundStream(peerId, stream) {\n if (!this.isStarted()) {\n return;\n }\n const id = peerId.toString();\n if (!this.peers.has(id)) {\n return;\n }\n // TODO make this behavior more robust\n // This behavior is different than for outbound streams\n // If a peer initiates a new inbound connection\n // we assume that one is the new canonical inbound stream\n const priorInboundStream = this.streamsInbound.get(id);\n if (priorInboundStream !== undefined) {\n this.log(\"replacing existing inbound steam %s\", id);\n priorInboundStream.close().catch((err)=>{\n this.log.error(err);\n });\n }\n this.log(\"create inbound stream %s\", id);\n const inboundStream = new _stream_js__WEBPACK_IMPORTED_MODULE_18__.InboundStream(stream, {\n maxDataLength: this.opts.maxInboundDataLength\n });\n this.streamsInbound.set(id, inboundStream);\n this.pipePeerReadStream(peerId, inboundStream.source).catch((err)=>{\n this.log(err);\n });\n }\n /**\n * Add a peer to the router\n */ addPeer(peerId, direction, addr) {\n const id = peerId.toString();\n if (!this.peers.has(id)) {\n this.log(\"new peer %p\", peerId);\n this.peers.add(id);\n // Add to peer scoring\n this.score.addPeer(id);\n const currentIP = (0,_utils_multiaddr_js__WEBPACK_IMPORTED_MODULE_19__.multiaddrToIPStr)(addr);\n if (currentIP !== null) {\n this.score.addIP(id, currentIP);\n } else {\n this.log(\"Added peer has no IP in current address %s %s\", id, addr.toString());\n }\n // track the connection direction. Don't allow to unset outbound\n if (!this.outbound.has(id)) {\n this.outbound.set(id, direction === \"outbound\");\n }\n }\n }\n /**\n * Removes a peer from the router\n */ removePeer(peerId) {\n const id = peerId.toString();\n if (!this.peers.has(id)) {\n return;\n }\n // delete peer\n this.log(\"delete peer %p\", peerId);\n this.peers.delete(id);\n const outboundStream = this.streamsOutbound.get(id);\n const inboundStream = this.streamsInbound.get(id);\n if (outboundStream != null) {\n this.metrics?.peersPerProtocol.inc({\n protocol: outboundStream.protocol\n }, -1);\n }\n // close streams\n outboundStream?.close().catch((err)=>{\n this.log.error(err);\n });\n inboundStream?.close().catch((err)=>{\n this.log.error(err);\n });\n // remove streams\n this.streamsOutbound.delete(id);\n this.streamsInbound.delete(id);\n // remove peer from topics map\n for (const peers of this.topics.values()){\n peers.delete(id);\n }\n // Remove this peer from the mesh\n for (const [topicStr, peers] of this.mesh){\n if (peers.delete(id)) {\n this.metrics?.onRemoveFromMesh(topicStr, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.ChurnReason.Dc, 1);\n }\n }\n // Remove this peer from the fanout\n for (const peers of this.fanout.values()){\n peers.delete(id);\n }\n // Remove from floodsubPeers\n this.floodsubPeers.delete(id);\n // Remove from gossip mapping\n this.gossip.delete(id);\n // Remove from control mapping\n this.control.delete(id);\n // Remove from backoff mapping\n this.outbound.delete(id);\n // Remove from peer scoring\n this.score.removePeer(id);\n this.acceptFromWhitelist.delete(id);\n }\n // API METHODS\n get started() {\n return this.status.code === GossipStatusCode.started;\n }\n /**\n * Get a the peer-ids in a topic mesh\n */ getMeshPeers(topic) {\n const peersInTopic = this.mesh.get(topic);\n return peersInTopic != null ? Array.from(peersInTopic) : [];\n }\n /**\n * Get a list of the peer-ids that are subscribed to one topic.\n */ getSubscribers(topic) {\n const peersInTopic = this.topics.get(topic);\n return (peersInTopic != null ? Array.from(peersInTopic) : []).map((str)=>(0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_16__.peerIdFromString)(str));\n }\n /**\n * Get the list of topics which the peer is subscribed to.\n */ getTopics() {\n return Array.from(this.subscriptions);\n }\n // TODO: Reviewing Pubsub API\n // MESSAGE METHODS\n /**\n * Responsible for processing each RPC message received by other peers.\n */ async pipePeerReadStream(peerId, stream) {\n try {\n await (0,it_pipe__WEBPACK_IMPORTED_MODULE_1__.pipe)(stream, async (source)=>{\n for await (const data of source){\n try {\n // TODO: Check max gossip message size, before decodeRpc()\n const rpcBytes = data.subarray();\n // Note: This function may throw, it must be wrapped in a try {} catch {} to prevent closing the stream.\n // TODO: What should we do if the entire RPC is invalid?\n const rpc = _message_rpc_js__WEBPACK_IMPORTED_MODULE_20__.RPC.decode(rpcBytes, {\n limits: {\n subscriptions: this.decodeRpcLimits.maxSubscriptions,\n messages: this.decodeRpcLimits.maxMessages,\n control$: {\n ihave: this.decodeRpcLimits.maxIhaveMessageIDs,\n iwant: this.decodeRpcLimits.maxIwantMessageIDs,\n graft: this.decodeRpcLimits.maxControlMessages,\n prune: this.decodeRpcLimits.maxControlMessages,\n prune$: {\n peers: this.decodeRpcLimits.maxPeerInfos\n }\n }\n }\n });\n this.metrics?.onRpcRecv(rpc, rpcBytes.length);\n // Since processRpc may be overridden entirely in unsafe ways,\n // the simplest/safest option here is to wrap in a function and capture all errors\n // to prevent a top-level unhandled exception\n // This processing of rpc messages should happen without awaiting full validation/execution of prior messages\n if (this.opts.awaitRpcHandler) {\n try {\n await this.handleReceivedRpc(peerId, rpc);\n } catch (err) {\n this.metrics?.onRpcRecvError();\n this.log(err);\n }\n } else {\n this.handleReceivedRpc(peerId, rpc).catch((err)=>{\n this.metrics?.onRpcRecvError();\n this.log(err);\n });\n }\n } catch (e) {\n this.metrics?.onRpcDataError();\n this.log(e);\n }\n }\n });\n } catch (err) {\n this.metrics?.onPeerReadStreamError();\n this.handlePeerReadStreamError(err, peerId);\n }\n }\n /**\n * Handle error when read stream pipe throws, less of the functional use but more\n * to for testing purposes to spy on the error handling\n * */ handlePeerReadStreamError(err, peerId) {\n this.log.error(err);\n this.onPeerDisconnected(peerId);\n }\n /**\n * Handles an rpc request from a peer\n */ async handleReceivedRpc(from, rpc) {\n // Check if peer is graylisted in which case we ignore the event\n if (!this.acceptFrom(from.toString())) {\n this.log(\"received message from unacceptable peer %p\", from);\n this.metrics?.rpcRecvNotAccepted.inc();\n return;\n }\n const subscriptions = rpc.subscriptions != null ? rpc.subscriptions.length : 0;\n const messages = rpc.messages != null ? rpc.messages.length : 0;\n let ihave = 0;\n let iwant = 0;\n let graft = 0;\n let prune = 0;\n if (rpc.control != null) {\n if (rpc.control.ihave != null) ihave = rpc.control.ihave.length;\n if (rpc.control.iwant != null) iwant = rpc.control.iwant.length;\n if (rpc.control.graft != null) graft = rpc.control.graft.length;\n if (rpc.control.prune != null) prune = rpc.control.prune.length;\n }\n this.log(`rpc.from ${from.toString()} subscriptions ${subscriptions} messages ${messages} ihave ${ihave} iwant ${iwant} graft ${graft} prune ${prune}`);\n // Handle received subscriptions\n if (rpc.subscriptions != null && rpc.subscriptions.length > 0) {\n // update peer subscriptions\n const subscriptions = [];\n rpc.subscriptions.forEach((subOpt)=>{\n const topic = subOpt.topic;\n const subscribe = subOpt.subscribe === true;\n if (topic != null) {\n if (this.allowedTopics != null && !this.allowedTopics.has(topic)) {\n // Not allowed: subscription data-structures are not bounded by topic count\n // TODO: Should apply behaviour penalties?\n return;\n }\n this.handleReceivedSubscription(from, topic, subscribe);\n subscriptions.push({\n topic,\n subscribe\n });\n }\n });\n this.safeDispatchEvent(\"subscription-change\", {\n detail: {\n peerId: from,\n subscriptions\n }\n });\n }\n // Handle messages\n // TODO: (up to limit)\n for (const message of rpc.messages){\n if (this.allowedTopics != null && !this.allowedTopics.has(message.topic)) {\n continue;\n }\n const handleReceivedMessagePromise = this.handleReceivedMessage(from, message)// Should never throw, but handle just in case\n .catch((err)=>{\n this.metrics?.onMsgRecvError(message.topic);\n this.log(err);\n });\n if (this.opts.awaitRpcMessageHandler) {\n await handleReceivedMessagePromise;\n }\n }\n // Handle control messages\n if (rpc.control != null) {\n await this.handleControlMessage(from.toString(), rpc.control);\n }\n }\n /**\n * Handles a subscription change from a peer\n */ handleReceivedSubscription(from, topic, subscribe) {\n this.log(\"subscription update from %p topic %s\", from, topic);\n let topicSet = this.topics.get(topic);\n if (topicSet == null) {\n topicSet = new Set();\n this.topics.set(topic, topicSet);\n }\n if (subscribe) {\n // subscribe peer to new topic\n topicSet.add(from.toString());\n } else {\n // unsubscribe from existing topic\n topicSet.delete(from.toString());\n }\n // TODO: rust-libp2p has A LOT more logic here\n }\n /**\n * Handles a newly received message from an RPC.\n * May forward to all peers in the mesh.\n */ async handleReceivedMessage(from, rpcMsg) {\n this.metrics?.onMsgRecvPreValidation(rpcMsg.topic);\n const validationResult = await this.validateReceivedMessage(from, rpcMsg);\n this.metrics?.onPrevalidationResult(rpcMsg.topic, validationResult.code);\n const validationCode = validationResult.code;\n switch(validationCode){\n case _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.duplicate:\n // Report the duplicate\n this.score.duplicateMessage(from.toString(), validationResult.msgIdStr, rpcMsg.topic);\n // due to the collision of fastMsgIdFn, 2 different messages may end up the same fastMsgId\n // so we need to also mark the duplicate message as delivered or the promise is not resolved\n // and peer gets penalized. See https://github.com/ChainSafe/js-libp2p-gossipsub/pull/385\n this.gossipTracer.deliverMessage(validationResult.msgIdStr, true);\n this.mcache.observeDuplicate(validationResult.msgIdStr, from.toString());\n return;\n case _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.invalid:\n // invalid messages received\n // metrics.register_invalid_message(&raw_message.topic)\n // Tell peer_score about reject\n // Reject the original source, and any duplicates we've seen from other peers.\n if (validationResult.msgIdStr != null) {\n const msgIdStr = validationResult.msgIdStr;\n this.score.rejectMessage(from.toString(), msgIdStr, rpcMsg.topic, validationResult.reason);\n this.gossipTracer.rejectMessage(msgIdStr, validationResult.reason);\n } else {\n this.score.rejectInvalidMessage(from.toString(), rpcMsg.topic);\n }\n this.metrics?.onMsgRecvInvalid(rpcMsg.topic, validationResult);\n return;\n case _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.valid:\n // Tells score that message arrived (but is maybe not fully validated yet).\n // Consider the message as delivered for gossip promises.\n this.score.validateMessage(validationResult.messageId.msgIdStr);\n this.gossipTracer.deliverMessage(validationResult.messageId.msgIdStr);\n // Add the message to our memcache\n // if no validation is required, mark the message as validated\n this.mcache.put(validationResult.messageId, rpcMsg, !this.opts.asyncValidation);\n // Dispatch the message to the user if we are subscribed to the topic\n if (this.subscriptions.has(rpcMsg.topic)) {\n const isFromSelf = this.components.peerId.equals(from);\n if (!isFromSelf || this.opts.emitSelf) {\n super.dispatchEvent(new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CustomEvent(\"gossipsub:message\", {\n detail: {\n propagationSource: from,\n msgId: validationResult.messageId.msgIdStr,\n msg: validationResult.msg\n }\n }));\n // TODO: Add option to switch between emit per topic or all messages in one\n super.dispatchEvent(new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CustomEvent(\"message\", {\n detail: validationResult.msg\n }));\n }\n }\n // Forward the message to mesh peers, if no validation is required\n // If asyncValidation is ON, expect the app layer to call reportMessageValidationResult(), then forward\n if (!this.opts.asyncValidation) {\n // TODO: in rust-libp2p\n // .forward_msg(&msg_id, raw_message, Some(propagation_source))\n this.forwardMessage(validationResult.messageId.msgIdStr, rpcMsg, from.toString());\n }\n break;\n default:\n throw new Error(`Invalid validation result: ${validationCode}`);\n }\n }\n /**\n * Handles a newly received message from an RPC.\n * May forward to all peers in the mesh.\n */ async validateReceivedMessage(propagationSource, rpcMsg) {\n // Fast message ID stuff\n const fastMsgIdStr = this.fastMsgIdFn?.(rpcMsg);\n const msgIdCached = fastMsgIdStr !== undefined ? this.fastMsgIdCache?.get(fastMsgIdStr) : undefined;\n if (msgIdCached != null) {\n // This message has been seen previously. Ignore it\n return {\n code: _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.duplicate,\n msgIdStr: msgIdCached\n };\n }\n // Perform basic validation on message and convert to RawGossipsubMessage for fastMsgIdFn()\n const validationResult = await (0,_utils_buildRawMessage_js__WEBPACK_IMPORTED_MODULE_22__.validateToRawMessage)(this.globalSignaturePolicy, rpcMsg);\n if (!validationResult.valid) {\n return {\n code: _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.invalid,\n reason: _types_js__WEBPACK_IMPORTED_MODULE_21__.RejectReason.Error,\n error: validationResult.error\n };\n }\n const msg = validationResult.message;\n // Try and perform the data transform to the message. If it fails, consider it invalid.\n try {\n if (this.dataTransform != null) {\n msg.data = this.dataTransform.inboundTransform(rpcMsg.topic, msg.data);\n }\n } catch (e) {\n this.log(\"Invalid message, transform failed\", e);\n return {\n code: _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.invalid,\n reason: _types_js__WEBPACK_IMPORTED_MODULE_21__.RejectReason.Error,\n error: _types_js__WEBPACK_IMPORTED_MODULE_21__.ValidateError.TransformFailed\n };\n }\n // TODO: Check if message is from a blacklisted source or propagation origin\n // - Reject any message from a blacklisted peer\n // - Also reject any message that originated from a blacklisted peer\n // - reject messages claiming to be from ourselves but not locally published\n // Calculate the message id on the transformed data.\n const msgId = await this.msgIdFn(msg);\n const msgIdStr = this.msgIdToStrFn(msgId);\n const messageId = {\n msgId,\n msgIdStr\n };\n // Add the message to the duplicate caches\n if (fastMsgIdStr !== undefined && this.fastMsgIdCache != null) {\n const collision = this.fastMsgIdCache.put(fastMsgIdStr, msgIdStr);\n if (collision) {\n this.metrics?.fastMsgIdCacheCollision.inc();\n }\n }\n if (this.seenCache.has(msgIdStr)) {\n return {\n code: _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.duplicate,\n msgIdStr\n };\n } else {\n this.seenCache.put(msgIdStr);\n }\n // (Optional) Provide custom validation here with dynamic validators per topic\n // NOTE: This custom topicValidator() must resolve fast (< 100ms) to allow scores\n // to not penalize peers for long validation times.\n const topicValidator = this.topicValidators.get(rpcMsg.topic);\n if (topicValidator != null) {\n let acceptance;\n // Use try {} catch {} in case topicValidator() is synchronous\n try {\n acceptance = await topicValidator(propagationSource, msg);\n } catch (e) {\n const errCode = e.code;\n if (errCode === _constants_js__WEBPACK_IMPORTED_MODULE_3__.ERR_TOPIC_VALIDATOR_IGNORE) acceptance = _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.TopicValidatorResult.Ignore;\n if (errCode === _constants_js__WEBPACK_IMPORTED_MODULE_3__.ERR_TOPIC_VALIDATOR_REJECT) acceptance = _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.TopicValidatorResult.Reject;\n else acceptance = _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.TopicValidatorResult.Ignore;\n }\n if (acceptance !== _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.TopicValidatorResult.Accept) {\n return {\n code: _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.invalid,\n reason: (0,_types_js__WEBPACK_IMPORTED_MODULE_21__.rejectReasonFromAcceptance)(acceptance),\n msgIdStr\n };\n }\n }\n return {\n code: _types_js__WEBPACK_IMPORTED_MODULE_21__.MessageStatus.valid,\n messageId,\n msg\n };\n }\n /**\n * Return score of a peer.\n */ getScore(peerId) {\n return this.score.score(peerId);\n }\n /**\n * Send an rpc object to a peer with subscriptions\n */ sendSubscriptions(toPeer, topics, subscribe) {\n this.sendRpc(toPeer, {\n subscriptions: topics.map((topic)=>({\n topic,\n subscribe\n })),\n messages: []\n });\n }\n /**\n * Handles an rpc control message from a peer\n */ async handleControlMessage(id, controlMsg) {\n if (controlMsg === undefined) {\n return;\n }\n const iwant = controlMsg.ihave != null ? this.handleIHave(id, controlMsg.ihave) : [];\n const ihave = controlMsg.iwant != null ? this.handleIWant(id, controlMsg.iwant) : [];\n const prune = controlMsg.graft != null ? await this.handleGraft(id, controlMsg.graft) : [];\n controlMsg.prune != null && await this.handlePrune(id, controlMsg.prune);\n if (iwant.length === 0 && ihave.length === 0 && prune.length === 0) {\n return;\n }\n const sent = this.sendRpc(id, (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)(ihave, {\n iwant,\n prune\n }));\n const iwantMessageIds = iwant[0]?.messageIDs;\n if (iwantMessageIds != null) {\n if (sent) {\n this.gossipTracer.addPromise(id, iwantMessageIds);\n } else {\n this.metrics?.iwantPromiseUntracked.inc(1);\n }\n }\n }\n /**\n * Whether to accept a message from a peer\n */ acceptFrom(id) {\n if (this.direct.has(id)) {\n return true;\n }\n const now = Date.now();\n const entry = this.acceptFromWhitelist.get(id);\n if (entry != null && entry.messagesAccepted < _constants_js__WEBPACK_IMPORTED_MODULE_3__.ACCEPT_FROM_WHITELIST_MAX_MESSAGES && entry.acceptUntil >= now) {\n entry.messagesAccepted += 1;\n return true;\n }\n const score = this.score.score(id);\n if (score >= _constants_js__WEBPACK_IMPORTED_MODULE_3__.ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE) {\n // peer is unlikely to be able to drop its score to `graylistThreshold`\n // after 128 messages or 1s\n this.acceptFromWhitelist.set(id, {\n messagesAccepted: 0,\n acceptUntil: now + _constants_js__WEBPACK_IMPORTED_MODULE_3__.ACCEPT_FROM_WHITELIST_DURATION_MS\n });\n } else {\n this.acceptFromWhitelist.delete(id);\n }\n return score >= this.opts.scoreThresholds.graylistThreshold;\n }\n /**\n * Handles IHAVE messages\n */ handleIHave(id, ihave) {\n if (ihave.length === 0) {\n return [];\n }\n // we ignore IHAVE gossip from any peer whose score is below the gossips threshold\n const score = this.score.score(id);\n if (score < this.opts.scoreThresholds.gossipThreshold) {\n this.log(\"IHAVE: ignoring peer %s with score below threshold [ score = %d ]\", id, score);\n this.metrics?.ihaveRcvIgnored.inc({\n reason: _metrics_js__WEBPACK_IMPORTED_MODULE_13__.IHaveIgnoreReason.LowScore\n });\n return [];\n }\n // IHAVE flood protection\n const peerhave = (this.peerhave.get(id) ?? 0) + 1;\n this.peerhave.set(id, peerhave);\n if (peerhave > _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubMaxIHaveMessages) {\n this.log(\"IHAVE: peer %s has advertised too many times (%d) within this heartbeat interval; ignoring\", id, peerhave);\n this.metrics?.ihaveRcvIgnored.inc({\n reason: _metrics_js__WEBPACK_IMPORTED_MODULE_13__.IHaveIgnoreReason.MaxIhave\n });\n return [];\n }\n const iasked = this.iasked.get(id) ?? 0;\n if (iasked >= _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubMaxIHaveLength) {\n this.log(\"IHAVE: peer %s has already advertised too many messages (%d); ignoring\", id, iasked);\n this.metrics?.ihaveRcvIgnored.inc({\n reason: _metrics_js__WEBPACK_IMPORTED_MODULE_13__.IHaveIgnoreReason.MaxIasked\n });\n return [];\n }\n // string msgId => msgId\n const iwant = new Map();\n ihave.forEach(({ topicID, messageIDs })=>{\n if (topicID == null || messageIDs == null || !this.mesh.has(topicID)) {\n return;\n }\n let idonthave = 0;\n messageIDs.forEach((msgId)=>{\n const msgIdStr = this.msgIdToStrFn(msgId);\n if (!this.seenCache.has(msgIdStr)) {\n iwant.set(msgIdStr, msgId);\n idonthave++;\n }\n });\n this.metrics?.onIhaveRcv(topicID, messageIDs.length, idonthave);\n });\n if (iwant.size === 0) {\n return [];\n }\n let iask = iwant.size;\n if (iask + iasked > _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubMaxIHaveLength) {\n iask = _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubMaxIHaveLength - iasked;\n }\n this.log(\"IHAVE: Asking for %d out of %d messages from %s\", iask, iwant.size, id);\n let iwantList = Array.from(iwant.values());\n // ask in random order\n (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(iwantList);\n // truncate to the messages we are actually asking for and update the iasked counter\n iwantList = iwantList.slice(0, iask);\n this.iasked.set(id, iasked + iask);\n // do not add gossipTracer promise here until a successful sendRpc()\n return [\n {\n messageIDs: iwantList\n }\n ];\n }\n /**\n * Handles IWANT messages\n * Returns messages to send back to peer\n */ handleIWant(id, iwant) {\n if (iwant.length === 0) {\n return [];\n }\n // we don't respond to IWANT requests from any per whose score is below the gossip threshold\n const score = this.score.score(id);\n if (score < this.opts.scoreThresholds.gossipThreshold) {\n this.log(\"IWANT: ignoring peer %s with score below threshold [score = %d]\", id, score);\n return [];\n }\n const ihave = new Map();\n const iwantByTopic = new Map();\n let iwantDonthave = 0;\n iwant.forEach(({ messageIDs })=>{\n messageIDs?.forEach((msgId)=>{\n const msgIdStr = this.msgIdToStrFn(msgId);\n const entry = this.mcache.getWithIWantCount(msgIdStr, id);\n if (entry == null) {\n iwantDonthave++;\n return;\n }\n iwantByTopic.set(entry.msg.topic, 1 + (iwantByTopic.get(entry.msg.topic) ?? 0));\n if (entry.count > _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubGossipRetransmission) {\n this.log(\"IWANT: Peer %s has asked for message %s too many times: ignoring request\", id, msgId);\n return;\n }\n ihave.set(msgIdStr, entry.msg);\n });\n });\n this.metrics?.onIwantRcv(iwantByTopic, iwantDonthave);\n if (ihave.size === 0) {\n this.log(\"IWANT: Could not provide any wanted messages to %s\", id);\n return [];\n }\n this.log(\"IWANT: Sending %d messages to %s\", ihave.size, id);\n return Array.from(ihave.values());\n }\n /**\n * Handles Graft messages\n */ async handleGraft(id, graft) {\n const prune = [];\n const score = this.score.score(id);\n const now = Date.now();\n let doPX = this.opts.doPX;\n graft.forEach(({ topicID })=>{\n if (topicID == null) {\n return;\n }\n const peersInMesh = this.mesh.get(topicID);\n if (peersInMesh == null) {\n // don't do PX when there is an unknown topic to avoid leaking our peers\n doPX = false;\n // spam hardening: ignore GRAFTs for unknown topics\n return;\n }\n // check if peer is already in the mesh; if so do nothing\n if (peersInMesh.has(id)) {\n return;\n }\n // we don't GRAFT to/from direct peers; complain loudly if this happens\n if (this.direct.has(id)) {\n this.log(\"GRAFT: ignoring request from direct peer %s\", id);\n // this is possibly a bug from a non-reciprical configuration; send a PRUNE\n prune.push(topicID);\n // but don't px\n doPX = false;\n return;\n }\n // make sure we are not backing off that peer\n const expire = this.backoff.get(topicID)?.get(id);\n if (typeof expire === \"number\" && now < expire) {\n this.log(\"GRAFT: ignoring backed off peer %s\", id);\n // add behavioral penalty\n this.score.addPenalty(id, 1, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.ScorePenalty.GraftBackoff);\n // no PX\n doPX = false;\n // check the flood cutoff -- is the GRAFT coming too fast?\n const floodCutoff = expire + this.opts.graftFloodThreshold - this.opts.pruneBackoff;\n if (now < floodCutoff) {\n // extra penalty\n this.score.addPenalty(id, 1, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.ScorePenalty.GraftBackoff);\n }\n // refresh the backoff\n this.addBackoff(id, topicID);\n prune.push(topicID);\n return;\n }\n // check the score\n if (score < 0) {\n // we don't GRAFT peers with negative score\n this.log(\"GRAFT: ignoring peer %s with negative score: score=%d, topic=%s\", id, score, topicID);\n // we do send them PRUNE however, because it's a matter of protocol correctness\n prune.push(topicID);\n // but we won't PX to them\n doPX = false;\n // add/refresh backoff so that we don't reGRAFT too early even if the score decays\n this.addBackoff(id, topicID);\n return;\n }\n // check the number of mesh peers; if it is at (or over) Dhi, we only accept grafts\n // from peers with outbound connections; this is a defensive check to restrict potential\n // mesh takeover attacks combined with love bombing\n if (peersInMesh.size >= this.opts.Dhi && !(this.outbound.get(id) ?? false)) {\n prune.push(topicID);\n this.addBackoff(id, topicID);\n return;\n }\n this.log(\"GRAFT: Add mesh link from %s in %s\", id, topicID);\n this.score.graft(id, topicID);\n peersInMesh.add(id);\n this.metrics?.onAddToMesh(topicID, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.InclusionReason.Subscribed, 1);\n });\n if (prune.length === 0) {\n return [];\n }\n const onUnsubscribe = false;\n return Promise.all(prune.map(async (topic)=>this.makePrune(id, topic, doPX, onUnsubscribe)));\n }\n /**\n * Handles Prune messages\n */ async handlePrune(id, prune) {\n const score = this.score.score(id);\n for (const { topicID, backoff, peers } of prune){\n if (topicID == null) {\n continue;\n }\n const peersInMesh = this.mesh.get(topicID);\n if (peersInMesh == null) {\n return;\n }\n this.log(\"PRUNE: Remove mesh link to %s in %s\", id, topicID);\n this.score.prune(id, topicID);\n if (peersInMesh.has(id)) {\n peersInMesh.delete(id);\n this.metrics?.onRemoveFromMesh(topicID, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.ChurnReason.Prune, 1);\n }\n // is there a backoff specified by the peer? if so obey it\n if (typeof backoff === \"number\" && backoff > 0) {\n this.doAddBackoff(id, topicID, backoff * 1000);\n } else {\n this.addBackoff(id, topicID);\n }\n // PX\n if (peers != null && peers.length > 0) {\n // we ignore PX from peers with insufficient scores\n if (score < this.opts.scoreThresholds.acceptPXThreshold) {\n this.log(\"PRUNE: ignoring PX from peer %s with insufficient score [score = %d, topic = %s]\", id, score, topicID);\n continue;\n }\n await this.pxConnect(peers);\n }\n }\n }\n /**\n * Add standard backoff log for a peer in a topic\n */ addBackoff(id, topic) {\n this.doAddBackoff(id, topic, this.opts.pruneBackoff);\n }\n /**\n * Add backoff expiry interval for a peer in a topic\n *\n * @param id\n * @param topic\n * @param intervalMs - backoff duration in milliseconds\n */ doAddBackoff(id, topic, intervalMs) {\n let backoff = this.backoff.get(topic);\n if (backoff == null) {\n backoff = new Map();\n this.backoff.set(topic, backoff);\n }\n const expire = Date.now() + intervalMs;\n const existingExpire = backoff.get(id) ?? 0;\n if (existingExpire < expire) {\n backoff.set(id, expire);\n }\n }\n /**\n * Apply penalties from broken IHAVE/IWANT promises\n */ applyIwantPenalties() {\n this.gossipTracer.getBrokenPromises().forEach((count, p)=>{\n this.log(\"peer %s didn't follow up in %d IWANT requests; adding penalty\", p, count);\n this.score.addPenalty(p, count, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.ScorePenalty.BrokenPromise);\n });\n }\n /**\n * Clear expired backoff expiries\n */ clearBackoff() {\n // we only clear once every GossipsubPruneBackoffTicks ticks to avoid iterating over the maps too much\n if (this.heartbeatTicks % _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubPruneBackoffTicks !== 0) {\n return;\n }\n const now = Date.now();\n this.backoff.forEach((backoff, topic)=>{\n backoff.forEach((expire, id)=>{\n // add some slack time to the expiration, see https://github.com/libp2p/specs/pull/289\n if (expire + _constants_js__WEBPACK_IMPORTED_MODULE_3__.BACKOFF_SLACK * this.opts.heartbeatInterval < now) {\n backoff.delete(id);\n }\n });\n if (backoff.size === 0) {\n this.backoff.delete(topic);\n }\n });\n }\n /**\n * Maybe reconnect to direct peers\n */ async directConnect() {\n const toconnect = [];\n this.direct.forEach((id)=>{\n if (!this.streamsOutbound.has(id)) {\n toconnect.push(id);\n }\n });\n await Promise.all(toconnect.map(async (id)=>this.connect(id)));\n }\n /**\n * Maybe attempt connection given signed peer records\n */ async pxConnect(peers) {\n if (peers.length > this.opts.prunePeers) {\n (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(peers);\n peers = peers.slice(0, this.opts.prunePeers);\n }\n const toconnect = [];\n await Promise.all(peers.map(async (pi)=>{\n if (pi.peerID == null) {\n return;\n }\n const peer = (0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_16__.peerIdFromBytes)(pi.peerID);\n const p = peer.toString();\n if (this.peers.has(p)) {\n return;\n }\n if (pi.signedPeerRecord == null) {\n toconnect.push(p);\n return;\n }\n // The peer sent us a signed record\n // This is not a record from the peer who sent the record, but another peer who is connected with it\n // Ensure that it is valid\n try {\n if (!await this.components.peerStore.consumePeerRecord(pi.signedPeerRecord, peer)) {\n this.log(\"bogus peer record obtained through px: could not add peer record to address book\");\n return;\n }\n toconnect.push(p);\n } catch (e) {\n this.log(\"bogus peer record obtained through px: invalid signature or not a peer record\");\n }\n }));\n if (toconnect.length === 0) {\n return;\n }\n await Promise.all(toconnect.map(async (id)=>this.connect(id)));\n }\n /**\n * Connect to a peer using the gossipsub protocol\n */ async connect(id) {\n this.log(\"Initiating connection with %s\", id);\n const peerId = (0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_16__.peerIdFromString)(id);\n const connection = await this.components.connectionManager.openConnection(peerId);\n for (const multicodec of this.multicodecs){\n for (const topology of this.components.registrar.getTopologies(multicodec)){\n topology.onConnect?.(peerId, connection);\n }\n }\n }\n /**\n * Subscribes to a topic\n */ subscribe(topic) {\n if (this.status.code !== GossipStatusCode.started) {\n throw new Error(\"Pubsub has not started\");\n }\n if (!this.subscriptions.has(topic)) {\n this.subscriptions.add(topic);\n for (const peerId of this.peers.keys()){\n this.sendSubscriptions(peerId, [\n topic\n ], true);\n }\n }\n this.join(topic);\n }\n /**\n * Unsubscribe to a topic\n */ unsubscribe(topic) {\n if (this.status.code !== GossipStatusCode.started) {\n throw new Error(\"Pubsub is not started\");\n }\n const wasSubscribed = this.subscriptions.delete(topic);\n this.log(\"unsubscribe from %s - am subscribed %s\", topic, wasSubscribed);\n if (wasSubscribed) {\n for (const peerId of this.peers.keys()){\n this.sendSubscriptions(peerId, [\n topic\n ], false);\n }\n }\n this.leave(topic);\n }\n /**\n * Join topic\n */ join(topic) {\n if (this.status.code !== GossipStatusCode.started) {\n throw new Error(\"Gossipsub has not started\");\n }\n // if we are already in the mesh, return\n if (this.mesh.has(topic)) {\n return;\n }\n this.log(\"JOIN %s\", topic);\n this.metrics?.onJoin(topic);\n const toAdd = new Set();\n const backoff = this.backoff.get(topic);\n // check if we have mesh_n peers in fanout[topic] and add them to the mesh if we do,\n // removing the fanout entry.\n const fanoutPeers = this.fanout.get(topic);\n if (fanoutPeers != null) {\n // Remove fanout entry and the last published time\n this.fanout.delete(topic);\n this.fanoutLastpub.delete(topic);\n // remove explicit peers, peers with negative scores, and backoffed peers\n fanoutPeers.forEach((id)=>{\n if (!this.direct.has(id) && this.score.score(id) >= 0 && (backoff == null || !backoff.has(id))) {\n toAdd.add(id);\n }\n });\n this.metrics?.onAddToMesh(topic, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.InclusionReason.Fanout, toAdd.size);\n }\n // check if we need to get more peers, which we randomly select\n if (toAdd.size < this.opts.D) {\n const fanoutCount = toAdd.size;\n const newPeers = this.getRandomGossipPeers(topic, this.opts.D, (id)=>// filter direct peers and peers with negative score\n !toAdd.has(id) && !this.direct.has(id) && this.score.score(id) >= 0 && (backoff == null || !backoff.has(id)));\n newPeers.forEach((peer)=>{\n toAdd.add(peer);\n });\n this.metrics?.onAddToMesh(topic, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.InclusionReason.Random, toAdd.size - fanoutCount);\n }\n this.mesh.set(topic, toAdd);\n toAdd.forEach((id)=>{\n this.log(\"JOIN: Add mesh link to %s in %s\", id, topic);\n this.sendGraft(id, topic);\n // rust-libp2p\n // - peer_score.graft()\n // - Self::control_pool_add()\n // - peer_added_to_mesh()\n });\n }\n /**\n * Leave topic\n */ leave(topic) {\n if (this.status.code !== GossipStatusCode.started) {\n throw new Error(\"Gossipsub has not started\");\n }\n this.log(\"LEAVE %s\", topic);\n this.metrics?.onLeave(topic);\n // Send PRUNE to mesh peers\n const meshPeers = this.mesh.get(topic);\n if (meshPeers != null) {\n Promise.all(Array.from(meshPeers).map(async (id)=>{\n this.log(\"LEAVE: Remove mesh link to %s in %s\", id, topic);\n await this.sendPrune(id, topic);\n })).catch((err)=>{\n this.log(\"Error sending prunes to mesh peers\", err);\n });\n this.mesh.delete(topic);\n }\n }\n selectPeersToForward(topic, propagationSource, excludePeers) {\n const tosend = new Set();\n // Add explicit peers\n const peersInTopic = this.topics.get(topic);\n if (peersInTopic != null) {\n this.direct.forEach((peer)=>{\n if (peersInTopic.has(peer) && propagationSource !== peer && !(excludePeers?.has(peer) ?? false)) {\n tosend.add(peer);\n }\n });\n // As of Mar 2022, spec + golang-libp2p include this while rust-libp2p does not\n // rust-libp2p: https://github.com/libp2p/rust-libp2p/blob/6cc3b4ec52c922bfcf562a29b5805c3150e37c75/protocols/gossipsub/src/behaviour.rs#L2693\n // spec: https://github.com/libp2p/specs/blob/10712c55ab309086a52eec7d25f294df4fa96528/pubsub/gossipsub/gossipsub-v1.0.md?plain=1#L361\n this.floodsubPeers.forEach((peer)=>{\n if (peersInTopic.has(peer) && propagationSource !== peer && !(excludePeers?.has(peer) ?? false) && this.score.score(peer) >= this.opts.scoreThresholds.publishThreshold) {\n tosend.add(peer);\n }\n });\n }\n // add mesh peers\n const meshPeers = this.mesh.get(topic);\n if (meshPeers != null && meshPeers.size > 0) {\n meshPeers.forEach((peer)=>{\n if (propagationSource !== peer && !(excludePeers?.has(peer) ?? false)) {\n tosend.add(peer);\n }\n });\n }\n return tosend;\n }\n selectPeersToPublish(topic) {\n const tosend = new Set();\n const tosendCount = {\n direct: 0,\n floodsub: 0,\n mesh: 0,\n fanout: 0\n };\n const peersInTopic = this.topics.get(topic);\n if (peersInTopic != null) {\n // flood-publish behavior\n // send to direct peers and _all_ peers meeting the publishThreshold\n if (this.opts.floodPublish) {\n peersInTopic.forEach((id)=>{\n if (this.direct.has(id)) {\n tosend.add(id);\n tosendCount.direct++;\n } else if (this.score.score(id) >= this.opts.scoreThresholds.publishThreshold) {\n tosend.add(id);\n tosendCount.floodsub++;\n }\n });\n } else {\n // non-flood-publish behavior\n // send to direct peers, subscribed floodsub peers\n // and some mesh peers above publishThreshold\n // direct peers (if subscribed)\n this.direct.forEach((id)=>{\n if (peersInTopic.has(id)) {\n tosend.add(id);\n tosendCount.direct++;\n }\n });\n // floodsub peers\n // Note: if there are no floodsub peers, we save a loop through peersInTopic Map\n this.floodsubPeers.forEach((id)=>{\n if (peersInTopic.has(id) && this.score.score(id) >= this.opts.scoreThresholds.publishThreshold) {\n tosend.add(id);\n tosendCount.floodsub++;\n }\n });\n // Gossipsub peers handling\n const meshPeers = this.mesh.get(topic);\n if (meshPeers != null && meshPeers.size > 0) {\n meshPeers.forEach((peer)=>{\n tosend.add(peer);\n tosendCount.mesh++;\n });\n // eslint-disable-next-line @typescript-eslint/brace-style\n } else {\n const fanoutPeers = this.fanout.get(topic);\n if (fanoutPeers != null && fanoutPeers.size > 0) {\n fanoutPeers.forEach((peer)=>{\n tosend.add(peer);\n tosendCount.fanout++;\n });\n // eslint-disable-next-line @typescript-eslint/brace-style\n } else {\n // If we are not in the fanout, then pick peers in topic above the publishThreshold\n const newFanoutPeers = this.getRandomGossipPeers(topic, this.opts.D, (id)=>{\n return this.score.score(id) >= this.opts.scoreThresholds.publishThreshold;\n });\n // eslint-disable-next-line max-depth\n if (newFanoutPeers.size > 0) {\n this.fanout.set(topic, newFanoutPeers);\n newFanoutPeers.forEach((peer)=>{\n tosend.add(peer);\n tosendCount.fanout++;\n });\n }\n }\n // We are publishing to fanout peers - update the time we published\n this.fanoutLastpub.set(topic, Date.now());\n }\n }\n }\n return {\n tosend,\n tosendCount\n };\n }\n /**\n * Forwards a message from our peers.\n *\n * For messages published by us (the app layer), this class uses `publish`\n */ forwardMessage(msgIdStr, rawMsg, propagationSource, excludePeers) {\n // message is fully validated inform peer_score\n if (propagationSource != null) {\n this.score.deliverMessage(propagationSource, msgIdStr, rawMsg.topic);\n }\n const tosend = this.selectPeersToForward(rawMsg.topic, propagationSource, excludePeers);\n // Note: Don't throw if tosend is empty, we can have a mesh with a single peer\n // forward the message to peers\n tosend.forEach((id)=>{\n // sendRpc may mutate RPC message on piggyback, create a new message for each peer\n this.sendRpc(id, (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([\n rawMsg\n ]));\n });\n this.metrics?.onForwardMsg(rawMsg.topic, tosend.size);\n }\n /**\n * App layer publishes a message to peers, return number of peers this message is published to\n * Note: `async` due to crypto only if `StrictSign`, otherwise it's a sync fn.\n *\n * For messages not from us, this class uses `forwardMessage`.\n */ async publish(topic, data, opts) {\n const startMs = Date.now();\n const transformedData = this.dataTransform != null ? this.dataTransform.outboundTransform(topic, data) : data;\n if (this.publishConfig == null) {\n throw Error(\"PublishError.Uninitialized\");\n }\n // Prepare raw message with user's publishConfig\n const { raw: rawMsg, msg } = await (0,_utils_buildRawMessage_js__WEBPACK_IMPORTED_MODULE_22__.buildRawMessage)(this.publishConfig, topic, data, transformedData);\n // calculate the message id from the un-transformed data\n const msgId = await this.msgIdFn(msg);\n const msgIdStr = this.msgIdToStrFn(msgId);\n // Current publish opt takes precedence global opts, while preserving false value\n const ignoreDuplicatePublishError = opts?.ignoreDuplicatePublishError ?? this.opts.ignoreDuplicatePublishError;\n if (this.seenCache.has(msgIdStr)) {\n // This message has already been seen. We don't re-publish messages that have already\n // been published on the network.\n if (ignoreDuplicatePublishError) {\n this.metrics?.onPublishDuplicateMsg(topic);\n return {\n recipients: []\n };\n }\n throw Error(\"PublishError.Duplicate\");\n }\n const { tosend, tosendCount } = this.selectPeersToPublish(topic);\n const willSendToSelf = this.opts.emitSelf && this.subscriptions.has(topic);\n // Current publish opt takes precedence global opts, while preserving false value\n const allowPublishToZeroPeers = opts?.allowPublishToZeroPeers ?? this.opts.allowPublishToZeroPeers;\n if (tosend.size === 0 && !allowPublishToZeroPeers && !willSendToSelf) {\n throw Error(\"PublishError.InsufficientPeers\");\n }\n // If the message isn't a duplicate and we have sent it to some peers add it to the\n // duplicate cache and memcache.\n this.seenCache.put(msgIdStr);\n // all published messages are valid\n this.mcache.put({\n msgId,\n msgIdStr\n }, rawMsg, true);\n // If the message is anonymous or has a random author add it to the published message ids cache.\n this.publishedMessageIds.put(msgIdStr);\n const batchPublish = opts?.batchPublish ?? this.opts.batchPublish;\n const rpc = (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([\n rawMsg\n ]);\n if (batchPublish) {\n this.sendRpcInBatch(tosend, rpc);\n } else {\n // Send to set of peers aggregated from direct, mesh, fanout\n for (const id of tosend){\n // sendRpc may mutate RPC message on piggyback, create a new message for each peer\n const sent = this.sendRpc(id, rpc);\n // did not actually send the message\n if (!sent) {\n tosend.delete(id);\n }\n }\n }\n const durationMs = Date.now() - startMs;\n this.metrics?.onPublishMsg(topic, tosendCount, tosend.size, rawMsg.data != null ? rawMsg.data.length : 0, durationMs);\n // Dispatch the message to the user if we are subscribed to the topic\n if (willSendToSelf) {\n tosend.add(this.components.peerId.toString());\n super.dispatchEvent(new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CustomEvent(\"gossipsub:message\", {\n detail: {\n propagationSource: this.components.peerId,\n msgId: msgIdStr,\n msg\n }\n }));\n // TODO: Add option to switch between emit per topic or all messages in one\n super.dispatchEvent(new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CustomEvent(\"message\", {\n detail: msg\n }));\n }\n return {\n recipients: Array.from(tosend.values()).map((str)=>(0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_16__.peerIdFromString)(str))\n };\n }\n /**\n * Send the same data in batch to tosend list without considering cached control messages\n * This is not only faster but also avoid allocating memory for each peer\n * see https://github.com/ChainSafe/js-libp2p-gossipsub/issues/344\n */ sendRpcInBatch(tosend, rpc) {\n const rpcBytes = _message_rpc_js__WEBPACK_IMPORTED_MODULE_20__.RPC.encode(rpc);\n const prefixedData = it_length_prefixed__WEBPACK_IMPORTED_MODULE_0__.encode.single(rpcBytes);\n for (const id of tosend){\n const outboundStream = this.streamsOutbound.get(id);\n if (outboundStream == null) {\n this.log(`Cannot send RPC to ${id} as there is no open stream to it available`);\n tosend.delete(id);\n continue;\n }\n try {\n outboundStream.pushPrefixed(prefixedData);\n } catch (e) {\n tosend.delete(id);\n this.log.error(`Cannot send rpc to ${id}`, e);\n }\n this.metrics?.onRpcSent(rpc, rpcBytes.length);\n }\n }\n /**\n * This function should be called when `asyncValidation` is `true` after\n * the message got validated by the caller. Messages are stored in the `mcache` and\n * validation is expected to be fast enough that the messages should still exist in the cache.\n * There are three possible validation outcomes and the outcome is given in acceptance.\n *\n * If acceptance = `MessageAcceptance.Accept` the message will get propagated to the\n * network. The `propagation_source` parameter indicates who the message was received by and\n * will not be forwarded back to that peer.\n *\n * If acceptance = `MessageAcceptance.Reject` the message will be deleted from the memcache\n * and the P₄ penalty will be applied to the `propagationSource`.\n *\n * If acceptance = `MessageAcceptance.Ignore` the message will be deleted from the memcache\n * but no P₄ penalty will be applied.\n *\n * This function will return true if the message was found in the cache and false if was not\n * in the cache anymore.\n *\n * This should only be called once per message.\n */ reportMessageValidationResult(msgId, propagationSource, acceptance) {\n let cacheEntry;\n if (acceptance === _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.TopicValidatorResult.Accept) {\n cacheEntry = this.mcache.validate(msgId);\n if (cacheEntry != null) {\n const { message: rawMsg, originatingPeers } = cacheEntry;\n // message is fully validated inform peer_score\n this.score.deliverMessage(propagationSource, msgId, rawMsg.topic);\n this.forwardMessage(msgId, cacheEntry.message, propagationSource, originatingPeers);\n }\n // else, Message not in cache. Ignoring forwarding\n // eslint-disable-next-line @typescript-eslint/brace-style\n } else {\n cacheEntry = this.mcache.remove(msgId);\n if (cacheEntry != null) {\n const rejectReason = (0,_types_js__WEBPACK_IMPORTED_MODULE_21__.rejectReasonFromAcceptance)(acceptance);\n const { message: rawMsg, originatingPeers } = cacheEntry;\n // Tell peer_score about reject\n // Reject the original source, and any duplicates we've seen from other peers.\n this.score.rejectMessage(propagationSource, msgId, rawMsg.topic, rejectReason);\n for (const peer of originatingPeers){\n this.score.rejectMessage(peer, msgId, rawMsg.topic, rejectReason);\n }\n }\n // else, Message not in cache. Ignoring forwarding\n }\n const firstSeenTimestampMs = this.score.messageFirstSeenTimestampMs(msgId);\n this.metrics?.onReportValidation(cacheEntry, acceptance, firstSeenTimestampMs);\n }\n /**\n * Sends a GRAFT message to a peer\n */ sendGraft(id, topic) {\n const graft = [\n {\n topicID: topic\n }\n ];\n const out = (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([], {\n graft\n });\n this.sendRpc(id, out);\n }\n /**\n * Sends a PRUNE message to a peer\n */ async sendPrune(id, topic) {\n // this is only called from leave() function\n const onUnsubscribe = true;\n const prune = [\n await this.makePrune(id, topic, this.opts.doPX, onUnsubscribe)\n ];\n const out = (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([], {\n prune\n });\n this.sendRpc(id, out);\n }\n /**\n * Send an rpc object to a peer\n */ sendRpc(id, rpc) {\n const outboundStream = this.streamsOutbound.get(id);\n if (outboundStream == null) {\n this.log(`Cannot send RPC to ${id} as there is no open stream to it available`);\n return false;\n }\n // piggyback control message retries\n const ctrl = this.control.get(id);\n if (ctrl != null) {\n this.piggybackControl(id, rpc, ctrl);\n this.control.delete(id);\n }\n // piggyback gossip\n const ihave = this.gossip.get(id);\n if (ihave != null) {\n this.piggybackGossip(id, rpc, ihave);\n this.gossip.delete(id);\n }\n const rpcBytes = _message_rpc_js__WEBPACK_IMPORTED_MODULE_20__.RPC.encode(rpc);\n try {\n outboundStream.push(rpcBytes);\n } catch (e) {\n this.log.error(`Cannot send rpc to ${id}`, e);\n // if the peer had control messages or gossip, re-attach\n if (ctrl != null) {\n this.control.set(id, ctrl);\n }\n if (ihave != null) {\n this.gossip.set(id, ihave);\n }\n return false;\n }\n this.metrics?.onRpcSent(rpc, rpcBytes.length);\n return true;\n }\n /** Mutates `outRpc` adding graft and prune control messages */ piggybackControl(id, outRpc, ctrl) {\n const rpc = (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.ensureControl)(outRpc);\n for (const graft of ctrl.graft){\n if (graft.topicID != null && (this.mesh.get(graft.topicID)?.has(id) ?? false)) {\n rpc.control.graft.push(graft);\n }\n }\n for (const prune of ctrl.prune){\n if (prune.topicID != null && !(this.mesh.get(prune.topicID)?.has(id) ?? false)) {\n rpc.control.prune.push(prune);\n }\n }\n }\n /** Mutates `outRpc` adding ihave control messages */ piggybackGossip(id, outRpc, ihave) {\n const rpc = (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.ensureControl)(outRpc);\n rpc.control.ihave = ihave;\n }\n /**\n * Send graft and prune messages\n *\n * @param tograft - peer id => topic[]\n * @param toprune - peer id => topic[]\n */ async sendGraftPrune(tograft, toprune, noPX) {\n const doPX = this.opts.doPX;\n const onUnsubscribe = false;\n for (const [id, topics] of tograft){\n const graft = topics.map((topicID)=>({\n topicID\n }));\n let prune = [];\n // If a peer also has prunes, process them now\n const pruning = toprune.get(id);\n if (pruning != null) {\n prune = await Promise.all(pruning.map(async (topicID)=>this.makePrune(id, topicID, doPX && !(noPX.get(id) ?? false), onUnsubscribe)));\n toprune.delete(id);\n }\n this.sendRpc(id, (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([], {\n graft,\n prune\n }));\n }\n for (const [id, topics] of toprune){\n const prune = await Promise.all(topics.map(async (topicID)=>this.makePrune(id, topicID, doPX && !(noPX.get(id) ?? false), onUnsubscribe)));\n this.sendRpc(id, (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([], {\n prune\n }));\n }\n }\n /**\n * Emits gossip - Send IHAVE messages to a random set of gossip peers\n */ emitGossip(peersToGossipByTopic) {\n const gossipIDsByTopic = this.mcache.getGossipIDs(new Set(peersToGossipByTopic.keys()));\n for (const [topic, peersToGossip] of peersToGossipByTopic){\n this.doEmitGossip(topic, peersToGossip, gossipIDsByTopic.get(topic) ?? []);\n }\n }\n /**\n * Send gossip messages to GossipFactor peers above threshold with a minimum of D_lazy\n * Peers are randomly selected from the heartbeat which exclude mesh + fanout peers\n * We also exclude direct peers, as there is no reason to emit gossip to them\n *\n * @param topic\n * @param candidateToGossip - peers to gossip\n * @param messageIDs - message ids to gossip\n */ doEmitGossip(topic, candidateToGossip, messageIDs) {\n if (messageIDs.length === 0) {\n return;\n }\n // shuffle to emit in random order\n (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(messageIDs);\n // if we are emitting more than GossipsubMaxIHaveLength ids, truncate the list\n if (messageIDs.length > _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubMaxIHaveLength) {\n // we do the truncation (with shuffling) per peer below\n this.log(\"too many messages for gossip; will truncate IHAVE list (%d messages)\", messageIDs.length);\n }\n if (candidateToGossip.size === 0) return;\n let target = this.opts.Dlazy;\n const factor = _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubGossipFactor * candidateToGossip.size;\n let peersToGossip = candidateToGossip;\n if (factor > target) {\n target = factor;\n }\n if (target > peersToGossip.size) {\n target = peersToGossip.size;\n } else {\n // only shuffle if needed\n peersToGossip = (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(Array.from(peersToGossip)).slice(0, target);\n }\n // Emit the IHAVE gossip to the selected peers up to the target\n peersToGossip.forEach((id)=>{\n let peerMessageIDs = messageIDs;\n if (messageIDs.length > _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubMaxIHaveLength) {\n // shuffle and slice message IDs per peer so that we emit a different set for each peer\n // we have enough reduncancy in the system that this will significantly increase the message\n // coverage when we do truncate\n peerMessageIDs = (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(peerMessageIDs.slice()).slice(0, _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubMaxIHaveLength);\n }\n this.pushGossip(id, {\n topicID: topic,\n messageIDs: peerMessageIDs\n });\n });\n }\n /**\n * Flush gossip and control messages\n */ flush() {\n // send gossip first, which will also piggyback control\n for (const [peer, ihave] of this.gossip.entries()){\n this.gossip.delete(peer);\n this.sendRpc(peer, (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([], {\n ihave\n }));\n }\n // send the remaining control messages\n for (const [peer, control] of this.control.entries()){\n this.control.delete(peer);\n const out = (0,_utils_create_gossip_rpc_js__WEBPACK_IMPORTED_MODULE_23__.createGossipRpc)([], {\n graft: control.graft,\n prune: control.prune\n });\n this.sendRpc(peer, out);\n }\n }\n /**\n * Adds new IHAVE messages to pending gossip\n */ pushGossip(id, controlIHaveMsgs) {\n this.log(\"Add gossip to %s\", id);\n const gossip = this.gossip.get(id) ?? [];\n this.gossip.set(id, gossip.concat(controlIHaveMsgs));\n }\n /**\n * Make a PRUNE control message for a peer in a topic\n */ async makePrune(id, topic, doPX, onUnsubscribe) {\n this.score.prune(id, topic);\n if (this.streamsOutbound.get(id)?.protocol === _constants_js__WEBPACK_IMPORTED_MODULE_3__.GossipsubIDv10) {\n // Gossipsub v1.0 -- no backoff, the peer won't be able to parse it anyway\n return {\n topicID: topic,\n peers: []\n };\n }\n // backoff is measured in seconds\n // GossipsubPruneBackoff and GossipsubUnsubscribeBackoff are measured in milliseconds\n // The protobuf has it as a uint64\n const backoffMs = onUnsubscribe ? this.opts.unsubcribeBackoff : this.opts.pruneBackoff;\n const backoff = backoffMs / 1000;\n this.doAddBackoff(id, topic, backoffMs);\n if (!doPX) {\n return {\n topicID: topic,\n peers: [],\n backoff\n };\n }\n // select peers for Peer eXchange\n const peers = this.getRandomGossipPeers(topic, this.opts.prunePeers, (xid)=>{\n return xid !== id && this.score.score(xid) >= 0;\n });\n const px = await Promise.all(Array.from(peers).map(async (peerId)=>{\n // see if we have a signed record to send back; if we don't, just send\n // the peer ID and let the pruned peer find them in the DHT -- we can't trust\n // unsigned address records through PX anyways\n // Finding signed records in the DHT is not supported at the time of writing in js-libp2p\n const id = (0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_16__.peerIdFromString)(peerId);\n let peerInfo;\n try {\n peerInfo = await this.components.peerStore.get(id);\n } catch (err) {\n if (err.code !== \"ERR_NOT_FOUND\") {\n throw err;\n }\n }\n return {\n peerID: id.toBytes(),\n signedPeerRecord: peerInfo?.peerRecordEnvelope\n };\n }));\n return {\n topicID: topic,\n peers: px,\n backoff\n };\n }\n /**\n * Maintains the mesh and fanout maps in gossipsub.\n */ async heartbeat() {\n const { D, Dlo, Dhi, Dscore, Dout, fanoutTTL } = this.opts;\n this.heartbeatTicks++;\n // cache scores throught the heartbeat\n const scores = new Map();\n const getScore = (id)=>{\n let s = scores.get(id);\n if (s === undefined) {\n s = this.score.score(id);\n scores.set(id, s);\n }\n return s;\n };\n // peer id => topic[]\n const tograft = new Map();\n // peer id => topic[]\n const toprune = new Map();\n // peer id => don't px\n const noPX = new Map();\n // clean up expired backoffs\n this.clearBackoff();\n // clean up peerhave/iasked counters\n this.peerhave.clear();\n this.metrics?.cacheSize.set({\n cache: \"iasked\"\n }, this.iasked.size);\n this.iasked.clear();\n // apply IWANT request penalties\n this.applyIwantPenalties();\n // ensure direct peers are connected\n if (this.heartbeatTicks % this.opts.directConnectTicks === 0) {\n // we only do this every few ticks to allow pending connections to complete and account for restarts/downtime\n await this.directConnect();\n }\n // EXTRA: Prune caches\n this.fastMsgIdCache?.prune();\n this.seenCache.prune();\n this.gossipTracer.prune();\n this.publishedMessageIds.prune();\n /**\n * Instead of calling getRandomGossipPeers multiple times to:\n * + get more mesh peers\n * + more outbound peers\n * + oppportunistic grafting\n * + emitGossip\n *\n * We want to loop through the topic peers only a single time and prepare gossip peers for all topics to improve the performance\n */ const peersToGossipByTopic = new Map();\n // maintain the mesh for topics we have joined\n // eslint-disable-next-line complexity\n this.mesh.forEach((peers, topic)=>{\n const peersInTopic = this.topics.get(topic);\n const candidateMeshPeers = new Set();\n const peersToGossip = new Set();\n peersToGossipByTopic.set(topic, peersToGossip);\n if (peersInTopic != null) {\n const shuffledPeers = (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(Array.from(peersInTopic));\n const backoff = this.backoff.get(topic);\n for (const id of shuffledPeers){\n const peerStreams = this.streamsOutbound.get(id);\n if (peerStreams != null && this.multicodecs.includes(peerStreams.protocol) && !peers.has(id) && !this.direct.has(id)) {\n const score = getScore(id);\n if ((backoff == null || !backoff.has(id)) && score >= 0) candidateMeshPeers.add(id);\n // instead of having to find gossip peers after heartbeat which require another loop\n // we prepare peers to gossip in a topic within heartbeat to improve performance\n if (score >= this.opts.scoreThresholds.gossipThreshold) peersToGossip.add(id);\n }\n }\n }\n // prune/graft helper functions (defined per topic)\n const prunePeer = (id, reason)=>{\n this.log(\"HEARTBEAT: Remove mesh link to %s in %s\", id, topic);\n // no need to update peer score here as we do it in makePrune\n // add prune backoff record\n this.addBackoff(id, topic);\n // remove peer from mesh\n peers.delete(id);\n // after pruning a peer from mesh, we want to gossip topic to it if its score meet the gossip threshold\n if (getScore(id) >= this.opts.scoreThresholds.gossipThreshold) peersToGossip.add(id);\n this.metrics?.onRemoveFromMesh(topic, reason, 1);\n // add to toprune\n const topics = toprune.get(id);\n if (topics == null) {\n toprune.set(id, [\n topic\n ]);\n } else {\n topics.push(topic);\n }\n };\n const graftPeer = (id, reason)=>{\n this.log(\"HEARTBEAT: Add mesh link to %s in %s\", id, topic);\n // update peer score\n this.score.graft(id, topic);\n // add peer to mesh\n peers.add(id);\n // when we add a new mesh peer, we don't want to gossip messages to it\n peersToGossip.delete(id);\n this.metrics?.onAddToMesh(topic, reason, 1);\n // add to tograft\n const topics = tograft.get(id);\n if (topics == null) {\n tograft.set(id, [\n topic\n ]);\n } else {\n topics.push(topic);\n }\n };\n // drop all peers with negative score, without PX\n peers.forEach((id)=>{\n const score = getScore(id);\n // Record the score\n if (score < 0) {\n this.log(\"HEARTBEAT: Prune peer %s with negative score: score=%d, topic=%s\", id, score, topic);\n prunePeer(id, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.ChurnReason.BadScore);\n noPX.set(id, true);\n }\n });\n // do we have enough peers?\n if (peers.size < Dlo) {\n const ineed = D - peers.size;\n // slice up to first `ineed` items and remove them from candidateMeshPeers\n // same to `const newMeshPeers = candidateMeshPeers.slice(0, ineed)`\n const newMeshPeers = (0,_utils_set_js__WEBPACK_IMPORTED_MODULE_25__.removeFirstNItemsFromSet)(candidateMeshPeers, ineed);\n newMeshPeers.forEach((p)=>{\n graftPeer(p, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.InclusionReason.NotEnough);\n });\n }\n // do we have to many peers?\n if (peers.size > Dhi) {\n let peersArray = Array.from(peers);\n // sort by score\n peersArray.sort((a, b)=>getScore(b) - getScore(a));\n // We keep the first D_score peers by score and the remaining up to D randomly\n // under the constraint that we keep D_out peers in the mesh (if we have that many)\n peersArray = peersArray.slice(0, Dscore).concat((0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(peersArray.slice(Dscore)));\n // count the outbound peers we are keeping\n let outbound = 0;\n peersArray.slice(0, D).forEach((p)=>{\n if (this.outbound.get(p) ?? false) {\n outbound++;\n }\n });\n // if it's less than D_out, bubble up some outbound peers from the random selection\n if (outbound < Dout) {\n const rotate = (i)=>{\n // rotate the peersArray to the right and put the ith peer in the front\n const p = peersArray[i];\n for(let j = i; j > 0; j--){\n peersArray[j] = peersArray[j - 1];\n }\n peersArray[0] = p;\n };\n // first bubble up all outbound peers already in the selection to the front\n if (outbound > 0) {\n let ihave = outbound;\n for(let i = 1; i < D && ihave > 0; i++){\n // eslint-disable-next-line max-depth\n if (this.outbound.get(peersArray[i]) ?? false) {\n rotate(i);\n ihave--;\n }\n }\n }\n // now bubble up enough outbound peers outside the selection to the front\n let ineed = D - outbound;\n for(let i = D; i < peersArray.length && ineed > 0; i++){\n if (this.outbound.get(peersArray[i]) ?? false) {\n rotate(i);\n ineed--;\n }\n }\n }\n // prune the excess peers\n peersArray.slice(D).forEach((p)=>{\n prunePeer(p, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.ChurnReason.Excess);\n });\n }\n // do we have enough outbound peers?\n if (peers.size >= Dlo) {\n // count the outbound peers we have\n let outbound = 0;\n peers.forEach((p)=>{\n if (this.outbound.get(p) ?? false) {\n outbound++;\n }\n });\n // if it's less than D_out, select some peers with outbound connections and graft them\n if (outbound < Dout) {\n const ineed = Dout - outbound;\n const newMeshPeers = (0,_utils_set_js__WEBPACK_IMPORTED_MODULE_25__.removeItemsFromSet)(candidateMeshPeers, ineed, (id)=>this.outbound.get(id) === true);\n newMeshPeers.forEach((p)=>{\n graftPeer(p, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.InclusionReason.Outbound);\n });\n }\n }\n // should we try to improve the mesh with opportunistic grafting?\n if (this.heartbeatTicks % this.opts.opportunisticGraftTicks === 0 && peers.size > 1) {\n // Opportunistic grafting works as follows: we check the median score of peers in the\n // mesh; if this score is below the opportunisticGraftThreshold, we select a few peers at\n // random with score over the median.\n // The intention is to (slowly) improve an underperforming mesh by introducing good\n // scoring peers that may have been gossiping at us. This allows us to get out of sticky\n // situations where we are stuck with poor peers and also recover from churn of good peers.\n // now compute the median peer score in the mesh\n const peersList = Array.from(peers).sort((a, b)=>getScore(a) - getScore(b));\n const medianIndex = Math.floor(peers.size / 2);\n const medianScore = getScore(peersList[medianIndex]);\n // if the median score is below the threshold, select a better peer (if any) and GRAFT\n if (medianScore < this.opts.scoreThresholds.opportunisticGraftThreshold) {\n const ineed = this.opts.opportunisticGraftPeers;\n const newMeshPeers = (0,_utils_set_js__WEBPACK_IMPORTED_MODULE_25__.removeItemsFromSet)(candidateMeshPeers, ineed, (id)=>getScore(id) > medianScore);\n for (const id of newMeshPeers){\n this.log(\"HEARTBEAT: Opportunistically graft peer %s on topic %s\", id, topic);\n graftPeer(id, _metrics_js__WEBPACK_IMPORTED_MODULE_13__.InclusionReason.Opportunistic);\n }\n }\n }\n });\n // expire fanout for topics we haven't published to in a while\n const now = Date.now();\n this.fanoutLastpub.forEach((lastpb, topic)=>{\n if (lastpb + fanoutTTL < now) {\n this.fanout.delete(topic);\n this.fanoutLastpub.delete(topic);\n }\n });\n // maintain our fanout for topics we are publishing but we have not joined\n this.fanout.forEach((fanoutPeers, topic)=>{\n // checks whether our peers are still in the topic and have a score above the publish threshold\n const topicPeers = this.topics.get(topic);\n fanoutPeers.forEach((id)=>{\n if (!(topicPeers?.has(id) ?? false) || getScore(id) < this.opts.scoreThresholds.publishThreshold) {\n fanoutPeers.delete(id);\n }\n });\n const peersInTopic = this.topics.get(topic);\n const candidateFanoutPeers = [];\n // the fanout map contains topics to which we are not subscribed.\n const peersToGossip = new Set();\n peersToGossipByTopic.set(topic, peersToGossip);\n if (peersInTopic != null) {\n const shuffledPeers = (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(Array.from(peersInTopic));\n for (const id of shuffledPeers){\n const peerStreams = this.streamsOutbound.get(id);\n if (peerStreams != null && this.multicodecs.includes(peerStreams.protocol) && !fanoutPeers.has(id) && !this.direct.has(id)) {\n const score = getScore(id);\n if (score >= this.opts.scoreThresholds.publishThreshold) candidateFanoutPeers.push(id);\n // instead of having to find gossip peers after heartbeat which require another loop\n // we prepare peers to gossip in a topic within heartbeat to improve performance\n if (score >= this.opts.scoreThresholds.gossipThreshold) peersToGossip.add(id);\n }\n }\n }\n // do we need more peers?\n if (fanoutPeers.size < D) {\n const ineed = D - fanoutPeers.size;\n candidateFanoutPeers.slice(0, ineed).forEach((id)=>{\n fanoutPeers.add(id);\n peersToGossip?.delete(id);\n });\n }\n });\n this.emitGossip(peersToGossipByTopic);\n // send coalesced GRAFT/PRUNE messages (will piggyback gossip)\n await this.sendGraftPrune(tograft, toprune, noPX);\n // flush pending gossip that wasn't piggybacked above\n this.flush();\n // advance the message history window\n this.mcache.shift();\n this.dispatchEvent(new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CustomEvent(\"gossipsub:heartbeat\"));\n }\n /**\n * Given a topic, returns up to count peers subscribed to that topic\n * that pass an optional filter function\n *\n * @param topic\n * @param count\n * @param filter - a function to filter acceptable peers\n */ getRandomGossipPeers(topic, count, filter = ()=>true) {\n const peersInTopic = this.topics.get(topic);\n if (peersInTopic == null) {\n return new Set();\n }\n // Adds all peers using our protocol\n // that also pass the filter function\n let peers = [];\n peersInTopic.forEach((id)=>{\n const peerStreams = this.streamsOutbound.get(id);\n if (peerStreams == null) {\n return;\n }\n if (this.multicodecs.includes(peerStreams.protocol) && filter(id)) {\n peers.push(id);\n }\n });\n // Pseudo-randomly shuffles peers\n peers = (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_24__.shuffle)(peers);\n if (count > 0 && peers.length > count) {\n peers = peers.slice(0, count);\n }\n return new Set(peers);\n }\n onScrapeMetrics(metrics) {\n /* Data structure sizes */ metrics.mcacheSize.set(this.mcache.size);\n metrics.mcacheNotValidatedCount.set(this.mcache.notValidatedCount);\n // Arbitrary size\n metrics.cacheSize.set({\n cache: \"direct\"\n }, this.direct.size);\n metrics.cacheSize.set({\n cache: \"seenCache\"\n }, this.seenCache.size);\n metrics.cacheSize.set({\n cache: \"fastMsgIdCache\"\n }, this.fastMsgIdCache?.size ?? 0);\n metrics.cacheSize.set({\n cache: \"publishedMessageIds\"\n }, this.publishedMessageIds.size);\n metrics.cacheSize.set({\n cache: \"mcache\"\n }, this.mcache.size);\n metrics.cacheSize.set({\n cache: \"score\"\n }, this.score.size);\n metrics.cacheSize.set({\n cache: \"gossipTracer.promises\"\n }, this.gossipTracer.size);\n metrics.cacheSize.set({\n cache: \"gossipTracer.requests\"\n }, this.gossipTracer.requestMsByMsgSize);\n // Bounded by topic\n metrics.cacheSize.set({\n cache: \"topics\"\n }, this.topics.size);\n metrics.cacheSize.set({\n cache: \"subscriptions\"\n }, this.subscriptions.size);\n metrics.cacheSize.set({\n cache: \"mesh\"\n }, this.mesh.size);\n metrics.cacheSize.set({\n cache: \"fanout\"\n }, this.fanout.size);\n // Bounded by peer\n metrics.cacheSize.set({\n cache: \"peers\"\n }, this.peers.size);\n metrics.cacheSize.set({\n cache: \"streamsOutbound\"\n }, this.streamsOutbound.size);\n metrics.cacheSize.set({\n cache: \"streamsInbound\"\n }, this.streamsInbound.size);\n metrics.cacheSize.set({\n cache: \"acceptFromWhitelist\"\n }, this.acceptFromWhitelist.size);\n metrics.cacheSize.set({\n cache: \"gossip\"\n }, this.gossip.size);\n metrics.cacheSize.set({\n cache: \"control\"\n }, this.control.size);\n metrics.cacheSize.set({\n cache: \"peerhave\"\n }, this.peerhave.size);\n metrics.cacheSize.set({\n cache: \"outbound\"\n }, this.outbound.size);\n // 2D nested data structure\n let backoffSize = 0;\n const now = Date.now();\n metrics.connectedPeersBackoffSec.reset();\n for (const backoff of this.backoff.values()){\n backoffSize += backoff.size;\n for (const [peer, expiredMs] of backoff.entries()){\n if (this.peers.has(peer)) {\n metrics.connectedPeersBackoffSec.observe(Math.max(0, expiredMs - now) / 1000);\n }\n }\n }\n metrics.cacheSize.set({\n cache: \"backoff\"\n }, backoffSize);\n // Peer counts\n for (const [topicStr, peers] of this.topics){\n metrics.topicPeersCount.set({\n topicStr\n }, peers.size);\n }\n for (const [topicStr, peers] of this.mesh){\n metrics.meshPeerCounts.set({\n topicStr\n }, peers.size);\n }\n // Peer scores\n const scores = [];\n const scoreByPeer = new Map();\n metrics.behaviourPenalty.reset();\n for (const peerIdStr of this.peers.keys()){\n const score = this.score.score(peerIdStr);\n scores.push(score);\n scoreByPeer.set(peerIdStr, score);\n metrics.behaviourPenalty.observe(this.score.peerStats.get(peerIdStr)?.behaviourPenalty ?? 0);\n }\n metrics.registerScores(scores, this.opts.scoreThresholds);\n // Breakdown score per mesh topicLabel\n metrics.registerScorePerMesh(this.mesh, scoreByPeer);\n // Breakdown on each score weight\n const sw = (0,_score_scoreMetrics_js__WEBPACK_IMPORTED_MODULE_26__.computeAllPeersScoreWeights)(this.peers.keys(), this.score.peerStats, this.score.params, this.score.peerIPs, metrics.topicStrToLabel);\n metrics.registerScoreWeights(sw);\n }\n}\nfunction gossipsub(init = {}) {\n return (components)=>new GossipSub(components, init);\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFtSDtBQUMvQztBQUN4QjtBQUNiO0FBQ1E7QUFDSztBQUNpSDtBQUM3RjtBQUN6QjtBQUNXO0FBQ3VEO0FBQ1Y7QUFDekI7QUFDVjtBQUNsQjtBQUMwRDtBQUNqQjtBQUNMO0FBQ2hCO0FBQ2M7QUFDcEI7QUFDYztBQUNRO0FBQ3RCO0FBQ2pELE1BQU0rQyxhQUFhckMseURBQXdCLENBQUM7QUFDbkQsSUFBSXVDO0FBQ0gsVUFBVUEsZ0JBQWdCO0lBQ3ZCQSxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRztJQUNwREEsZ0JBQWdCLENBQUNBLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUc7QUFDeEQsR0FBR0Esb0JBQXFCQSxDQUFBQSxtQkFBbUIsQ0FBQztBQUNyQyxNQUFNQyxrQkFBa0JqRCxnRUFBaUJBOzthQStHckM4QyxhQUFhckMseURBQXdCOztJQVc1Q3lDLFlBQVlDLFVBQVUsRUFBRUMsVUFBVSxDQUFDLENBQUMsQ0FBRTtRQUNsQyxLQUFLO2FBdEhUQyxjQUFjO1lBQUM1Qyx5REFBd0I7WUFBRUEseURBQXdCO1NBQUM7UUFHbEUsUUFBUTthQUNSOEMsUUFBUSxJQUFJQzthQUNaQyxpQkFBaUIsSUFBSUM7YUFDckJDLGtCQUFrQixJQUFJRDtRQUN0QixzREFBc0QsUUFDdERFLHdCQUF3QnBELHFEQUFRQSxDQUFDO1lBQUVxRCxZQUFZO1FBQUs7UUFDcEQsaUJBQWlCLFFBQ2pCQyxTQUFTLElBQUlOO1FBQ2IsbUJBQW1CLFFBQ25CTyxnQkFBZ0IsSUFBSVA7UUFHcEI7O0tBRUMsUUFDRFEsc0JBQXNCLElBQUlOO1FBQzFCOztLQUVDLFFBQ0RPLFNBQVMsSUFBSVA7UUFDYjs7S0FFQyxRQUNEUSxnQkFBZ0Is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YyxJQUFJcmY7UUFDeEIyQixRQUFRMmQsZ0JBQWdCLENBQUNOLEtBQUs7UUFDOUIsS0FBSyxNQUFNTyxhQUFhLElBQUksQ0FBQzFmLEtBQUssQ0FBQytJLElBQUksR0FBSTtZQUN2QyxNQUFNUCxRQUFRLElBQUksQ0FBQ0EsS0FBSyxDQUFDQSxLQUFLLENBQUNrWDtZQUMvQjlDLE9BQU81VyxJQUFJLENBQUN3QztZQUNaZ1gsWUFBWWxYLEdBQUcsQ0FBQ29YLFdBQVdsWDtZQUMzQjFHLFFBQVEyZCxnQkFBZ0IsQ0FBQ0osT0FBTyxDQUFDLElBQUksQ0FBQzdXLEtBQUssQ0FBQ21YLFNBQVMsQ0FBQzNTLEdBQUcsQ0FBQzBTLFlBQVlELG9CQUFvQjtRQUM5RjtRQUNBM2QsUUFBUThkLGNBQWMsQ0FBQ2hELFFBQVEsSUFBSSxDQUFDbGEsSUFBSSxDQUFDbUQsZUFBZTtRQUN4RCxzQ0FBc0M7UUFDdEMvRCxRQUFRK2Qsb0JBQW9CLENBQUMsSUFBSSxDQUFDamYsSUFBSSxFQUFFNGU7UUFDeEMsaUNBQWlDO1FBQ2pDLE1BQU1NLEtBQUs1aEIsb0ZBQTJCQSxDQUFDLElBQUksQ0FBQzhCLEtBQUssQ0FBQytJLElBQUksSUFBSSxJQUFJLENBQUNQLEtBQUssQ0FBQ21YLFNBQVMsRUFBRSxJQUFJLENBQUNuWCxLQUFLLENBQUN1WCxNQUFNLEVBQUUsSUFBSSxDQUFDdlgsS0FBSyxDQUFDd1gsT0FBTyxFQUFFbGUsUUFBUW1lLGVBQWU7UUFDOUluZSxRQUFRb2Usb0JBQW9CLENBQUNKO0lBQ2pDO0FBQ0o7QUFDTyxTQUFTSyxVQUFVQyxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUN4Z0IsYUFBZSxJQUFJRixVQUFVRSxZQUFZd2dCO0FBQ3JELEVBQ0EsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL2luZGV4LmpzP2ViMDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tRXZlbnQsIFR5cGVkRXZlbnRFbWl0dGVyLCBTdHJpY3RTaWduLCBTdHJpY3ROb1NpZ24sIFRvcGljVmFsaWRhdG9yUmVzdWx0IH0gZnJvbSAnQGxpYnAycC9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcGVlcklkRnJvbUJ5dGVzLCBwZWVySWRGcm9tU3RyaW5nIH0gZnJvbSAnQGxpYnAycC9wZWVyLWlkJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJ2l0LWxlbmd0aC1wcmVmaXhlZCc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAnaXQtcGlwZSc7XG5pbXBvcnQgeyBwdXNoYWJsZSB9IGZyb20gJ2l0LXB1c2hhYmxlJztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBBQ0NFUFRfRlJPTV9XSElURUxJU1RfRFVSQVRJT05fTVMsIEFDQ0VQVF9GUk9NX1dISVRFTElTVF9NQVhfTUVTU0FHRVMsIEFDQ0VQVF9GUk9NX1dISVRFTElTVF9USFJFU0hPTERfU0NPUkUsIEJBQ0tPRkZfU0xBQ0sgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0RGVjb2RlUnBjTGltaXRzIH0gZnJvbSAnLi9tZXNzYWdlL2RlY29kZVJwYy5qcyc7XG5pbXBvcnQgeyBSUEMgfSBmcm9tICcuL21lc3NhZ2UvcnBjLmpzJztcbmltcG9ydCB7IE1lc3NhZ2VDYWNoZSB9IGZyb20gJy4vbWVzc2FnZS1jYWNoZS5qcyc7XG5pbXBvcnQgeyBDaHVyblJlYXNvbiwgZ2V0TWV0cmljcywgSUhhdmVJZ25vcmVSZWFzb24sIEluY2x1c2lvblJlYXNvbiwgU2NvcmVQZW5hbHR5IH0gZnJvbSAnLi9tZXRyaWNzLmpzJztcbmltcG9ydCB7IFBlZXJTY29yZSwgY3JlYXRlUGVlclNjb3JlUGFyYW1zLCBjcmVhdGVQZWVyU2NvcmVUaHJlc2hvbGRzIH0gZnJvbSAnLi9zY29yZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBjb21wdXRlQWxsUGVlcnNTY29yZVdlaWdodHMgfSBmcm9tICcuL3Njb3JlL3Njb3JlTWV0cmljcy5qcyc7XG5pbXBvcnQgeyBJbmJvdW5kU3RyZWFtLCBPdXRib3VuZFN0cmVhbSB9IGZyb20gJy4vc3RyZWFtLmpzJztcbmltcG9ydCB7IElXYW50VHJhY2VyIH0gZnJvbSAnLi90cmFjZXIuanMnO1xuaW1wb3J0IHsgVmFsaWRhdGVFcnJvciwgTWVzc2FnZVN0YXR1cywgUmVqZWN0UmVhc29uLCByZWplY3RSZWFzb25Gcm9tQWNjZXB0YW5jZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYnVpbGRSYXdNZXNzYWdlLCB2YWxpZGF0ZVRvUmF3TWVzc2FnZSB9IGZyb20gJy4vdXRpbHMvYnVpbGRSYXdNZXNzYWdlLmpzJztcbmltcG9ydCB7IGNyZWF0ZUdvc3NpcFJwYywgZW5zdXJlQ29udHJvbCB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLWdvc3NpcC1ycGMuanMnO1xuaW1wb3J0IHsgc2h1ZmZsZSwgbWVzc2FnZUlkVG9TdHJpbmcgfSBmcm9tICcuL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCB7IG1zZ0lkRm5TdHJpY3ROb1NpZ24sIG1zZ0lkRm5TdHJpY3RTaWduIH0gZnJvbSAnLi91dGlscy9tc2dJZEZuLmpzJztcbmltcG9ydCB7IG11bHRpYWRkclRvSVBTdHIgfSBmcm9tICcuL3V0aWxzL211bHRpYWRkci5qcyc7XG5pbXBvcnQgeyBnZXRQdWJsaXNoQ29uZmlnRnJvbVBlZXJJZCB9IGZyb20gJy4vdXRpbHMvcHVibGlzaENvbmZpZy5qcyc7XG5pbXBvcnQgeyByZW1vdmVGaXJzdE5JdGVtc0Zyb21TZXQsIHJlbW92ZUl0ZW1zRnJvbVNldCB9IGZyb20gJy4vdXRpbHMvc2V0LmpzJztcbmltcG9ydCB7IFNpbXBsZVRpbWVDYWNoZSB9IGZyb20gJy4vdXRpbHMvdGltZS1jYWNoZS5qcyc7XG5leHBvcnQgY29uc3QgbXVsdGljb2RlYyA9IGNvbnN0YW50cy5Hb3NzaXBzdWJJRHYxMTtcbnZhciBHb3NzaXBTdGF0dXNDb2RlO1xuKGZ1bmN0aW9uIChHb3NzaXBTdGF0dXNDb2RlKSB7XG4gICAgR29zc2lwU3RhdHVzQ29kZVtHb3NzaXBTdGF0dXNDb2RlW1wic3RhcnRlZFwiXSA9IDBdID0gXCJzdGFydGVkXCI7XG4gICAgR29zc2lwU3RhdHVzQ29kZVtHb3NzaXBTdGF0dXNDb2RlW1wic3RvcHBlZFwiXSA9IDFdID0gXCJzdG9wcGVkXCI7XG59KShHb3NzaXBTdGF0dXNDb2RlIHx8IChHb3NzaXBTdGF0dXNDb2RlID0ge30pKTtcbmV4cG9ydCBjbGFzcyBHb3NzaXBTdWIgZXh0ZW5kcyBUeXBlZEV2ZW50RW1pdHRlciB7XG4gICAgLyoqXG4gICAgICogVGhlIHNpZ25hdHVyZSBwb2xpY3kgdG8gZm9sbG93IGJ5IGRlZmF1bHRcbiAgICAgKi9cbiAgICBnbG9iYWxTaWduYXR1cmVQb2xpY3k7XG4gICAgbXVsdGljb2RlY3MgPSBbY29uc3RhbnRzLkdvc3NpcHN1YklEdjExLCBjb25zdGFudHMuR29zc2lwc3ViSUR2MTBdO1xuICAgIHB1Ymxpc2hDb25maWc7XG4gICAgZGF0YVRyYW5zZm9ybTtcbiAgICAvLyBTdGF0ZVxuICAgIHBlZXJzID0gbmV3IFNldCgpO1xuICAgIHN0cmVhbXNJbmJvdW5kID0gbmV3IE1hcCgpO1xuICAgIHN0cmVhbXNPdXRib3VuZCA9IG5ldyBNYXAoKTtcbiAgICAvKiogRW5zdXJlcyBvdXRib3VuZCBzdHJlYW1zIGFyZSBjcmVhdGVkIHNlcXVlbnRpYWxseSAqL1xuICAgIG91dGJvdW5kSW5mbGlnaHRRdWV1ZSA9IHB1c2hhYmxlKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICAvKiogRGlyZWN0IHBlZXJzICovXG4gICAgZGlyZWN0ID0gbmV3IFNldCgpO1xuICAgIC8qKiBGbG9vZHN1YiBwZWVycyAqL1xuICAgIGZsb29kc3ViUGVlcnMgPSBuZXcgU2V0KCk7XG4gICAgLyoqIENhY2hlIG9mIHNlZW4gbWVzc2FnZXMgKi9cbiAgICBzZWVuQ2FjaGU7XG4gICAgLyoqXG4gICAgICogTWFwIG9mIHBlZXIgaWQgYW5kIEFjY2VwdFJlcXVlc3RXaGlsZUxpc3RFbnRyeVxuICAgICAqL1xuICAgIGFjY2VwdEZyb21XaGl0ZWxpc3QgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogTWFwIG9mIHRvcGljcyB0byB3aGljaCBwZWVycyBhcmUgc3Vic2NyaWJlZCB0b1xuICAgICAqL1xuICAgIHRvcGljcyA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIG91ciBzdWJzY3JpcHRpb25zXG4gICAgICovXG4gICAgc3Vic2NyaXB0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICAvKipcbiAgICAgKiBNYXAgb2YgdG9waWMgbWVzaGVzXG4gICAgICogdG9waWMgPT4gcGVlciBpZCBzZXRcbiAgICAgKi9cbiAgICBtZXNoID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIE1hcCBvZiB0b3BpY3MgdG8gc2V0IG9mIHBlZXJzLiBUaGVzZSBtZXNoIHBlZXJzIGFyZSB0aGUgb25lcyB0byB3aGljaCB3ZSBhcmUgcHVibGlzaGluZyB3aXRob3V0IGEgdG9waWMgbWVtYmVyc2hpcFxuICAgICAqIHRvcGljID0+IHBlZXIgaWQgc2V0XG4gICAgICovXG4gICAgZmFub3V0ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIE1hcCBvZiBsYXN0IHB1Ymxpc2ggdGltZSBmb3IgZmFub3V0IHRvcGljc1xuICAgICAqIHRvcGljID0+IGxhc3QgcHVibGlzaCB0aW1lXG4gICAgICovXG4gICAgZmFub3V0TGFzdHB1YiA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBNYXAgb2YgcGVuZGluZyBtZXNzYWdlcyB0byBnb3NzaXBcbiAgICAgKiBwZWVyIGlkID0+IGNvbnRyb2wgbWVzc2FnZXNcbiAgICAgKi9cbiAgICBnb3NzaXAgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogTWFwIG9mIGNvbnRyb2wgbWVzc2FnZXNcbiAgICAgKiBwZWVyIGlkID0+IGNvbnRyb2wgbWVzc2FnZVxuICAgICAqL1xuICAgIGNvbnRyb2wgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIElIQVZFcyByZWNlaXZlZCBmcm9tIHBlZXIgaW4gdGhlIGxhc3QgaGVhcnRiZWF0XG4gICAgICovXG4gICAgcGVlcmhhdmUgPSBuZXcgTWFwKCk7XG4gICAgLyoqIE51bWJlciBvZiBtZXNzYWdlcyB3ZSBoYXZlIGFza2VkIGZyb20gcGVlciBpbiB0aGUgbGFzdCBoZWFydGJlYXQgKi9cbiAgICBpYXNrZWQgPSBuZXcgTWFwKCk7XG4gICAgLyoqIFBydW5lIGJhY2tvZmYgbWFwICovXG4gICAgYmFja29mZiA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBDb25uZWN0aW9uIGRpcmVjdGlvbiBjYWNoZSwgbWFya3MgcGVlcnMgd2l0aCBvdXRib3VuZCBjb25uZWN0aW9uc1xuICAgICAqIHBlZXIgaWQgPT4gZGlyZWN0aW9uXG4gICAgICovXG4gICAgb3V0Ym91bmQgPSBuZXcgTWFwKCk7XG4gICAgbXNnSWRGbjtcbiAgICAvKipcbiAgICAgKiBBIGZhc3QgbWVzc2FnZSBpZCBmdW5jdGlvbiB1c2VkIGZvciBpbnRlcm5hbCBtZXNzYWdlIGRlLWR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgZmFzdE1zZ0lkRm47XG4gICAgbXNnSWRUb1N0ckZuO1xuICAgIC8qKiBNYXBzIGZhc3QgbWVzc2FnZS1pZCB0byBjYW5vbmljYWwgbWVzc2FnZS1pZCAqL1xuICAgIGZhc3RNc2dJZENhY2hlO1xuICAgIC8qKlxuICAgICAqIFNob3J0IHRlcm0gY2FjaGUgZm9yIHB1Ymxpc2hlZCBtZXNzYWdlIGlkcy4gVGhpcyBpcyB1c2VkIGZvciBwZW5hbGl6aW5nIHBlZXJzIHNlbmRpbmdcbiAgICAgKiBvdXIgb3duIG1lc3NhZ2VzIGJhY2sgaWYgdGhlIG1lc3NhZ2VzIGFyZSBhbm9ueW1vdXMgb3IgdXNlIGEgcmFuZG9tIGF1dGhvci5cbiAgICAgKi9cbiAgICBwdWJsaXNoZWRNZXNzYWdlSWRzO1xuICAgIC8qKlxuICAgICAqIEEgbWVzc2FnZSBjYWNoZSB0aGF0IGNvbnRhaW5zIHRoZSBtZXNzYWdlcyBmb3IgbGFzdCBmZXcgaGVhcnRiZWF0IHRpY2tzXG4gICAgICovXG4gICAgbWNhY2hlO1xuICAgIC8qKiBQZWVyIHNjb3JlIHRyYWNraW5nICovXG4gICAgc2NvcmU7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHZhbGlkYXRvciBmdW5jdGlvbiBwZXIgdG9waWMuXG4gICAgICogTXVzdCByZXR1cm4gb3IgcmVzb2x2ZSBxdWlja2x5ICg8IDEwMG1zKSB0byBwcmV2ZW50IGNhdXNpbmcgcGVuYWx0aWVzIGZvciBsYXRlIG1lc3NhZ2VzLlxuICAgICAqIElmIHlvdSBuZWVkIHRvIGFwcGx5IHZhbGlkYXRpb24gdGhhdCBtYXkgcmVxdWlyZSBsb25nZXIgdGltZXMgdXNlIGBhc3luY1ZhbGlkYXRpb25gIG9wdGlvbiBhbmQgY2FsbGJhY2sgdGhlXG4gICAgICogdmFsaWRhdGlvbiByZXN1bHQgdGhyb3VnaCBgR29zc2lwc3ViLnJlcG9ydFZhbGlkYXRpb25SZXN1bHRgXG4gICAgICovXG4gICAgdG9waWNWYWxpZGF0b3JzID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIE1ha2UgdGhpcyBwcm90ZWN0ZWQgc28gY2hpbGQgY2xhc3MgbWF5IHdhbnQgdG8gcmVkaXJlY3QgdG8gaXRzIG93biBsb2cuXG4gICAgICovXG4gICAgbG9nO1xuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBoZWFydGJlYXRzIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGltZVxuICAgICAqIFRoaXMgYWxsb3dzIHVzIHRvIGFtb3J0aXplIHNvbWUgcmVzb3VyY2UgY2xlYW51cCAtLSBlZzogYmFja29mZiBjbGVhbnVwXG4gICAgICovXG4gICAgaGVhcnRiZWF0VGlja3MgPSAwO1xuICAgIC8qKlxuICAgICAqIFRyYWNrcyBJSEFWRS9JV0FOVCBwcm9taXNlcyBicm9rZW4gYnkgcGVlcnNcbiAgICAgKi9cbiAgICBnb3NzaXBUcmFjZXI7XG4gICAgY29tcG9uZW50cztcbiAgICBkaXJlY3RQZWVySW5pdGlhbCA9IG51bGw7XG4gICAgc3RhdGljIG11bHRpY29kZWMgPSBjb25zdGFudHMuR29zc2lwc3ViSUR2MTE7XG4gICAgLy8gT3B0aW9uc1xuICAgIG9wdHM7XG4gICAgZGVjb2RlUnBjTGltaXRzO1xuICAgIG1ldHJpY3M7XG4gICAgc3RhdHVzID0geyBjb2RlOiBHb3NzaXBTdGF0dXNDb2RlLnN0b3BwZWQgfTtcbiAgICBtYXhJbmJvdW5kU3RyZWFtcztcbiAgICBtYXhPdXRib3VuZFN0cmVhbXM7XG4gICAgcnVuT25UcmFuc2llbnRDb25uZWN0aW9uO1xuICAgIGFsbG93ZWRUb3BpY3M7XG4gICAgaGVhcnRiZWF0VGltZXIgPSBudWxsO1xuICAgIGNvbnN0cnVjdG9yKGNvbXBvbmVudHMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgZmFsbGJhY2tUb0Zsb29kc3ViOiB0cnVlLFxuICAgICAgICAgICAgZmxvb2RQdWJsaXNoOiB0cnVlLFxuICAgICAgICAgICAgYmF0Y2hQdWJsaXNoOiBmYWxzZSxcbiAgICAgICAgICAgIGRvUFg6IGZhbHNlLFxuICAgICAgICAgICAgZGlyZWN0UGVlcnM6IFtdLFxuICAgICAgICAgICAgRDogY29uc3RhbnRzLkdvc3NpcHN1YkQsXG4gICAgICAgICAgICBEbG86IGNvbnN0YW50cy5Hb3NzaXBzdWJEbG8sXG4gICAgICAgICAgICBEaGk6IGNvbnN0YW50cy5Hb3NzaXBzdWJEaGksXG4gICAgICAgICAgICBEc2NvcmU6IGNvbnN0YW50cy5Hb3NzaXBzdWJEc2NvcmUsXG4gICAgICAgICAgICBEb3V0OiBjb25zdGFudHMuR29zc2lwc3ViRG91dCxcbiAgICAgICAgICAgIERsYXp5OiBjb25zdGFudHMuR29zc2lwc3ViRGxhenksXG4gICAgICAgICAgICBoZWFydGJlYXRJbnRlcnZhbDogY29uc3RhbnRzLkdvc3NpcHN1YkhlYXJ0YmVhdEludGVydmFsLFxuICAgICAgICAgICAgZmFub3V0VFRMOiBjb25zdGFudHMuR29zc2lwc3ViRmFub3V0VFRMLFxuICAgICAgICAgICAgbWNhY2hlTGVuZ3RoOiBjb25zdGFudHMuR29zc2lwc3ViSGlzdG9yeUxlbmd0aCxcbiAgICAgICAgICAgIG1jYWNoZUdvc3NpcDogY29uc3RhbnRzLkdvc3NpcHN1Ykhpc3RvcnlHb3NzaXAsXG4gICAgICAgICAgICBzZWVuVFRMOiBjb25zdGFudHMuR29zc2lwc3ViU2VlblRUTCxcbiAgICAgICAgICAgIGdvc3NpcHN1YklXYW50Rm9sbG93dXBNczogY29uc3RhbnRzLkdvc3NpcHN1YklXYW50Rm9sbG93dXBUaW1lLFxuICAgICAgICAgICAgcHJ1bmVQZWVyczogY29uc3RhbnRzLkdvc3NpcHN1YlBydW5lUGVlcnMsXG4gICAgICAgICAgICBwcnVuZUJhY2tvZmY6IGNvbnN0YW50cy5Hb3NzaXBzdWJQcnVuZUJhY2tvZmYsXG4gICAgICAgICAgICB1bnN1YmNyaWJlQmFja29mZjogY29uc3RhbnRzLkdvc3NpcHN1YlVuc3Vic2NyaWJlQmFja29mZixcbiAgICAgICAgICAgIGdyYWZ0Rmxvb2RUaHJlc2hvbGQ6IGNvbnN0YW50cy5Hb3NzaXBzdWJHcmFmdEZsb29kVGhyZXNob2xkLFxuICAgICAgICAgICAgb3Bwb3J0dW5pc3RpY0dyYWZ0UGVlcnM6IGNvbnN0YW50cy5Hb3NzaXBzdWJPcHBvcnR1bmlzdGljR3JhZnRQZWVycyxcbiAgICAgICAgICAgIG9wcG9ydHVuaXN0aWNHcmFmdFRpY2tzOiBjb25zdGFudHMuR29zc2lwc3ViT3Bwb3J0dW5pc3RpY0dyYWZ0VGlja3MsXG4gICAgICAgICAgICBkaXJlY3RDb25uZWN0VGlja3M6IGNvbnN0YW50cy5Hb3NzaXBzdWJEaXJlY3RDb25uZWN0VGlja3MsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgc2NvcmVQYXJhbXM6IGNyZWF0ZVBlZXJTY29yZVBhcmFtcyhvcHRpb25zLnNjb3JlUGFyYW1zKSxcbiAgICAgICAgICAgIHNjb3JlVGhyZXNob2xkczogY3JlYXRlUGVlclNjb3JlVGhyZXNob2xkcyhvcHRpb25zLnNjb3JlVGhyZXNob2xkcylcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICAgICAgdGhpcy5kZWNvZGVScGNMaW1pdHMgPSBvcHRzLmRlY29kZVJwY0xpbWl0cyA/PyBkZWZhdWx0RGVjb2RlUnBjTGltaXRzO1xuICAgICAgICB0aGlzLmdsb2JhbFNpZ25hdHVyZVBvbGljeSA9IG9wdHMuZ2xvYmFsU2lnbmF0dXJlUG9saWN5ID8/IFN0cmljdFNpZ247XG4gICAgICAgIC8vIEFsc28gd2FudHMgdG8gZ2V0IG5vdGlmaWVkIG9mIHBlZXJzIGNvbm5lY3RlZCB1c2luZyBmbG9vZHN1YlxuICAgICAgICBpZiAob3B0cy5mYWxsYmFja1RvRmxvb2RzdWIpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGljb2RlY3MucHVzaChjb25zdGFudHMuRmxvb2RzdWJJRCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRnJvbSBwdWJzdWJcbiAgICAgICAgdGhpcy5sb2cgPSBjb21wb25lbnRzLmxvZ2dlci5mb3JDb21wb25lbnQob3B0cy5kZWJ1Z05hbWUgPz8gJ2xpYnAycDpnb3NzaXBzdWInKTtcbiAgICAgICAgLy8gR29zc2lwc3ViXG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIHRoaXMuZGlyZWN0ID0gbmV3IFNldChvcHRzLmRpcmVjdFBlZXJzLm1hcCgocCkgPT4gcC5pZC50b1N0cmluZygpKSk7XG4gICAgICAgIHRoaXMuc2VlbkNhY2hlID0gbmV3IFNpbXBsZVRpbWVDYWNoZSh7IHZhbGlkaXR5TXM6IG9wdHMuc2VlblRUTCB9KTtcbiAgICAgICAgdGhpcy5wdWJsaXNoZWRNZXNzYWdlSWRzID0gbmV3IFNpbXBsZVRpbWVDYWNoZSh7IHZhbGlkaXR5TXM6IG9wdHMuc2VlblRUTCB9KTtcbiAgICAgICAgaWYgKG9wdGlvbnMubXNnSWRGbiAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBVc2UgY3VzdG9tIGZ1bmN0aW9uXG4gICAgICAgICAgICB0aGlzLm1zZ0lkRm4gPSBvcHRpb25zLm1zZ0lkRm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZ2xvYmFsU2lnbmF0dXJlUG9saWN5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTdHJpY3RTaWduOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0lkRm4gPSBtc2dJZEZuU3RyaWN0U2lnbjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTdHJpY3ROb1NpZ246XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXNnSWRGbiA9IG1zZ0lkRm5TdHJpY3ROb1NpZ247XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnbG9iYWxTaWduYXR1cmVQb2xpY3k6ICR7dGhpcy5nbG9iYWxTaWduYXR1cmVQb2xpY3l9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmFzdE1zZ0lkRm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5mYXN0TXNnSWRGbiA9IG9wdGlvbnMuZmFzdE1zZ0lkRm47XG4gICAgICAgICAgICB0aGlzLmZhc3RNc2dJZENhY2hlID0gbmV3IFNpbXBsZVRpbWVDYWNoZSh7IHZhbGlkaXR5TXM6IG9wdHMuc2VlblRUTCB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBCeSBkZWZhdWx0LCBnb3NzaXBzdWIgb25seSBwcm92aWRlIGEgYnJvd3NlciBmcmllbmRseSBmdW5jdGlvbiB0byBjb252ZXJ0IFVpbnQ4QXJyYXkgbWVzc2FnZSBpZCB0byBzdHJpbmcuXG4gICAgICAgIHRoaXMubXNnSWRUb1N0ckZuID0gb3B0aW9ucy5tc2dJZFRvU3RyRm4gPz8gbWVzc2FnZUlkVG9TdHJpbmc7XG4gICAgICAgIHRoaXMubWNhY2hlID0gb3B0aW9ucy5tZXNzYWdlQ2FjaGUgPz8gbmV3IE1lc3NhZ2VDYWNoZShvcHRzLm1jYWNoZUdvc3NpcCwgb3B0cy5tY2FjaGVMZW5ndGgsIHRoaXMubXNnSWRUb1N0ckZuKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGF0YVRyYW5zZm9ybSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFUcmFuc2Zvcm0gPSBvcHRpb25zLmRhdGFUcmFuc2Zvcm07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMubWV0cmljc1JlZ2lzdGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1ldHJpY3NUb3BpY1N0clRvTGFiZWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdNdXN0IHNldCBtZXRyaWNzVG9waWNTdHJUb0xhYmVsIHdpdGggbWV0cmljcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaW4gdGhlb3J5LCBlYWNoIHRvcGljIGhhcyBpdHMgb3duIG1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvdyBwYXJhbVxuICAgICAgICAgICAgLy8gaG93ZXZlciBpbiBsb2Rlc3Rhciwgd2UgY29uZmlndXJlIGl0IG1vc3RseSB0aGUgc2FtZSBzbyBqdXN0IHBpY2sgdGhlIG1heCBvZiBwb3NpdGl2ZSBvbmVzXG4gICAgICAgICAgICAvLyAoc29tZSB0b3BpY3MgaGF2ZSBtZXNoTWVzc2FnZURlbGl2ZXJpZXNXaW5kb3cgYXMgMClcbiAgICAgICAgICAgIGNvbnN0IG1heE1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvd01zID0gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhvcHRzLnNjb3JlUGFyYW1zLnRvcGljcykubWFwKCh0b3BpY1BhcmFtKSA9PiB0b3BpY1BhcmFtLm1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvdyksIGNvbnN0YW50cy5ERUZBVUxUX01FVFJJQ19NRVNIX01FU1NBR0VfREVMSVZFUklFU19XSU5ET1dTKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSBnZXRNZXRyaWNzKG9wdGlvbnMubWV0cmljc1JlZ2lzdGVyLCBvcHRpb25zLm1ldHJpY3NUb3BpY1N0clRvTGFiZWwsIHtcbiAgICAgICAgICAgICAgICBnb3NzaXBQcm9taXNlRXhwaXJlU2VjOiB0aGlzLm9wdHMuZ29zc2lwc3ViSVdhbnRGb2xsb3d1cE1zIC8gMTAwMCxcbiAgICAgICAgICAgICAgICBiZWhhdmlvdXJQZW5hbHR5VGhyZXNob2xkOiBvcHRzLnNjb3JlUGFyYW1zLmJlaGF2aW91clBlbmFsdHlUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgbWF4TWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2luZG93U2VjOiBtYXhNZXNoTWVzc2FnZURlbGl2ZXJpZXNXaW5kb3dNcyAvIDEwMDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWV0cmljcy5tY2FjaGVTaXplLmFkZENvbGxlY3QoKCkgPT4geyB0aGlzLm9uU2NyYXBlTWV0cmljcyhtZXRyaWNzKTsgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHRoaXMubXVsdGljb2RlY3MpIHtcbiAgICAgICAgICAgICAgICBtZXRyaWNzLnByb3RvY29sc0VuYWJsZWQuc2V0KHsgcHJvdG9jb2wgfSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1ldHJpY3MgPSBtZXRyaWNzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdvc3NpcFRyYWNlciA9IG5ldyBJV2FudFRyYWNlcih0aGlzLm9wdHMuZ29zc2lwc3ViSVdhbnRGb2xsb3d1cE1zLCB0aGlzLm1zZ0lkVG9TdHJGbiwgdGhpcy5tZXRyaWNzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGxpYnAycFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zY29yZSA9IG5ldyBQZWVyU2NvcmUodGhpcy5vcHRzLnNjb3JlUGFyYW1zLCB0aGlzLm1ldHJpY3MsIHRoaXMuY29tcG9uZW50cy5sb2dnZXIsIHtcbiAgICAgICAgICAgIHNjb3JlQ2FjaGVWYWxpZGl0eU1zOiBvcHRzLmhlYXJ0YmVhdEludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1heEluYm91bmRTdHJlYW1zID0gb3B0aW9ucy5tYXhJbmJvdW5kU3RyZWFtcztcbiAgICAgICAgdGhpcy5tYXhPdXRib3VuZFN0cmVhbXMgPSBvcHRpb25zLm1heE91dGJvdW5kU3RyZWFtcztcbiAgICAgICAgdGhpcy5ydW5PblRyYW5zaWVudENvbm5lY3Rpb24gPSBvcHRpb25zLnJ1bk9uVHJhbnNpZW50Q29ubmVjdGlvbjtcbiAgICAgICAgdGhpcy5hbGxvd2VkVG9waWNzID0gKG9wdHMuYWxsb3dlZFRvcGljcyAhPSBudWxsKSA/IG5ldyBTZXQob3B0cy5hbGxvd2VkVG9waWNzKSA6IG51bGw7XG4gICAgfVxuICAgIGdldFBlZXJzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMucGVlcnMua2V5cygpXS5tYXAoKHN0cikgPT4gcGVlcklkRnJvbVN0cmluZyhzdHIpKTtcbiAgICB9XG4gICAgaXNTdGFydGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMuY29kZSA9PT0gR29zc2lwU3RhdHVzQ29kZS5zdGFydGVkO1xuICAgIH1cbiAgICAvLyBMSUZFQ1lDTEUgTUVUSE9EU1xuICAgIC8qKlxuICAgICAqIE1vdW50cyB0aGUgZ29zc2lwc3ViIHByb3RvY29sIG9udG8gdGhlIGxpYnAycCBub2RlIGFuZCBzZW5kcyBvdXJcbiAgICAgKiBvdXIgc3Vic2NyaXB0aW9ucyB0byBldmVyeSBwZWVyIGNvbm5lY3RlZFxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICAvLyBGcm9tIHB1YnN1YlxuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nKCdzdGFydGluZycpO1xuICAgICAgICB0aGlzLnB1Ymxpc2hDb25maWcgPSBhd2FpdCBnZXRQdWJsaXNoQ29uZmlnRnJvbVBlZXJJZCh0aGlzLmdsb2JhbFNpZ25hdHVyZVBvbGljeSwgdGhpcy5jb21wb25lbnRzLnBlZXJJZCk7XG4gICAgICAgIC8vIENyZWF0ZSB0aGUgb3V0Ym91bmQgaW5mbGlnaHQgcXVldWVcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgb3V0Ym91bmQgc3RyZWFtIGNyZWF0aW9uIGhhcHBlbnMgc2VxdWVudGlhbGx5XG4gICAgICAgIHRoaXMub3V0Ym91bmRJbmZsaWdodFF1ZXVlID0gcHVzaGFibGUoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBwaXBlKHRoaXMub3V0Ym91bmRJbmZsaWdodFF1ZXVlLCBhc3luYyAoc291cmNlKSA9PiB7XG4gICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHsgcGVlcklkLCBjb25uZWN0aW9uIH0gb2Ygc291cmNlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVPdXRib3VuZFN0cmVhbShwZWVySWQsIGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcignb3V0Ym91bmQgaW5mbGlnaHQgcXVldWUgZXJyb3InLCBlKTsgfSk7XG4gICAgICAgIC8vIHNldCBkaXJlY3QgcGVlciBhZGRyZXNzZXMgaW4gdGhlIGFkZHJlc3MgYm9va1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm9wdHMuZGlyZWN0UGVlcnMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBvbmVudHMucGVlclN0b3JlLm1lcmdlKHAuaWQsIHtcbiAgICAgICAgICAgICAgICBtdWx0aWFkZHJzOiBwLmFkZHJzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCByZWdpc3RyYXIgPSB0aGlzLmNvbXBvbmVudHMucmVnaXN0cmFyO1xuICAgICAgICAvLyBJbmNvbWluZyBzdHJlYW1zXG4gICAgICAgIC8vIENhbGxlZCBhZnRlciBhIHBlZXIgZGlhbHMgdXNcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5tdWx0aWNvZGVjcy5tYXAoYXN5bmMgKG11bHRpY29kZWMpID0+IHJlZ2lzdHJhci5oYW5kbGUobXVsdGljb2RlYywgdGhpcy5vbkluY29taW5nU3RyZWFtLmJpbmQodGhpcyksIHtcbiAgICAgICAgICAgIG1heEluYm91bmRTdHJlYW1zOiB0aGlzLm1heEluYm91bmRTdHJlYW1zLFxuICAgICAgICAgICAgbWF4T3V0Ym91bmRTdHJlYW1zOiB0aGlzLm1heE91dGJvdW5kU3RyZWFtcyxcbiAgICAgICAgICAgIHJ1bk9uVHJhbnNpZW50Q29ubmVjdGlvbjogdGhpcy5ydW5PblRyYW5zaWVudENvbm5lY3Rpb25cbiAgICAgICAgfSkpKTtcbiAgICAgICAgLy8gIyBIb3cgZG9lcyBHb3NzaXBzdWIgaW50ZXJhY3Qgd2l0aCBsaWJwMnA/IFJvdWdoIGd1aWRlIGZyb20gTWFyIDIwMjJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gIyMgU2V0dXA6XG4gICAgICAgIC8vIEdvc3NpcHN1YiByZXF1ZXN0cyBsaWJwMnAgdG8gY2FsbGJhY2ssIFRCRFxuICAgICAgICAvL1xuICAgICAgICAvLyBgdGhpcy5saWJwMnAuaGFuZGxlKClgIHJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIGAvbWVzaHN1Yi8xLjEuMGAgYW5kIG90aGVyIEdvc3NpcHN1YiBwcm90b2NvbHNcbiAgICAgICAgLy8gVGhlIGhhbmRsZXIgY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZCBpbiBsaWJwMnAgVXBncmFkZXIucHJvdG9jb2xzIG1hcC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVXBncmFkZXIgcmVjZWl2ZXMgYW4gaW5ib3VuZCBjb25uZWN0aW9uIGZyb20gc29tZSB0cmFuc3BvcnQgYW5kIChgVXBncmFkZXIudXBncmFkZUluYm91bmRgKTpcbiAgICAgICAgLy8gLSBBZGRzIGVuY3J5cHRpb24gKE5PSVNFIGluIG91ciBjYXNlKVxuICAgICAgICAvLyAtIE11bHRpcGxleCBzdHJlYW1cbiAgICAgICAgLy8gLSBDcmVhdGUgYSBtdXhlciBhbmQgcmVnaXN0ZXIgdGhhdCBmb3IgZWFjaCBuZXcgc3RyZWFtIGNhbGwgVXBncmFkZXIucHJvdG9jb2xzIGhhbmRsZXJcbiAgICAgICAgLy9cbiAgICAgICAgLy8gIyMgVG9wb2xvZ3lcbiAgICAgICAgLy8gLSBuZXcgaW5zdGFuY2Ugb2YgVG9wb2xvZ3kgKHVubGlua2VkIHRvIGxpYnAycCkgd2l0aCBoYW5kbGVyc1xuICAgICAgICAvLyAtIHJlZ2lzdGFyLnJlZ2lzdGVyKHRvcG9sb2d5KVxuICAgICAgICAvLyByZWdpc3RlciBwcm90b2NvbCB3aXRoIHRvcG9sb2d5XG4gICAgICAgIC8vIFRvcG9sb2d5IGNhbGxiYWNrcyBjYWxsZWQgb24gY29ubmVjdGlvbiBtYW5hZ2VyIGNoYW5nZXNcbiAgICAgICAgY29uc3QgdG9wb2xvZ3kgPSB7XG4gICAgICAgICAgICBvbkNvbm5lY3Q6IHRoaXMub25QZWVyQ29ubmVjdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICBvbkRpc2Nvbm5lY3Q6IHRoaXMub25QZWVyRGlzY29ubmVjdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICBub3RpZnlPblRyYW5zaWVudDogdGhpcy5ydW5PblRyYW5zaWVudENvbm5lY3Rpb25cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVnaXN0cmFyVG9wb2xvZ3lJZHMgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm11bHRpY29kZWNzLm1hcChhc3luYyAobXVsdGljb2RlYykgPT4gcmVnaXN0cmFyLnJlZ2lzdGVyKG11bHRpY29kZWMsIHRvcG9sb2d5KSkpO1xuICAgICAgICAvLyBTY2hlZHVsZSB0byBzdGFydCBoZWFydGJlYXQgYWZ0ZXIgYEdvc3NpcHN1YkhlYXJ0YmVhdEluaXRpYWxEZWxheWBcbiAgICAgICAgY29uc3QgaGVhcnRiZWF0VGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5ydW5IZWFydGJlYXQsIGNvbnN0YW50cy5Hb3NzaXBzdWJIZWFydGJlYXRJbml0aWFsRGVsYXkpO1xuICAgICAgICAvLyBUaGVuLCBydW4gaGVhcnRiZWF0IGV2ZXJ5IGBoZWFydGJlYXRJbnRlcnZhbGAgb2Zmc2V0IGJ5IGBHb3NzaXBzdWJIZWFydGJlYXRJbml0aWFsRGVsYXlgXG4gICAgICAgIHRoaXMuc3RhdHVzID0ge1xuICAgICAgICAgICAgY29kZTogR29zc2lwU3RhdHVzQ29kZS5zdGFydGVkLFxuICAgICAgICAgICAgcmVnaXN0cmFyVG9wb2xvZ3lJZHMsXG4gICAgICAgICAgICBoZWFydGJlYXRUaW1lb3V0LFxuICAgICAgICAgICAgaGVhcmJlYXRTdGFydE1zOiBEYXRlLm5vdygpICsgY29uc3RhbnRzLkdvc3NpcHN1YkhlYXJ0YmVhdEluaXRpYWxEZWxheVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNjb3JlLnN0YXJ0KCk7XG4gICAgICAgIC8vIGNvbm5lY3QgdG8gZGlyZWN0IHBlZXJzXG4gICAgICAgIHRoaXMuZGlyZWN0UGVlckluaXRpYWwgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20odGhpcy5kaXJlY3QpLm1hcChhc3luYyAoaWQpID0+IHRoaXMuY29ubmVjdChpZCkpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNvbnN0YW50cy5Hb3NzaXBzdWJEaXJlY3RDb25uZWN0SW5pdGlhbERlbGF5KTtcbiAgICAgICAgdGhpcy5sb2coJ3N0YXJ0ZWQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5tb3VudHMgdGhlIGdvc3NpcHN1YiBwcm90b2NvbCBhbmQgc2h1dHMgZG93biBldmVyeSBjb25uZWN0aW9uXG4gICAgICovXG4gICAgYXN5bmMgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5sb2coJ3N0b3BwaW5nJyk7XG4gICAgICAgIC8vIEZyb20gcHVic3ViXG4gICAgICAgIGlmICh0aGlzLnN0YXR1cy5jb2RlICE9PSBHb3NzaXBTdGF0dXNDb2RlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJlZ2lzdHJhclRvcG9sb2d5SWRzIH0gPSB0aGlzLnN0YXR1cztcbiAgICAgICAgdGhpcy5zdGF0dXMgPSB7IGNvZGU6IEdvc3NpcFN0YXR1c0NvZGUuc3RvcHBlZCB9O1xuICAgICAgICAvLyB1bnJlZ2lzdGVyIHByb3RvY29sIGFuZCBoYW5kbGVyc1xuICAgICAgICBjb25zdCByZWdpc3RyYXIgPSB0aGlzLmNvbXBvbmVudHMucmVnaXN0cmFyO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm11bHRpY29kZWNzLm1hcChhc3luYyAobXVsdGljb2RlYykgPT4gcmVnaXN0cmFyLnVuaGFuZGxlKG11bHRpY29kZWMpKSk7XG4gICAgICAgIHJlZ2lzdHJhclRvcG9sb2d5SWRzLmZvckVhY2goKGlkKSA9PiB7IHJlZ2lzdHJhci51bnJlZ2lzdGVyKGlkKTsgfSk7XG4gICAgICAgIHRoaXMub3V0Ym91bmRJbmZsaWdodFF1ZXVlLmVuZCgpO1xuICAgICAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3V0Ym91bmRTdHJlYW0gb2YgdGhpcy5zdHJlYW1zT3V0Ym91bmQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNsb3NlUHJvbWlzZXMucHVzaChvdXRib3VuZFN0cmVhbS5jbG9zZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0cmVhbXNPdXRib3VuZC5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IGluYm91bmRTdHJlYW0gb2YgdGhpcy5zdHJlYW1zSW5ib3VuZC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGluYm91bmRTdHJlYW0uY2xvc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdHJlYW1zSW5ib3VuZC5jbGVhcigpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChjbG9zZVByb21pc2VzKTtcbiAgICAgICAgdGhpcy5wZWVycy5jbGVhcigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgICAgLy8gR29zc2lwc3ViXG4gICAgICAgIGlmICh0aGlzLmhlYXJ0YmVhdFRpbWVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhcnRiZWF0VGltZXIuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjb3JlLnN0b3AoKTtcbiAgICAgICAgdGhpcy5tZXNoLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmFub3V0LmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmFub3V0TGFzdHB1Yi5jbGVhcigpO1xuICAgICAgICB0aGlzLmdvc3NpcC5jbGVhcigpO1xuICAgICAgICB0aGlzLmNvbnRyb2wuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZWVyaGF2ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmlhc2tlZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmJhY2tvZmYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmdvc3NpcFRyYWNlci5jbGVhcigpO1xuICAgICAgICB0aGlzLnNlZW5DYWNoZS5jbGVhcigpO1xuICAgICAgICBpZiAodGhpcy5mYXN0TXNnSWRDYWNoZSAhPSBudWxsKVxuICAgICAgICAgICAgdGhpcy5mYXN0TXNnSWRDYWNoZS5jbGVhcigpO1xuICAgICAgICBpZiAodGhpcy5kaXJlY3RQZWVySW5pdGlhbCAhPSBudWxsKVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGlyZWN0UGVlckluaXRpYWwpO1xuICAgICAgICB0aGlzLmxvZygnc3RvcHBlZCcpO1xuICAgIH1cbiAgICAvKiogRk9SIERFQlVHIE9OTFkgLSBEdW1wIHBlZXIgc3RhdHMgZm9yIGFsbCBwZWVycy4gRGF0YSBpcyBjbG9uZWQsIHNhZmUgdG8gbXV0YXRlICovXG4gICAgZHVtcFBlZXJTY29yZVN0YXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29yZS5kdW1wUGVlclNjb3JlU3RhdHMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT24gYW4gaW5ib3VuZCBzdHJlYW0gb3BlbmVkXG4gICAgICovXG4gICAgb25JbmNvbWluZ1N0cmVhbSh7IHN0cmVhbSwgY29ubmVjdGlvbiB9KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBlZXJJZCA9IGNvbm5lY3Rpb24ucmVtb3RlUGVlcjtcbiAgICAgICAgLy8gYWRkIHBlZXIgdG8gcm91dGVyXG4gICAgICAgIHRoaXMuYWRkUGVlcihwZWVySWQsIGNvbm5lY3Rpb24uZGlyZWN0aW9uLCBjb25uZWN0aW9uLnJlbW90ZUFkZHIpO1xuICAgICAgICAvLyBjcmVhdGUgaW5ib3VuZCBzdHJlYW1cbiAgICAgICAgdGhpcy5jcmVhdGVJbmJvdW5kU3RyZWFtKHBlZXJJZCwgc3RyZWFtKTtcbiAgICAgICAgLy8gYXR0ZW1wdCB0byBjcmVhdGUgb3V0Ym91bmQgc3RyZWFtXG4gICAgICAgIHRoaXMub3V0Ym91bmRJbmZsaWdodFF1ZXVlLnB1c2goeyBwZWVySWQsIGNvbm5lY3Rpb24gfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdHJhciBub3RpZmllcyBhbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIHdpdGggcHVic3ViIHByb3RvY29sXG4gICAgICovXG4gICAgb25QZWVyQ29ubmVjdGVkKHBlZXJJZCwgY29ubmVjdGlvbikge1xuICAgICAgICB0aGlzLm1ldHJpY3M/Lm5ld0Nvbm5lY3Rpb25Db3VudC5pbmMoeyBzdGF0dXM6IGNvbm5lY3Rpb24uc3RhdHVzIH0pO1xuICAgICAgICAvLyBsaWJwMnAgbWF5IGVtaXQgYSBjbG9zZWQgY29ubmVjdGlvbiBhbmQgbmV2ZXIgaXNzdWUgcGVlcjpkaXNjb25uZWN0IGV2ZW50XG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vQ2hhaW5TYWZlL2pzLWxpYnAycC1nb3NzaXBzdWIvaXNzdWVzLzM5OFxuICAgICAgICBpZiAoIXRoaXMuaXNTdGFydGVkKCkgfHwgY29ubmVjdGlvbi5zdGF0dXMgIT09ICdvcGVuJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkUGVlcihwZWVySWQsIGNvbm5lY3Rpb24uZGlyZWN0aW9uLCBjb25uZWN0aW9uLnJlbW90ZUFkZHIpO1xuICAgICAgICB0aGlzLm91dGJvdW5kSW5mbGlnaHRRdWV1ZS5wdXNoKHsgcGVlcklkLCBjb25uZWN0aW9uIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RyYXIgbm90aWZpZXMgYSBjbG9zaW5nIGNvbm5lY3Rpb24gd2l0aCBwdWJzdWIgcHJvdG9jb2xcbiAgICAgKi9cbiAgICBvblBlZXJEaXNjb25uZWN0ZWQocGVlcklkKSB7XG4gICAgICAgIHRoaXMubG9nKCdjb25uZWN0aW9uIGVuZGVkICVwJywgcGVlcklkKTtcbiAgICAgICAgdGhpcy5yZW1vdmVQZWVyKHBlZXJJZCk7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZU91dGJvdW5kU3RyZWFtKHBlZXJJZCwgY29ubmVjdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdGFydGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHBlZXJJZC50b1N0cmluZygpO1xuICAgICAgICBpZiAoIXRoaXMucGVlcnMuaGFzKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gbWFrZSB0aGlzIGJlaGF2aW9yIG1vcmUgcm9idXN0XG4gICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgaXMgZGlmZmVyZW50IHRoYW4gZm9yIGluYm91bmQgc3RyZWFtc1xuICAgICAgICAvLyBJZiBhbiBvdXRib3VuZCBzdHJlYW0gYWxyZWFkeSBleGlzdHMsIGRvbid0IGNyZWF0ZSBhIG5ldyBzdHJlYW1cbiAgICAgICAgaWYgKHRoaXMuc3RyZWFtc091dGJvdW5kLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IE91dGJvdW5kU3RyZWFtKGF3YWl0IGNvbm5lY3Rpb24ubmV3U3RyZWFtKHRoaXMubXVsdGljb2RlY3MsIHtcbiAgICAgICAgICAgICAgICBydW5PblRyYW5zaWVudENvbm5lY3Rpb246IHRoaXMucnVuT25UcmFuc2llbnRDb25uZWN0aW9uXG4gICAgICAgICAgICB9KSwgKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoJ291dGJvdW5kIHBpcGUgZXJyb3InLCBlKTsgfSwgeyBtYXhCdWZmZXJTaXplOiB0aGlzLm9wdHMubWF4T3V0Ym91bmRCdWZmZXJTaXplIH0pO1xuICAgICAgICAgICAgdGhpcy5sb2coJ2NyZWF0ZSBvdXRib3VuZCBzdHJlYW0gJXAnLCBwZWVySWQpO1xuICAgICAgICAgICAgdGhpcy5zdHJlYW1zT3V0Ym91bmQuc2V0KGlkLCBzdHJlYW0pO1xuICAgICAgICAgICAgY29uc3QgcHJvdG9jb2wgPSBzdHJlYW0ucHJvdG9jb2w7XG4gICAgICAgICAgICBpZiAocHJvdG9jb2wgPT09IGNvbnN0YW50cy5GbG9vZHN1YklEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vZHN1YlBlZXJzLmFkZChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1ldHJpY3M/LnBlZXJzUGVyUHJvdG9jb2wuaW5jKHsgcHJvdG9jb2wgfSwgMSk7XG4gICAgICAgICAgICAvLyBJbW1lZGlhdGVseSBzZW5kIG93biBzdWJzY3JpcHRpb25zIHZpYSB0aGUgbmV3bHkgYXR0YWNoZWQgc3RyZWFtXG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coJ3NlbmQgc3Vic2NyaXB0aW9ucyB0bycsIGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRTdWJzY3JpcHRpb25zKGlkLCBBcnJheS5mcm9tKHRoaXMuc3Vic2NyaXB0aW9ucyksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcignY3JlYXRlT3V0Ym91bmRTdHJlYW0gZXJyb3InLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVJbmJvdW5kU3RyZWFtKHBlZXJJZCwgc3RyZWFtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0YXJ0ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gcGVlcklkLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICghdGhpcy5wZWVycy5oYXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBtYWtlIHRoaXMgYmVoYXZpb3IgbW9yZSByb2J1c3RcbiAgICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBkaWZmZXJlbnQgdGhhbiBmb3Igb3V0Ym91bmQgc3RyZWFtc1xuICAgICAgICAvLyBJZiBhIHBlZXIgaW5pdGlhdGVzIGEgbmV3IGluYm91bmQgY29ubmVjdGlvblxuICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCBvbmUgaXMgdGhlIG5ldyBjYW5vbmljYWwgaW5ib3VuZCBzdHJlYW1cbiAgICAgICAgY29uc3QgcHJpb3JJbmJvdW5kU3RyZWFtID0gdGhpcy5zdHJlYW1zSW5ib3VuZC5nZXQoaWQpO1xuICAgICAgICBpZiAocHJpb3JJbmJvdW5kU3RyZWFtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdyZXBsYWNpbmcgZXhpc3RpbmcgaW5ib3VuZCBzdGVhbSAlcycsIGlkKTtcbiAgICAgICAgICAgIHByaW9ySW5ib3VuZFN0cmVhbS5jbG9zZSgpLmNhdGNoKChlcnIpID0+IHsgdGhpcy5sb2cuZXJyb3IoZXJyKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2coJ2NyZWF0ZSBpbmJvdW5kIHN0cmVhbSAlcycsIGlkKTtcbiAgICAgICAgY29uc3QgaW5ib3VuZFN0cmVhbSA9IG5ldyBJbmJvdW5kU3RyZWFtKHN0cmVhbSwgeyBtYXhEYXRhTGVuZ3RoOiB0aGlzLm9wdHMubWF4SW5ib3VuZERhdGFMZW5ndGggfSk7XG4gICAgICAgIHRoaXMuc3RyZWFtc0luYm91bmQuc2V0KGlkLCBpbmJvdW5kU3RyZWFtKTtcbiAgICAgICAgdGhpcy5waXBlUGVlclJlYWRTdHJlYW0ocGVlcklkLCBpbmJvdW5kU3RyZWFtLnNvdXJjZSkuY2F0Y2goKGVycikgPT4geyB0aGlzLmxvZyhlcnIpOyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGEgcGVlciB0byB0aGUgcm91dGVyXG4gICAgICovXG4gICAgYWRkUGVlcihwZWVySWQsIGRpcmVjdGlvbiwgYWRkcikge1xuICAgICAgICBjb25zdCBpZCA9IHBlZXJJZC50b1N0cmluZygpO1xuICAgICAgICBpZiAoIXRoaXMucGVlcnMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5sb2coJ25ldyBwZWVyICVwJywgcGVlcklkKTtcbiAgICAgICAgICAgIHRoaXMucGVlcnMuYWRkKGlkKTtcbiAgICAgICAgICAgIC8vIEFkZCB0byBwZWVyIHNjb3JpbmdcbiAgICAgICAgICAgIHRoaXMuc2NvcmUuYWRkUGVlcihpZCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SVAgPSBtdWx0aWFkZHJUb0lQU3RyKGFkZHIpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJUCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NvcmUuYWRkSVAoaWQsIGN1cnJlbnRJUCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZygnQWRkZWQgcGVlciBoYXMgbm8gSVAgaW4gY3VycmVudCBhZGRyZXNzICVzICVzJywgaWQsIGFkZHIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0cmFjayB0aGUgY29ubmVjdGlvbiBkaXJlY3Rpb24uIERvbid0IGFsbG93IHRvIHVuc2V0IG91dGJvdW5kXG4gICAgICAgICAgICBpZiAoIXRoaXMub3V0Ym91bmQuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0Ym91bmQuc2V0KGlkLCBkaXJlY3Rpb24gPT09ICdvdXRib3VuZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBwZWVyIGZyb20gdGhlIHJvdXRlclxuICAgICAqL1xuICAgIHJlbW92ZVBlZXIocGVlcklkKSB7XG4gICAgICAgIGNvbnN0IGlkID0gcGVlcklkLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICghdGhpcy5wZWVycy5oYXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGVsZXRlIHBlZXJcbiAgICAgICAgdGhpcy5sb2coJ2RlbGV0ZSBwZWVyICVwJywgcGVlcklkKTtcbiAgICAgICAgdGhpcy5wZWVycy5kZWxldGUoaWQpO1xuICAgICAgICBjb25zdCBvdXRib3VuZFN0cmVhbSA9IHRoaXMuc3RyZWFtc091dGJvdW5kLmdldChpZCk7XG4gICAgICAgIGNvbnN0IGluYm91bmRTdHJlYW0gPSB0aGlzLnN0cmVhbXNJbmJvdW5kLmdldChpZCk7XG4gICAgICAgIGlmIChvdXRib3VuZFN0cmVhbSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1ldHJpY3M/LnBlZXJzUGVyUHJvdG9jb2wuaW5jKHsgcHJvdG9jb2w6IG91dGJvdW5kU3RyZWFtLnByb3RvY29sIH0sIC0xKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbG9zZSBzdHJlYW1zXG4gICAgICAgIG91dGJvdW5kU3RyZWFtPy5jbG9zZSgpLmNhdGNoKChlcnIpID0+IHsgdGhpcy5sb2cuZXJyb3IoZXJyKTsgfSk7XG4gICAgICAgIGluYm91bmRTdHJlYW0/LmNsb3NlKCkuY2F0Y2goKGVycikgPT4geyB0aGlzLmxvZy5lcnJvcihlcnIpOyB9KTtcbiAgICAgICAgLy8gcmVtb3ZlIHN0cmVhbXNcbiAgICAgICAgdGhpcy5zdHJlYW1zT3V0Ym91bmQuZGVsZXRlKGlkKTtcbiAgICAgICAgdGhpcy5zdHJlYW1zSW5ib3VuZC5kZWxldGUoaWQpO1xuICAgICAgICAvLyByZW1vdmUgcGVlciBmcm9tIHRvcGljcyBtYXBcbiAgICAgICAgZm9yIChjb25zdCBwZWVycyBvZiB0aGlzLnRvcGljcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgcGVlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgdGhpcyBwZWVyIGZyb20gdGhlIG1lc2hcbiAgICAgICAgZm9yIChjb25zdCBbdG9waWNTdHIsIHBlZXJzXSBvZiB0aGlzLm1lc2gpIHtcbiAgICAgICAgICAgIGlmIChwZWVycy5kZWxldGUoaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy5vblJlbW92ZUZyb21NZXNoKHRvcGljU3RyLCBDaHVyblJlYXNvbi5EYywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgcGVlciBmcm9tIHRoZSBmYW5vdXRcbiAgICAgICAgZm9yIChjb25zdCBwZWVycyBvZiB0aGlzLmZhbm91dC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgcGVlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBmbG9vZHN1YlBlZXJzXG4gICAgICAgIHRoaXMuZmxvb2RzdWJQZWVycy5kZWxldGUoaWQpO1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBnb3NzaXAgbWFwcGluZ1xuICAgICAgICB0aGlzLmdvc3NpcC5kZWxldGUoaWQpO1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBjb250cm9sIG1hcHBpbmdcbiAgICAgICAgdGhpcy5jb250cm9sLmRlbGV0ZShpZCk7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGJhY2tvZmYgbWFwcGluZ1xuICAgICAgICB0aGlzLm91dGJvdW5kLmRlbGV0ZShpZCk7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHBlZXIgc2NvcmluZ1xuICAgICAgICB0aGlzLnNjb3JlLnJlbW92ZVBlZXIoaWQpO1xuICAgICAgICB0aGlzLmFjY2VwdEZyb21XaGl0ZWxpc3QuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgLy8gQVBJIE1FVEhPRFNcbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzLmNvZGUgPT09IEdvc3NpcFN0YXR1c0NvZGUuc3RhcnRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEgdGhlIHBlZXItaWRzIGluIGEgdG9waWMgbWVzaFxuICAgICAqL1xuICAgIGdldE1lc2hQZWVycyh0b3BpYykge1xuICAgICAgICBjb25zdCBwZWVyc0luVG9waWMgPSB0aGlzLm1lc2guZ2V0KHRvcGljKTtcbiAgICAgICAgcmV0dXJuIChwZWVyc0luVG9waWMgIT0gbnVsbCkgPyBBcnJheS5mcm9tKHBlZXJzSW5Ub3BpYykgOiBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IGEgbGlzdCBvZiB0aGUgcGVlci1pZHMgdGhhdCBhcmUgc3Vic2NyaWJlZCB0byBvbmUgdG9waWMuXG4gICAgICovXG4gICAgZ2V0U3Vic2NyaWJlcnModG9waWMpIHtcbiAgICAgICAgY29uc3QgcGVlcnNJblRvcGljID0gdGhpcy50b3BpY3MuZ2V0KHRvcGljKTtcbiAgICAgICAgcmV0dXJuICgocGVlcnNJblRvcGljICE9IG51bGwpID8gQXJyYXkuZnJvbShwZWVyc0luVG9waWMpIDogW10pLm1hcCgoc3RyKSA9PiBwZWVySWRGcm9tU3RyaW5nKHN0cikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgdG9waWNzIHdoaWNoIHRoZSBwZWVyIGlzIHN1YnNjcmliZWQgdG8uXG4gICAgICovXG4gICAgZ2V0VG9waWNzKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnN1YnNjcmlwdGlvbnMpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBSZXZpZXdpbmcgUHVic3ViIEFQSVxuICAgIC8vIE1FU1NBR0UgTUVUSE9EU1xuICAgIC8qKlxuICAgICAqIFJlc3BvbnNpYmxlIGZvciBwcm9jZXNzaW5nIGVhY2ggUlBDIG1lc3NhZ2UgcmVjZWl2ZWQgYnkgb3RoZXIgcGVlcnMuXG4gICAgICovXG4gICAgYXN5bmMgcGlwZVBlZXJSZWFkU3RyZWFtKHBlZXJJZCwgc3RyZWFtKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBwaXBlKHN0cmVhbSwgYXN5bmMgKHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZGF0YSBvZiBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENoZWNrIG1heCBnb3NzaXAgbWVzc2FnZSBzaXplLCBiZWZvcmUgZGVjb2RlUnBjKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJwY0J5dGVzID0gZGF0YS5zdWJhcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgdGhyb3csIGl0IG11c3QgYmUgd3JhcHBlZCBpbiBhIHRyeSB7fSBjYXRjaCB7fSB0byBwcmV2ZW50IGNsb3NpbmcgdGhlIHN0cmVhbS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgc2hvdWxkIHdlIGRvIGlmIHRoZSBlbnRpcmUgUlBDIGlzIGludmFsaWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBycGMgPSBSUEMuZGVjb2RlKHJwY0J5dGVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuZGVjb2RlUnBjTGltaXRzLm1heFN1YnNjcmlwdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiB0aGlzLmRlY29kZVJwY0xpbWl0cy5tYXhNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGloYXZlOiB0aGlzLmRlY29kZVJwY0xpbWl0cy5tYXhJaGF2ZU1lc3NhZ2VJRHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpd2FudDogdGhpcy5kZWNvZGVScGNMaW1pdHMubWF4SXdhbnRNZXNzYWdlSURzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZnQ6IHRoaXMuZGVjb2RlUnBjTGltaXRzLm1heENvbnRyb2xNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lOiB0aGlzLmRlY29kZVJwY0xpbWl0cy5tYXhDb250cm9sTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZSQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyczogdGhpcy5kZWNvZGVScGNMaW1pdHMubWF4UGVlckluZm9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25ScGNSZWN2KHJwYywgcnBjQnl0ZXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHByb2Nlc3NScGMgbWF5IGJlIG92ZXJyaWRkZW4gZW50aXJlbHkgaW4gdW5zYWZlIHdheXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2ltcGxlc3Qvc2FmZXN0IG9wdGlvbiBoZXJlIGlzIHRvIHdyYXAgaW4gYSBmdW5jdGlvbiBhbmQgY2FwdHVyZSBhbGwgZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBwcmV2ZW50IGEgdG9wLWxldmVsIHVuaGFuZGxlZCBleGNlcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvY2Vzc2luZyBvZiBycGMgbWVzc2FnZXMgc2hvdWxkIGhhcHBlbiB3aXRob3V0IGF3YWl0aW5nIGZ1bGwgdmFsaWRhdGlvbi9leGVjdXRpb24gb2YgcHJpb3IgbWVzc2FnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuYXdhaXRScGNIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVSZWNlaXZlZFJwYyhwZWVySWQsIHJwYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy5vblJwY1JlY3ZFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjZWl2ZWRScGMocGVlcklkLCBycGMpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy5vblJwY1JlY3ZFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uUnBjRGF0YUVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25QZWVyUmVhZFN0cmVhbUVycm9yKCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBlZXJSZWFkU3RyZWFtRXJyb3IoZXJyLCBwZWVySWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBlcnJvciB3aGVuIHJlYWQgc3RyZWFtIHBpcGUgdGhyb3dzLCBsZXNzIG9mIHRoZSBmdW5jdGlvbmFsIHVzZSBidXQgbW9yZVxuICAgICAqIHRvIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHRvIHNweSBvbiB0aGUgZXJyb3IgaGFuZGxpbmdcbiAgICAgKiAqL1xuICAgIGhhbmRsZVBlZXJSZWFkU3RyZWFtRXJyb3IoZXJyLCBwZWVySWQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5vblBlZXJEaXNjb25uZWN0ZWQocGVlcklkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBhbiBycGMgcmVxdWVzdCBmcm9tIGEgcGVlclxuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZVJlY2VpdmVkUnBjKGZyb20sIHJwYykge1xuICAgICAgICAvLyBDaGVjayBpZiBwZWVyIGlzIGdyYXlsaXN0ZWQgaW4gd2hpY2ggY2FzZSB3ZSBpZ25vcmUgdGhlIGV2ZW50XG4gICAgICAgIGlmICghdGhpcy5hY2NlcHRGcm9tKGZyb20udG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdyZWNlaXZlZCBtZXNzYWdlIGZyb20gdW5hY2NlcHRhYmxlIHBlZXIgJXAnLCBmcm9tKTtcbiAgICAgICAgICAgIHRoaXMubWV0cmljcz8ucnBjUmVjdk5vdEFjY2VwdGVkLmluYygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAocnBjLnN1YnNjcmlwdGlvbnMgIT0gbnVsbCkgPyBycGMuc3Vic2NyaXB0aW9ucy5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IChycGMubWVzc2FnZXMgIT0gbnVsbCkgPyBycGMubWVzc2FnZXMubGVuZ3RoIDogMDtcbiAgICAgICAgbGV0IGloYXZlID0gMDtcbiAgICAgICAgbGV0IGl3YW50ID0gMDtcbiAgICAgICAgbGV0IGdyYWZ0ID0gMDtcbiAgICAgICAgbGV0IHBydW5lID0gMDtcbiAgICAgICAgaWYgKHJwYy5jb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChycGMuY29udHJvbC5paGF2ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIGloYXZlID0gcnBjLmNvbnRyb2wuaWhhdmUubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHJwYy5jb250cm9sLml3YW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgaXdhbnQgPSBycGMuY29udHJvbC5pd2FudC5sZW5ndGg7XG4gICAgICAgICAgICBpZiAocnBjLmNvbnRyb2wuZ3JhZnQgIT0gbnVsbClcbiAgICAgICAgICAgICAgICBncmFmdCA9IHJwYy5jb250cm9sLmdyYWZ0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChycGMuY29udHJvbC5wcnVuZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHBydW5lID0gcnBjLmNvbnRyb2wucHJ1bmUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nKGBycGMuZnJvbSAke2Zyb20udG9TdHJpbmcoKX0gc3Vic2NyaXB0aW9ucyAke3N1YnNjcmlwdGlvbnN9IG1lc3NhZ2VzICR7bWVzc2FnZXN9IGloYXZlICR7aWhhdmV9IGl3YW50ICR7aXdhbnR9IGdyYWZ0ICR7Z3JhZnR9IHBydW5lICR7cHJ1bmV9YCk7XG4gICAgICAgIC8vIEhhbmRsZSByZWNlaXZlZCBzdWJzY3JpcHRpb25zXG4gICAgICAgIGlmICgocnBjLnN1YnNjcmlwdGlvbnMgIT0gbnVsbCkgJiYgcnBjLnN1YnNjcmlwdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHBlZXIgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcnBjLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViT3B0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9waWMgPSBzdWJPcHQudG9waWM7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gc3ViT3B0LnN1YnNjcmliZSA9PT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9waWMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuYWxsb3dlZFRvcGljcyAhPSBudWxsKSAmJiAhdGhpcy5hbGxvd2VkVG9waWNzLmhhcyh0b3BpYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhbGxvd2VkOiBzdWJzY3JpcHRpb24gZGF0YS1zdHJ1Y3R1cmVzIGFyZSBub3QgYm91bmRlZCBieSB0b3BpYyBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIGFwcGx5IGJlaGF2aW91ciBwZW5hbHRpZXM/XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWNlaXZlZFN1YnNjcmlwdGlvbihmcm9tLCB0b3BpYywgc3Vic2NyaWJlKTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKHsgdG9waWMsIHN1YnNjcmliZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2FmZURpc3BhdGNoRXZlbnQoJ3N1YnNjcmlwdGlvbi1jaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IHBlZXJJZDogZnJvbSwgc3Vic2NyaXB0aW9ucyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBIYW5kbGUgbWVzc2FnZXNcbiAgICAgICAgLy8gVE9ETzogKHVwIHRvIGxpbWl0KVxuICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgcnBjLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMuYWxsb3dlZFRvcGljcyAhPSBudWxsKSAmJiAhdGhpcy5hbGxvd2VkVG9waWNzLmhhcyhtZXNzYWdlLnRvcGljKSkge1xuICAgICAgICAgICAgICAgIC8vIE5vdCBhbGxvd2VkOiBtZXNzYWdlIGNhY2hlIGRhdGEtc3RydWN0dXJlcyBhcmUgbm90IGJvdW5kZWQgYnkgdG9waWMgY291bnRcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgYXBwbHkgYmVoYXZpb3VyIHBlbmFsdGllcz9cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVJlY2VpdmVkTWVzc2FnZVByb21pc2UgPSB0aGlzLmhhbmRsZVJlY2VpdmVkTWVzc2FnZShmcm9tLCBtZXNzYWdlKVxuICAgICAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciB0aHJvdywgYnV0IGhhbmRsZSBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25Nc2dSZWN2RXJyb3IobWVzc2FnZS50b3BpYyk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5hd2FpdFJwY01lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlUmVjZWl2ZWRNZXNzYWdlUHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBIYW5kbGUgY29udHJvbCBtZXNzYWdlc1xuICAgICAgICBpZiAocnBjLmNvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb250cm9sTWVzc2FnZShmcm9tLnRvU3RyaW5nKCksIHJwYy5jb250cm9sKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGEgc3Vic2NyaXB0aW9uIGNoYW5nZSBmcm9tIGEgcGVlclxuICAgICAqL1xuICAgIGhhbmRsZVJlY2VpdmVkU3Vic2NyaXB0aW9uKGZyb20sIHRvcGljLCBzdWJzY3JpYmUpIHtcbiAgICAgICAgdGhpcy5sb2coJ3N1YnNjcmlwdGlvbiB1cGRhdGUgZnJvbSAlcCB0b3BpYyAlcycsIGZyb20sIHRvcGljKTtcbiAgICAgICAgbGV0IHRvcGljU2V0ID0gdGhpcy50b3BpY3MuZ2V0KHRvcGljKTtcbiAgICAgICAgaWYgKHRvcGljU2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRvcGljU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdGhpcy50b3BpY3Muc2V0KHRvcGljLCB0b3BpY1NldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHBlZXIgdG8gbmV3IHRvcGljXG4gICAgICAgICAgICB0b3BpY1NldC5hZGQoZnJvbS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVuc3Vic2NyaWJlIGZyb20gZXhpc3RpbmcgdG9waWNcbiAgICAgICAgICAgIHRvcGljU2V0LmRlbGV0ZShmcm9tLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE86IHJ1c3QtbGlicDJwIGhhcyBBIExPVCBtb3JlIGxvZ2ljIGhlcmVcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBhIG5ld2x5IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBhbiBSUEMuXG4gICAgICogTWF5IGZvcndhcmQgdG8gYWxsIHBlZXJzIGluIHRoZSBtZXNoLlxuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZVJlY2VpdmVkTWVzc2FnZShmcm9tLCBycGNNc2cpIHtcbiAgICAgICAgdGhpcy5tZXRyaWNzPy5vbk1zZ1JlY3ZQcmVWYWxpZGF0aW9uKHJwY01zZy50b3BpYyk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlUmVjZWl2ZWRNZXNzYWdlKGZyb20sIHJwY01zZyk7XG4gICAgICAgIHRoaXMubWV0cmljcz8ub25QcmV2YWxpZGF0aW9uUmVzdWx0KHJwY01zZy50b3BpYywgdmFsaWRhdGlvblJlc3VsdC5jb2RlKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbkNvZGUgPSB2YWxpZGF0aW9uUmVzdWx0LmNvZGU7XG4gICAgICAgIHN3aXRjaCAodmFsaWRhdGlvbkNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgTWVzc2FnZVN0YXR1cy5kdXBsaWNhdGU6XG4gICAgICAgICAgICAgICAgLy8gUmVwb3J0IHRoZSBkdXBsaWNhdGVcbiAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLmR1cGxpY2F0ZU1lc3NhZ2UoZnJvbS50b1N0cmluZygpLCB2YWxpZGF0aW9uUmVzdWx0Lm1zZ0lkU3RyLCBycGNNc2cudG9waWMpO1xuICAgICAgICAgICAgICAgIC8vIGR1ZSB0byB0aGUgY29sbGlzaW9uIG9mIGZhc3RNc2dJZEZuLCAyIGRpZmZlcmVudCBtZXNzYWdlcyBtYXkgZW5kIHVwIHRoZSBzYW1lIGZhc3RNc2dJZFxuICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gYWxzbyBtYXJrIHRoZSBkdXBsaWNhdGUgbWVzc2FnZSBhcyBkZWxpdmVyZWQgb3IgdGhlIHByb21pc2UgaXMgbm90IHJlc29sdmVkXG4gICAgICAgICAgICAgICAgLy8gYW5kIHBlZXIgZ2V0cyBwZW5hbGl6ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vQ2hhaW5TYWZlL2pzLWxpYnAycC1nb3NzaXBzdWIvcHVsbC8zODVcbiAgICAgICAgICAgICAgICB0aGlzLmdvc3NpcFRyYWNlci5kZWxpdmVyTWVzc2FnZSh2YWxpZGF0aW9uUmVzdWx0Lm1zZ0lkU3RyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1jYWNoZS5vYnNlcnZlRHVwbGljYXRlKHZhbGlkYXRpb25SZXN1bHQubXNnSWRTdHIsIGZyb20udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBNZXNzYWdlU3RhdHVzLmludmFsaWQ6XG4gICAgICAgICAgICAgICAgLy8gaW52YWxpZCBtZXNzYWdlcyByZWNlaXZlZFxuICAgICAgICAgICAgICAgIC8vIG1ldHJpY3MucmVnaXN0ZXJfaW52YWxpZF9tZXNzYWdlKCZyYXdfbWVzc2FnZS50b3BpYylcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHBlZXJfc2NvcmUgYWJvdXQgcmVqZWN0XG4gICAgICAgICAgICAgICAgLy8gUmVqZWN0IHRoZSBvcmlnaW5hbCBzb3VyY2UsIGFuZCBhbnkgZHVwbGljYXRlcyB3ZSd2ZSBzZWVuIGZyb20gb3RoZXIgcGVlcnMuXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQubXNnSWRTdHIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZFN0ciA9IHZhbGlkYXRpb25SZXN1bHQubXNnSWRTdHI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NvcmUucmVqZWN0TWVzc2FnZShmcm9tLnRvU3RyaW5nKCksIG1zZ0lkU3RyLCBycGNNc2cudG9waWMsIHZhbGlkYXRpb25SZXN1bHQucmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb3NzaXBUcmFjZXIucmVqZWN0TWVzc2FnZShtc2dJZFN0ciwgdmFsaWRhdGlvblJlc3VsdC5yZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY29yZS5yZWplY3RJbnZhbGlkTWVzc2FnZShmcm9tLnRvU3RyaW5nKCksIHJwY01zZy50b3BpYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25Nc2dSZWN2SW52YWxpZChycGNNc2cudG9waWMsIHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgTWVzc2FnZVN0YXR1cy52YWxpZDpcbiAgICAgICAgICAgICAgICAvLyBUZWxscyBzY29yZSB0aGF0IG1lc3NhZ2UgYXJyaXZlZCAoYnV0IGlzIG1heWJlIG5vdCBmdWxseSB2YWxpZGF0ZWQgeWV0KS5cbiAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgbWVzc2FnZSBhcyBkZWxpdmVyZWQgZm9yIGdvc3NpcCBwcm9taXNlcy5cbiAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLnZhbGlkYXRlTWVzc2FnZSh2YWxpZGF0aW9uUmVzdWx0Lm1lc3NhZ2VJZC5tc2dJZFN0cik7XG4gICAgICAgICAgICAgICAgdGhpcy5nb3NzaXBUcmFjZXIuZGVsaXZlck1lc3NhZ2UodmFsaWRhdGlvblJlc3VsdC5tZXNzYWdlSWQubXNnSWRTdHIpO1xuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbWVzc2FnZSB0byBvdXIgbWVtY2FjaGVcbiAgICAgICAgICAgICAgICAvLyBpZiBubyB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLCBtYXJrIHRoZSBtZXNzYWdlIGFzIHZhbGlkYXRlZFxuICAgICAgICAgICAgICAgIHRoaXMubWNhY2hlLnB1dCh2YWxpZGF0aW9uUmVzdWx0Lm1lc3NhZ2VJZCwgcnBjTXNnLCAhdGhpcy5vcHRzLmFzeW5jVmFsaWRhdGlvbik7XG4gICAgICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIG1lc3NhZ2UgdG8gdGhlIHVzZXIgaWYgd2UgYXJlIHN1YnNjcmliZWQgdG8gdGhlIHRvcGljXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucy5oYXMocnBjTXNnLnRvcGljKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Zyb21TZWxmID0gdGhpcy5jb21wb25lbnRzLnBlZXJJZC5lcXVhbHMoZnJvbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNGcm9tU2VsZiB8fCB0aGlzLm9wdHMuZW1pdFNlbGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdnb3NzaXBzdWI6bWVzc2FnZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRpb25Tb3VyY2U6IGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ0lkOiB2YWxpZGF0aW9uUmVzdWx0Lm1lc3NhZ2VJZC5tc2dJZFN0cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnOiB2YWxpZGF0aW9uUmVzdWx0Lm1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEFkZCBvcHRpb24gdG8gc3dpdGNoIGJldHdlZW4gZW1pdCBwZXIgdG9waWMgb3IgYWxsIG1lc3NhZ2VzIGluIG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ21lc3NhZ2UnLCB7IGRldGFpbDogdmFsaWRhdGlvblJlc3VsdC5tc2cgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZvcndhcmQgdGhlIG1lc3NhZ2UgdG8gbWVzaCBwZWVycywgaWYgbm8gdmFsaWRhdGlvbiBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8vIElmIGFzeW5jVmFsaWRhdGlvbiBpcyBPTiwgZXhwZWN0IHRoZSBhcHAgbGF5ZXIgdG8gY2FsbCByZXBvcnRNZXNzYWdlVmFsaWRhdGlvblJlc3VsdCgpLCB0aGVuIGZvcndhcmRcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0cy5hc3luY1ZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogaW4gcnVzdC1saWJwMnBcbiAgICAgICAgICAgICAgICAgICAgLy8gLmZvcndhcmRfbXNnKCZtc2dfaWQsIHJhd19tZXNzYWdlLCBTb21lKHByb3BhZ2F0aW9uX3NvdXJjZSkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yd2FyZE1lc3NhZ2UodmFsaWRhdGlvblJlc3VsdC5tZXNzYWdlSWQubXNnSWRTdHIsIHJwY01zZywgZnJvbS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWxpZGF0aW9uIHJlc3VsdDogJHt2YWxpZGF0aW9uQ29kZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGEgbmV3bHkgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIGFuIFJQQy5cbiAgICAgKiBNYXkgZm9yd2FyZCB0byBhbGwgcGVlcnMgaW4gdGhlIG1lc2guXG4gICAgICovXG4gICAgYXN5bmMgdmFsaWRhdGVSZWNlaXZlZE1lc3NhZ2UocHJvcGFnYXRpb25Tb3VyY2UsIHJwY01zZykge1xuICAgICAgICAvLyBGYXN0IG1lc3NhZ2UgSUQgc3R1ZmZcbiAgICAgICAgY29uc3QgZmFzdE1zZ0lkU3RyID0gdGhpcy5mYXN0TXNnSWRGbj8uKHJwY01zZyk7XG4gICAgICAgIGNvbnN0IG1zZ0lkQ2FjaGVkID0gZmFzdE1zZ0lkU3RyICE9PSB1bmRlZmluZWQgPyB0aGlzLmZhc3RNc2dJZENhY2hlPy5nZXQoZmFzdE1zZ0lkU3RyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG1zZ0lkQ2FjaGVkICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWVzc2FnZSBoYXMgYmVlbiBzZWVuIHByZXZpb3VzbHkuIElnbm9yZSBpdFxuICAgICAgICAgICAgcmV0dXJuIHsgY29kZTogTWVzc2FnZVN0YXR1cy5kdXBsaWNhdGUsIG1zZ0lkU3RyOiBtc2dJZENhY2hlZCB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFBlcmZvcm0gYmFzaWMgdmFsaWRhdGlvbiBvbiBtZXNzYWdlIGFuZCBjb252ZXJ0IHRvIFJhd0dvc3NpcHN1Yk1lc3NhZ2UgZm9yIGZhc3RNc2dJZEZuKClcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlVG9SYXdNZXNzYWdlKHRoaXMuZ2xvYmFsU2lnbmF0dXJlUG9saWN5LCBycGNNc2cpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGNvZGU6IE1lc3NhZ2VTdGF0dXMuaW52YWxpZCwgcmVhc29uOiBSZWplY3RSZWFzb24uRXJyb3IsIGVycm9yOiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXNnID0gdmFsaWRhdGlvblJlc3VsdC5tZXNzYWdlO1xuICAgICAgICAvLyBUcnkgYW5kIHBlcmZvcm0gdGhlIGRhdGEgdHJhbnNmb3JtIHRvIHRoZSBtZXNzYWdlLiBJZiBpdCBmYWlscywgY29uc2lkZXIgaXQgaW52YWxpZC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFUcmFuc2Zvcm0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG1zZy5kYXRhID0gdGhpcy5kYXRhVHJhbnNmb3JtLmluYm91bmRUcmFuc2Zvcm0ocnBjTXNnLnRvcGljLCBtc2cuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdJbnZhbGlkIG1lc3NhZ2UsIHRyYW5zZm9ybSBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvZGU6IE1lc3NhZ2VTdGF0dXMuaW52YWxpZCwgcmVhc29uOiBSZWplY3RSZWFzb24uRXJyb3IsIGVycm9yOiBWYWxpZGF0ZUVycm9yLlRyYW5zZm9ybUZhaWxlZCB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE86IENoZWNrIGlmIG1lc3NhZ2UgaXMgZnJvbSBhIGJsYWNrbGlzdGVkIHNvdXJjZSBvciBwcm9wYWdhdGlvbiBvcmlnaW5cbiAgICAgICAgLy8gLSBSZWplY3QgYW55IG1lc3NhZ2UgZnJvbSBhIGJsYWNrbGlzdGVkIHBlZXJcbiAgICAgICAgLy8gLSBBbHNvIHJlamVjdCBhbnkgbWVzc2FnZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSBhIGJsYWNrbGlzdGVkIHBlZXJcbiAgICAgICAgLy8gLSByZWplY3QgbWVzc2FnZXMgY2xhaW1pbmcgdG8gYmUgZnJvbSBvdXJzZWx2ZXMgYnV0IG5vdCBsb2NhbGx5IHB1Ymxpc2hlZFxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG1lc3NhZ2UgaWQgb24gdGhlIHRyYW5zZm9ybWVkIGRhdGEuXG4gICAgICAgIGNvbnN0IG1zZ0lkID0gYXdhaXQgdGhpcy5tc2dJZEZuKG1zZyk7XG4gICAgICAgIGNvbnN0IG1zZ0lkU3RyID0gdGhpcy5tc2dJZFRvU3RyRm4obXNnSWQpO1xuICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSB7IG1zZ0lkLCBtc2dJZFN0ciB9O1xuICAgICAgICAvLyBBZGQgdGhlIG1lc3NhZ2UgdG8gdGhlIGR1cGxpY2F0ZSBjYWNoZXNcbiAgICAgICAgaWYgKGZhc3RNc2dJZFN0ciAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmZhc3RNc2dJZENhY2hlICE9IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xsaXNpb24gPSB0aGlzLmZhc3RNc2dJZENhY2hlLnB1dChmYXN0TXNnSWRTdHIsIG1zZ0lkU3RyKTtcbiAgICAgICAgICAgIGlmIChjb2xsaXNpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3M/LmZhc3RNc2dJZENhY2hlQ29sbGlzaW9uLmluYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlZW5DYWNoZS5oYXMobXNnSWRTdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBjb2RlOiBNZXNzYWdlU3RhdHVzLmR1cGxpY2F0ZSwgbXNnSWRTdHIgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VlbkNhY2hlLnB1dChtc2dJZFN0cik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gKE9wdGlvbmFsKSBQcm92aWRlIGN1c3RvbSB2YWxpZGF0aW9uIGhlcmUgd2l0aCBkeW5hbWljIHZhbGlkYXRvcnMgcGVyIHRvcGljXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgY3VzdG9tIHRvcGljVmFsaWRhdG9yKCkgbXVzdCByZXNvbHZlIGZhc3QgKDwgMTAwbXMpIHRvIGFsbG93IHNjb3Jlc1xuICAgICAgICAvLyB0byBub3QgcGVuYWxpemUgcGVlcnMgZm9yIGxvbmcgdmFsaWRhdGlvbiB0aW1lcy5cbiAgICAgICAgY29uc3QgdG9waWNWYWxpZGF0b3IgPSB0aGlzLnRvcGljVmFsaWRhdG9ycy5nZXQocnBjTXNnLnRvcGljKTtcbiAgICAgICAgaWYgKHRvcGljVmFsaWRhdG9yICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBhY2NlcHRhbmNlO1xuICAgICAgICAgICAgLy8gVXNlIHRyeSB7fSBjYXRjaCB7fSBpbiBjYXNlIHRvcGljVmFsaWRhdG9yKCkgaXMgc3luY2hyb25vdXNcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYWNjZXB0YW5jZSA9IGF3YWl0IHRvcGljVmFsaWRhdG9yKHByb3BhZ2F0aW9uU291cmNlLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJDb2RlID0gZS5jb2RlO1xuICAgICAgICAgICAgICAgIGlmIChlcnJDb2RlID09PSBjb25zdGFudHMuRVJSX1RPUElDX1ZBTElEQVRPUl9JR05PUkUpXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdGFuY2UgPSBUb3BpY1ZhbGlkYXRvclJlc3VsdC5JZ25vcmU7XG4gICAgICAgICAgICAgICAgaWYgKGVyckNvZGUgPT09IGNvbnN0YW50cy5FUlJfVE9QSUNfVkFMSURBVE9SX1JFSkVDVClcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0YW5jZSA9IFRvcGljVmFsaWRhdG9yUmVzdWx0LlJlamVjdDtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdGFuY2UgPSBUb3BpY1ZhbGlkYXRvclJlc3VsdC5JZ25vcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjZXB0YW5jZSAhPT0gVG9waWNWYWxpZGF0b3JSZXN1bHQuQWNjZXB0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY29kZTogTWVzc2FnZVN0YXR1cy5pbnZhbGlkLCByZWFzb246IHJlamVjdFJlYXNvbkZyb21BY2NlcHRhbmNlKGFjY2VwdGFuY2UpLCBtc2dJZFN0ciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGNvZGU6IE1lc3NhZ2VTdGF0dXMudmFsaWQsIG1lc3NhZ2VJZCwgbXNnIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBzY29yZSBvZiBhIHBlZXIuXG4gICAgICovXG4gICAgZ2V0U2NvcmUocGVlcklkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3JlLnNjb3JlKHBlZXJJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgYW4gcnBjIG9iamVjdCB0byBhIHBlZXIgd2l0aCBzdWJzY3JpcHRpb25zXG4gICAgICovXG4gICAgc2VuZFN1YnNjcmlwdGlvbnModG9QZWVyLCB0b3BpY3MsIHN1YnNjcmliZSkge1xuICAgICAgICB0aGlzLnNlbmRScGModG9QZWVyLCB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zOiB0b3BpY3MubWFwKCh0b3BpYykgPT4gKHsgdG9waWMsIHN1YnNjcmliZSB9KSksXG4gICAgICAgICAgICBtZXNzYWdlczogW11cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYW4gcnBjIGNvbnRyb2wgbWVzc2FnZSBmcm9tIGEgcGVlclxuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZUNvbnRyb2xNZXNzYWdlKGlkLCBjb250cm9sTXNnKSB7XG4gICAgICAgIGlmIChjb250cm9sTXNnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpd2FudCA9IChjb250cm9sTXNnLmloYXZlICE9IG51bGwpID8gdGhpcy5oYW5kbGVJSGF2ZShpZCwgY29udHJvbE1zZy5paGF2ZSkgOiBbXTtcbiAgICAgICAgY29uc3QgaWhhdmUgPSAoY29udHJvbE1zZy5pd2FudCAhPSBudWxsKSA/IHRoaXMuaGFuZGxlSVdhbnQoaWQsIGNvbnRyb2xNc2cuaXdhbnQpIDogW107XG4gICAgICAgIGNvbnN0IHBydW5lID0gKGNvbnRyb2xNc2cuZ3JhZnQgIT0gbnVsbCkgPyBhd2FpdCB0aGlzLmhhbmRsZUdyYWZ0KGlkLCBjb250cm9sTXNnLmdyYWZ0KSA6IFtdO1xuICAgICAgICAoY29udHJvbE1zZy5wcnVuZSAhPSBudWxsKSAmJiAoYXdhaXQgdGhpcy5oYW5kbGVQcnVuZShpZCwgY29udHJvbE1zZy5wcnVuZSkpO1xuICAgICAgICBpZiAoKGl3YW50Lmxlbmd0aCA9PT0gMCkgJiYgKGloYXZlLmxlbmd0aCA9PT0gMCkgJiYgKHBydW5lLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZW50ID0gdGhpcy5zZW5kUnBjKGlkLCBjcmVhdGVHb3NzaXBScGMoaWhhdmUsIHsgaXdhbnQsIHBydW5lIH0pKTtcbiAgICAgICAgY29uc3QgaXdhbnRNZXNzYWdlSWRzID0gaXdhbnRbMF0/Lm1lc3NhZ2VJRHM7XG4gICAgICAgIGlmIChpd2FudE1lc3NhZ2VJZHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHNlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvc3NpcFRyYWNlci5hZGRQcm9taXNlKGlkLCBpd2FudE1lc3NhZ2VJZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy5pd2FudFByb21pc2VVbnRyYWNrZWQuaW5jKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gYWNjZXB0IGEgbWVzc2FnZSBmcm9tIGEgcGVlclxuICAgICAqL1xuICAgIGFjY2VwdEZyb20oaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0LmhhcyhpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5hY2NlcHRGcm9tV2hpdGVsaXN0LmdldChpZCk7XG4gICAgICAgIGlmICgoZW50cnkgIT0gbnVsbCkgJiYgZW50cnkubWVzc2FnZXNBY2NlcHRlZCA8IEFDQ0VQVF9GUk9NX1dISVRFTElTVF9NQVhfTUVTU0FHRVMgJiYgZW50cnkuYWNjZXB0VW50aWwgPj0gbm93KSB7XG4gICAgICAgICAgICBlbnRyeS5tZXNzYWdlc0FjY2VwdGVkICs9IDE7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY29yZSA9IHRoaXMuc2NvcmUuc2NvcmUoaWQpO1xuICAgICAgICBpZiAoc2NvcmUgPj0gQUNDRVBUX0ZST01fV0hJVEVMSVNUX1RIUkVTSE9MRF9TQ09SRSkge1xuICAgICAgICAgICAgLy8gcGVlciBpcyB1bmxpa2VseSB0byBiZSBhYmxlIHRvIGRyb3AgaXRzIHNjb3JlIHRvIGBncmF5bGlzdFRocmVzaG9sZGBcbiAgICAgICAgICAgIC8vIGFmdGVyIDEyOCBtZXNzYWdlcyBvciAxc1xuICAgICAgICAgICAgdGhpcy5hY2NlcHRGcm9tV2hpdGVsaXN0LnNldChpZCwge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzQWNjZXB0ZWQ6IDAsXG4gICAgICAgICAgICAgICAgYWNjZXB0VW50aWw6IG5vdyArIEFDQ0VQVF9GUk9NX1dISVRFTElTVF9EVVJBVElPTl9NU1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjY2VwdEZyb21XaGl0ZWxpc3QuZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NvcmUgPj0gdGhpcy5vcHRzLnNjb3JlVGhyZXNob2xkcy5ncmF5bGlzdFRocmVzaG9sZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBJSEFWRSBtZXNzYWdlc1xuICAgICAqL1xuICAgIGhhbmRsZUlIYXZlKGlkLCBpaGF2ZSkge1xuICAgICAgICBpZiAoaWhhdmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgaWdub3JlIElIQVZFIGdvc3NpcCBmcm9tIGFueSBwZWVyIHdob3NlIHNjb3JlIGlzIGJlbG93IHRoZSBnb3NzaXBzIHRocmVzaG9sZFxuICAgICAgICBjb25zdCBzY29yZSA9IHRoaXMuc2NvcmUuc2NvcmUoaWQpO1xuICAgICAgICBpZiAoc2NvcmUgPCB0aGlzLm9wdHMuc2NvcmVUaHJlc2hvbGRzLmdvc3NpcFRocmVzaG9sZCkge1xuICAgICAgICAgICAgdGhpcy5sb2coJ0lIQVZFOiBpZ25vcmluZyBwZWVyICVzIHdpdGggc2NvcmUgYmVsb3cgdGhyZXNob2xkIFsgc2NvcmUgPSAlZCBdJywgaWQsIHNjb3JlKTtcbiAgICAgICAgICAgIHRoaXMubWV0cmljcz8uaWhhdmVSY3ZJZ25vcmVkLmluYyh7IHJlYXNvbjogSUhhdmVJZ25vcmVSZWFzb24uTG93U2NvcmUgfSk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gSUhBVkUgZmxvb2QgcHJvdGVjdGlvblxuICAgICAgICBjb25zdCBwZWVyaGF2ZSA9ICh0aGlzLnBlZXJoYXZlLmdldChpZCkgPz8gMCkgKyAxO1xuICAgICAgICB0aGlzLnBlZXJoYXZlLnNldChpZCwgcGVlcmhhdmUpO1xuICAgICAgICBpZiAocGVlcmhhdmUgPiBjb25zdGFudHMuR29zc2lwc3ViTWF4SUhhdmVNZXNzYWdlcykge1xuICAgICAgICAgICAgdGhpcy5sb2coJ0lIQVZFOiBwZWVyICVzIGhhcyBhZHZlcnRpc2VkIHRvbyBtYW55IHRpbWVzICglZCkgd2l0aGluIHRoaXMgaGVhcnRiZWF0IGludGVydmFsOyBpZ25vcmluZycsIGlkLCBwZWVyaGF2ZSk7XG4gICAgICAgICAgICB0aGlzLm1ldHJpY3M/LmloYXZlUmN2SWdub3JlZC5pbmMoeyByZWFzb246IElIYXZlSWdub3JlUmVhc29uLk1heEloYXZlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlhc2tlZCA9IHRoaXMuaWFza2VkLmdldChpZCkgPz8gMDtcbiAgICAgICAgaWYgKGlhc2tlZCA+PSBjb25zdGFudHMuR29zc2lwc3ViTWF4SUhhdmVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdJSEFWRTogcGVlciAlcyBoYXMgYWxyZWFkeSBhZHZlcnRpc2VkIHRvbyBtYW55IG1lc3NhZ2VzICglZCk7IGlnbm9yaW5nJywgaWQsIGlhc2tlZCk7XG4gICAgICAgICAgICB0aGlzLm1ldHJpY3M/LmloYXZlUmN2SWdub3JlZC5pbmMoeyByZWFzb246IElIYXZlSWdub3JlUmVhc29uLk1heElhc2tlZCB9KTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdHJpbmcgbXNnSWQgPT4gbXNnSWRcbiAgICAgICAgY29uc3QgaXdhbnQgPSBuZXcgTWFwKCk7XG4gICAgICAgIGloYXZlLmZvckVhY2goKHsgdG9waWNJRCwgbWVzc2FnZUlEcyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodG9waWNJRCA9PSBudWxsIHx8IChtZXNzYWdlSURzID09IG51bGwpIHx8ICF0aGlzLm1lc2guaGFzKHRvcGljSUQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGlkb250aGF2ZSA9IDA7XG4gICAgICAgICAgICBtZXNzYWdlSURzLmZvckVhY2goKG1zZ0lkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnSWRTdHIgPSB0aGlzLm1zZ0lkVG9TdHJGbihtc2dJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlZW5DYWNoZS5oYXMobXNnSWRTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGl3YW50LnNldChtc2dJZFN0ciwgbXNnSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZG9udGhhdmUrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25JaGF2ZVJjdih0b3BpY0lELCBtZXNzYWdlSURzLmxlbmd0aCwgaWRvbnRoYXZlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpd2FudC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlhc2sgPSBpd2FudC5zaXplO1xuICAgICAgICBpZiAoaWFzayArIGlhc2tlZCA+IGNvbnN0YW50cy5Hb3NzaXBzdWJNYXhJSGF2ZUxlbmd0aCkge1xuICAgICAgICAgICAgaWFzayA9IGNvbnN0YW50cy5Hb3NzaXBzdWJNYXhJSGF2ZUxlbmd0aCAtIGlhc2tlZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZygnSUhBVkU6IEFza2luZyBmb3IgJWQgb3V0IG9mICVkIG1lc3NhZ2VzIGZyb20gJXMnLCBpYXNrLCBpd2FudC5zaXplLCBpZCk7XG4gICAgICAgIGxldCBpd2FudExpc3QgPSBBcnJheS5mcm9tKGl3YW50LnZhbHVlcygpKTtcbiAgICAgICAgLy8gYXNrIGluIHJhbmRvbSBvcmRlclxuICAgICAgICBzaHVmZmxlKGl3YW50TGlzdCk7XG4gICAgICAgIC8vIHRydW5jYXRlIHRvIHRoZSBtZXNzYWdlcyB3ZSBhcmUgYWN0dWFsbHkgYXNraW5nIGZvciBhbmQgdXBkYXRlIHRoZSBpYXNrZWQgY291bnRlclxuICAgICAgICBpd2FudExpc3QgPSBpd2FudExpc3Quc2xpY2UoMCwgaWFzayk7XG4gICAgICAgIHRoaXMuaWFza2VkLnNldChpZCwgaWFza2VkICsgaWFzayk7XG4gICAgICAgIC8vIGRvIG5vdCBhZGQgZ29zc2lwVHJhY2VyIHByb21pc2UgaGVyZSB1bnRpbCBhIHN1Y2Nlc3NmdWwgc2VuZFJwYygpXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZUlEczogaXdhbnRMaXN0XG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgSVdBTlQgbWVzc2FnZXNcbiAgICAgKiBSZXR1cm5zIG1lc3NhZ2VzIHRvIHNlbmQgYmFjayB0byBwZWVyXG4gICAgICovXG4gICAgaGFuZGxlSVdhbnQoaWQsIGl3YW50KSB7XG4gICAgICAgIGlmIChpd2FudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBkb24ndCByZXNwb25kIHRvIElXQU5UIHJlcXVlc3RzIGZyb20gYW55IHBlciB3aG9zZSBzY29yZSBpcyBiZWxvdyB0aGUgZ29zc2lwIHRocmVzaG9sZFxuICAgICAgICBjb25zdCBzY29yZSA9IHRoaXMuc2NvcmUuc2NvcmUoaWQpO1xuICAgICAgICBpZiAoc2NvcmUgPCB0aGlzLm9wdHMuc2NvcmVUaHJlc2hvbGRzLmdvc3NpcFRocmVzaG9sZCkge1xuICAgICAgICAgICAgdGhpcy5sb2coJ0lXQU5UOiBpZ25vcmluZyBwZWVyICVzIHdpdGggc2NvcmUgYmVsb3cgdGhyZXNob2xkIFtzY29yZSA9ICVkXScsIGlkLCBzY29yZSk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWhhdmUgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGl3YW50QnlUb3BpYyA9IG5ldyBNYXAoKTtcbiAgICAgICAgbGV0IGl3YW50RG9udGhhdmUgPSAwO1xuICAgICAgICBpd2FudC5mb3JFYWNoKCh7IG1lc3NhZ2VJRHMgfSkgPT4ge1xuICAgICAgICAgICAgbWVzc2FnZUlEcz8uZm9yRWFjaCgobXNnSWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2dJZFN0ciA9IHRoaXMubXNnSWRUb1N0ckZuKG1zZ0lkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubWNhY2hlLmdldFdpdGhJV2FudENvdW50KG1zZ0lkU3RyLCBpZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaXdhbnREb250aGF2ZSsrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl3YW50QnlUb3BpYy5zZXQoZW50cnkubXNnLnRvcGljLCAxICsgKGl3YW50QnlUb3BpYy5nZXQoZW50cnkubXNnLnRvcGljKSA/PyAwKSk7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmNvdW50ID4gY29uc3RhbnRzLkdvc3NpcHN1Ykdvc3NpcFJldHJhbnNtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKCdJV0FOVDogUGVlciAlcyBoYXMgYXNrZWQgZm9yIG1lc3NhZ2UgJXMgdG9vIG1hbnkgdGltZXM6IGlnbm9yaW5nIHJlcXVlc3QnLCBpZCwgbXNnSWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGloYXZlLnNldChtc2dJZFN0ciwgZW50cnkubXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tZXRyaWNzPy5vbkl3YW50UmN2KGl3YW50QnlUb3BpYywgaXdhbnREb250aGF2ZSk7XG4gICAgICAgIGlmIChpaGF2ZS5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvZygnSVdBTlQ6IENvdWxkIG5vdCBwcm92aWRlIGFueSB3YW50ZWQgbWVzc2FnZXMgdG8gJXMnLCBpZCk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2coJ0lXQU5UOiBTZW5kaW5nICVkIG1lc3NhZ2VzIHRvICVzJywgaWhhdmUuc2l6ZSwgaWQpO1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpaGF2ZS52YWx1ZXMoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgR3JhZnQgbWVzc2FnZXNcbiAgICAgKi9cbiAgICBhc3luYyBoYW5kbGVHcmFmdChpZCwgZ3JhZnQpIHtcbiAgICAgICAgY29uc3QgcHJ1bmUgPSBbXTtcbiAgICAgICAgY29uc3Qgc2NvcmUgPSB0aGlzLnNjb3JlLnNjb3JlKGlkKTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGRvUFggPSB0aGlzLm9wdHMuZG9QWDtcbiAgICAgICAgZ3JhZnQuZm9yRWFjaCgoeyB0b3BpY0lEIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0b3BpY0lEID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwZWVyc0luTWVzaCA9IHRoaXMubWVzaC5nZXQodG9waWNJRCk7XG4gICAgICAgICAgICBpZiAocGVlcnNJbk1lc2ggPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IGRvIFBYIHdoZW4gdGhlcmUgaXMgYW4gdW5rbm93biB0b3BpYyB0byBhdm9pZCBsZWFraW5nIG91ciBwZWVyc1xuICAgICAgICAgICAgICAgIGRvUFggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBzcGFtIGhhcmRlbmluZzogaWdub3JlIEdSQUZUcyBmb3IgdW5rbm93biB0b3BpY3NcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBwZWVyIGlzIGFscmVhZHkgaW4gdGhlIG1lc2g7IGlmIHNvIGRvIG5vdGhpbmdcbiAgICAgICAgICAgIGlmIChwZWVyc0luTWVzaC5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgR1JBRlQgdG8vZnJvbSBkaXJlY3QgcGVlcnM7IGNvbXBsYWluIGxvdWRseSBpZiB0aGlzIGhhcHBlbnNcbiAgICAgICAgICAgIGlmICh0aGlzLmRpcmVjdC5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coJ0dSQUZUOiBpZ25vcmluZyByZXF1ZXN0IGZyb20gZGlyZWN0IHBlZXIgJXMnLCBpZCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBwb3NzaWJseSBhIGJ1ZyBmcm9tIGEgbm9uLXJlY2lwcmljYWwgY29uZmlndXJhdGlvbjsgc2VuZCBhIFBSVU5FXG4gICAgICAgICAgICAgICAgcHJ1bmUucHVzaCh0b3BpY0lEKTtcbiAgICAgICAgICAgICAgICAvLyBidXQgZG9uJ3QgcHhcbiAgICAgICAgICAgICAgICBkb1BYID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGFyZSBub3QgYmFja2luZyBvZmYgdGhhdCBwZWVyXG4gICAgICAgICAgICBjb25zdCBleHBpcmUgPSB0aGlzLmJhY2tvZmYuZ2V0KHRvcGljSUQpPy5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBpcmUgPT09ICdudW1iZXInICYmIG5vdyA8IGV4cGlyZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nKCdHUkFGVDogaWdub3JpbmcgYmFja2VkIG9mZiBwZWVyICVzJywgaWQpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCBiZWhhdmlvcmFsIHBlbmFsdHlcbiAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLmFkZFBlbmFsdHkoaWQsIDEsIFNjb3JlUGVuYWx0eS5HcmFmdEJhY2tvZmYpO1xuICAgICAgICAgICAgICAgIC8vIG5vIFBYXG4gICAgICAgICAgICAgICAgZG9QWCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBmbG9vZCBjdXRvZmYgLS0gaXMgdGhlIEdSQUZUIGNvbWluZyB0b28gZmFzdD9cbiAgICAgICAgICAgICAgICBjb25zdCBmbG9vZEN1dG9mZiA9IGV4cGlyZSArIHRoaXMub3B0cy5ncmFmdEZsb29kVGhyZXNob2xkIC0gdGhpcy5vcHRzLnBydW5lQmFja29mZjtcbiAgICAgICAgICAgICAgICBpZiAobm93IDwgZmxvb2RDdXRvZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXh0cmEgcGVuYWx0eVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLmFkZFBlbmFsdHkoaWQsIDEsIFNjb3JlUGVuYWx0eS5HcmFmdEJhY2tvZmYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBiYWNrb2ZmXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRCYWNrb2ZmKGlkLCB0b3BpY0lEKTtcbiAgICAgICAgICAgICAgICBwcnVuZS5wdXNoKHRvcGljSUQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBzY29yZVxuICAgICAgICAgICAgaWYgKHNjb3JlIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IEdSQUZUIHBlZXJzIHdpdGggbmVnYXRpdmUgc2NvcmVcbiAgICAgICAgICAgICAgICB0aGlzLmxvZygnR1JBRlQ6IGlnbm9yaW5nIHBlZXIgJXMgd2l0aCBuZWdhdGl2ZSBzY29yZTogc2NvcmU9JWQsIHRvcGljPSVzJywgaWQsIHNjb3JlLCB0b3BpY0lEKTtcbiAgICAgICAgICAgICAgICAvLyB3ZSBkbyBzZW5kIHRoZW0gUFJVTkUgaG93ZXZlciwgYmVjYXVzZSBpdCdzIGEgbWF0dGVyIG9mIHByb3RvY29sIGNvcnJlY3RuZXNzXG4gICAgICAgICAgICAgICAgcHJ1bmUucHVzaCh0b3BpY0lEKTtcbiAgICAgICAgICAgICAgICAvLyBidXQgd2Ugd29uJ3QgUFggdG8gdGhlbVxuICAgICAgICAgICAgICAgIGRvUFggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBhZGQvcmVmcmVzaCBiYWNrb2ZmIHNvIHRoYXQgd2UgZG9uJ3QgcmVHUkFGVCB0b28gZWFybHkgZXZlbiBpZiB0aGUgc2NvcmUgZGVjYXlzXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRCYWNrb2ZmKGlkLCB0b3BpY0lEKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayB0aGUgbnVtYmVyIG9mIG1lc2ggcGVlcnM7IGlmIGl0IGlzIGF0IChvciBvdmVyKSBEaGksIHdlIG9ubHkgYWNjZXB0IGdyYWZ0c1xuICAgICAgICAgICAgLy8gZnJvbSBwZWVycyB3aXRoIG91dGJvdW5kIGNvbm5lY3Rpb25zOyB0aGlzIGlzIGEgZGVmZW5zaXZlIGNoZWNrIHRvIHJlc3RyaWN0IHBvdGVudGlhbFxuICAgICAgICAgICAgLy8gbWVzaCB0YWtlb3ZlciBhdHRhY2tzIGNvbWJpbmVkIHdpdGggbG92ZSBib21iaW5nXG4gICAgICAgICAgICBpZiAocGVlcnNJbk1lc2guc2l6ZSA+PSB0aGlzLm9wdHMuRGhpICYmICEodGhpcy5vdXRib3VuZC5nZXQoaWQpID8/IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIHBydW5lLnB1c2godG9waWNJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRCYWNrb2ZmKGlkLCB0b3BpY0lEKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvZygnR1JBRlQ6IEFkZCBtZXNoIGxpbmsgZnJvbSAlcyBpbiAlcycsIGlkLCB0b3BpY0lEKTtcbiAgICAgICAgICAgIHRoaXMuc2NvcmUuZ3JhZnQoaWQsIHRvcGljSUQpO1xuICAgICAgICAgICAgcGVlcnNJbk1lc2guYWRkKGlkKTtcbiAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25BZGRUb01lc2godG9waWNJRCwgSW5jbHVzaW9uUmVhc29uLlN1YnNjcmliZWQsIDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBydW5lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9uVW5zdWJzY3JpYmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBydW5lLm1hcChhc3luYyAodG9waWMpID0+IHRoaXMubWFrZVBydW5lKGlkLCB0b3BpYywgZG9QWCwgb25VbnN1YnNjcmliZSkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBQcnVuZSBtZXNzYWdlc1xuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZVBydW5lKGlkLCBwcnVuZSkge1xuICAgICAgICBjb25zdCBzY29yZSA9IHRoaXMuc2NvcmUuc2NvcmUoaWQpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgdG9waWNJRCwgYmFja29mZiwgcGVlcnMgfSBvZiBwcnVuZSkge1xuICAgICAgICAgICAgaWYgKHRvcGljSUQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGVlcnNJbk1lc2ggPSB0aGlzLm1lc2guZ2V0KHRvcGljSUQpO1xuICAgICAgICAgICAgaWYgKHBlZXJzSW5NZXNoID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvZygnUFJVTkU6IFJlbW92ZSBtZXNoIGxpbmsgdG8gJXMgaW4gJXMnLCBpZCwgdG9waWNJRCk7XG4gICAgICAgICAgICB0aGlzLnNjb3JlLnBydW5lKGlkLCB0b3BpY0lEKTtcbiAgICAgICAgICAgIGlmIChwZWVyc0luTWVzaC5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgcGVlcnNJbk1lc2guZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uUmVtb3ZlRnJvbU1lc2godG9waWNJRCwgQ2h1cm5SZWFzb24uUHJ1bmUsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaXMgdGhlcmUgYSBiYWNrb2ZmIHNwZWNpZmllZCBieSB0aGUgcGVlcj8gaWYgc28gb2JleSBpdFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYWNrb2ZmID09PSAnbnVtYmVyJyAmJiBiYWNrb2ZmID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9BZGRCYWNrb2ZmKGlkLCB0b3BpY0lELCBiYWNrb2ZmICogMTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEJhY2tvZmYoaWQsIHRvcGljSUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUFhcbiAgICAgICAgICAgIGlmICgocGVlcnMgIT0gbnVsbCkgJiYgKHBlZXJzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgaWdub3JlIFBYIGZyb20gcGVlcnMgd2l0aCBpbnN1ZmZpY2llbnQgc2NvcmVzXG4gICAgICAgICAgICAgICAgaWYgKHNjb3JlIDwgdGhpcy5vcHRzLnNjb3JlVGhyZXNob2xkcy5hY2NlcHRQWFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZygnUFJVTkU6IGlnbm9yaW5nIFBYIGZyb20gcGVlciAlcyB3aXRoIGluc3VmZmljaWVudCBzY29yZSBbc2NvcmUgPSAlZCwgdG9waWMgPSAlc10nLCBpZCwgc2NvcmUsIHRvcGljSUQpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5weENvbm5lY3QocGVlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZCBzdGFuZGFyZCBiYWNrb2ZmIGxvZyBmb3IgYSBwZWVyIGluIGEgdG9waWNcbiAgICAgKi9cbiAgICBhZGRCYWNrb2ZmKGlkLCB0b3BpYykge1xuICAgICAgICB0aGlzLmRvQWRkQmFja29mZihpZCwgdG9waWMsIHRoaXMub3B0cy5wcnVuZUJhY2tvZmYpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgYmFja29mZiBleHBpcnkgaW50ZXJ2YWwgZm9yIGEgcGVlciBpbiBhIHRvcGljXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRcbiAgICAgKiBAcGFyYW0gdG9waWNcbiAgICAgKiBAcGFyYW0gaW50ZXJ2YWxNcyAtIGJhY2tvZmYgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgZG9BZGRCYWNrb2ZmKGlkLCB0b3BpYywgaW50ZXJ2YWxNcykge1xuICAgICAgICBsZXQgYmFja29mZiA9IHRoaXMuYmFja29mZi5nZXQodG9waWMpO1xuICAgICAgICBpZiAoYmFja29mZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBiYWNrb2ZmID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5iYWNrb2ZmLnNldCh0b3BpYywgYmFja29mZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwaXJlID0gRGF0ZS5ub3coKSArIGludGVydmFsTXM7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRXhwaXJlID0gYmFja29mZi5nZXQoaWQpID8/IDA7XG4gICAgICAgIGlmIChleGlzdGluZ0V4cGlyZSA8IGV4cGlyZSkge1xuICAgICAgICAgICAgYmFja29mZi5zZXQoaWQsIGV4cGlyZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQXBwbHkgcGVuYWx0aWVzIGZyb20gYnJva2VuIElIQVZFL0lXQU5UIHByb21pc2VzXG4gICAgICovXG4gICAgYXBwbHlJd2FudFBlbmFsdGllcygpIHtcbiAgICAgICAgdGhpcy5nb3NzaXBUcmFjZXIuZ2V0QnJva2VuUHJvbWlzZXMoKS5mb3JFYWNoKChjb3VudCwgcCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2coXCJwZWVyICVzIGRpZG4ndCBmb2xsb3cgdXAgaW4gJWQgSVdBTlQgcmVxdWVzdHM7IGFkZGluZyBwZW5hbHR5XCIsIHAsIGNvdW50KTtcbiAgICAgICAgICAgIHRoaXMuc2NvcmUuYWRkUGVuYWx0eShwLCBjb3VudCwgU2NvcmVQZW5hbHR5LkJyb2tlblByb21pc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXIgZXhwaXJlZCBiYWNrb2ZmIGV4cGlyaWVzXG4gICAgICovXG4gICAgY2xlYXJCYWNrb2ZmKCkge1xuICAgICAgICAvLyB3ZSBvbmx5IGNsZWFyIG9uY2UgZXZlcnkgR29zc2lwc3ViUHJ1bmVCYWNrb2ZmVGlja3MgdGlja3MgdG8gYXZvaWQgaXRlcmF0aW5nIG92ZXIgdGhlIG1hcHMgdG9vIG11Y2hcbiAgICAgICAgaWYgKHRoaXMuaGVhcnRiZWF0VGlja3MgJSBjb25zdGFudHMuR29zc2lwc3ViUHJ1bmVCYWNrb2ZmVGlja3MgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmJhY2tvZmYuZm9yRWFjaCgoYmFja29mZiwgdG9waWMpID0+IHtcbiAgICAgICAgICAgIGJhY2tvZmYuZm9yRWFjaCgoZXhwaXJlLCBpZCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBzb21lIHNsYWNrIHRpbWUgdG8gdGhlIGV4cGlyYXRpb24sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbGlicDJwL3NwZWNzL3B1bGwvMjg5XG4gICAgICAgICAgICAgICAgaWYgKGV4cGlyZSArIEJBQ0tPRkZfU0xBQ0sgKiB0aGlzLm9wdHMuaGVhcnRiZWF0SW50ZXJ2YWwgPCBub3cpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja29mZi5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGJhY2tvZmYuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmFja29mZi5kZWxldGUodG9waWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWF5YmUgcmVjb25uZWN0IHRvIGRpcmVjdCBwZWVyc1xuICAgICAqL1xuICAgIGFzeW5jIGRpcmVjdENvbm5lY3QoKSB7XG4gICAgICAgIGNvbnN0IHRvY29ubmVjdCA9IFtdO1xuICAgICAgICB0aGlzLmRpcmVjdC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN0cmVhbXNPdXRib3VuZC5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgdG9jb25uZWN0LnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodG9jb25uZWN0Lm1hcChhc3luYyAoaWQpID0+IHRoaXMuY29ubmVjdChpZCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWF5YmUgYXR0ZW1wdCBjb25uZWN0aW9uIGdpdmVuIHNpZ25lZCBwZWVyIHJlY29yZHNcbiAgICAgKi9cbiAgICBhc3luYyBweENvbm5lY3QocGVlcnMpIHtcbiAgICAgICAgaWYgKHBlZXJzLmxlbmd0aCA+IHRoaXMub3B0cy5wcnVuZVBlZXJzKSB7XG4gICAgICAgICAgICBzaHVmZmxlKHBlZXJzKTtcbiAgICAgICAgICAgIHBlZXJzID0gcGVlcnMuc2xpY2UoMCwgdGhpcy5vcHRzLnBydW5lUGVlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvY29ubmVjdCA9IFtdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwZWVycy5tYXAoYXN5bmMgKHBpKSA9PiB7XG4gICAgICAgICAgICBpZiAocGkucGVlcklEID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwZWVyID0gcGVlcklkRnJvbUJ5dGVzKHBpLnBlZXJJRCk7XG4gICAgICAgICAgICBjb25zdCBwID0gcGVlci50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVlcnMuaGFzKHApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpLnNpZ25lZFBlZXJSZWNvcmQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRvY29ubmVjdC5wdXNoKHApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBwZWVyIHNlbnQgdXMgYSBzaWduZWQgcmVjb3JkXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHJlY29yZCBmcm9tIHRoZSBwZWVyIHdobyBzZW50IHRoZSByZWNvcmQsIGJ1dCBhbm90aGVyIHBlZXIgd2hvIGlzIGNvbm5lY3RlZCB3aXRoIGl0XG4gICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBpdCBpcyB2YWxpZFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbXBvbmVudHMucGVlclN0b3JlLmNvbnN1bWVQZWVyUmVjb3JkKHBpLnNpZ25lZFBlZXJSZWNvcmQsIHBlZXIpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZygnYm9ndXMgcGVlciByZWNvcmQgb2J0YWluZWQgdGhyb3VnaCBweDogY291bGQgbm90IGFkZCBwZWVyIHJlY29yZCB0byBhZGRyZXNzIGJvb2snKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2Nvbm5lY3QucHVzaChwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coJ2JvZ3VzIHBlZXIgcmVjb3JkIG9idGFpbmVkIHRocm91Z2ggcHg6IGludmFsaWQgc2lnbmF0dXJlIG9yIG5vdCBhIHBlZXIgcmVjb3JkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHRvY29ubmVjdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0b2Nvbm5lY3QubWFwKGFzeW5jIChpZCkgPT4gdGhpcy5jb25uZWN0KGlkKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25uZWN0IHRvIGEgcGVlciB1c2luZyB0aGUgZ29zc2lwc3ViIHByb3RvY29sXG4gICAgICovXG4gICAgYXN5bmMgY29ubmVjdChpZCkge1xuICAgICAgICB0aGlzLmxvZygnSW5pdGlhdGluZyBjb25uZWN0aW9uIHdpdGggJXMnLCBpZCk7XG4gICAgICAgIGNvbnN0IHBlZXJJZCA9IHBlZXJJZEZyb21TdHJpbmcoaWQpO1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgdGhpcy5jb21wb25lbnRzLmNvbm5lY3Rpb25NYW5hZ2VyLm9wZW5Db25uZWN0aW9uKHBlZXJJZCk7XG4gICAgICAgIGZvciAoY29uc3QgbXVsdGljb2RlYyBvZiB0aGlzLm11bHRpY29kZWNzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRvcG9sb2d5IG9mIHRoaXMuY29tcG9uZW50cy5yZWdpc3RyYXIuZ2V0VG9wb2xvZ2llcyhtdWx0aWNvZGVjKSkge1xuICAgICAgICAgICAgICAgIHRvcG9sb2d5Lm9uQ29ubmVjdD8uKHBlZXJJZCwgY29ubmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlcyB0byBhIHRvcGljXG4gICAgICovXG4gICAgc3Vic2NyaWJlKHRvcGljKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cy5jb2RlICE9PSBHb3NzaXBTdGF0dXNDb2RlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHVic3ViIGhhcyBub3Qgc3RhcnRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyh0b3BpYykpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodG9waWMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwZWVySWQgb2YgdGhpcy5wZWVycy5rZXlzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRTdWJzY3JpcHRpb25zKHBlZXJJZCwgW3RvcGljXSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5qb2luKHRvcGljKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5zdWJzY3JpYmUgdG8gYSB0b3BpY1xuICAgICAqL1xuICAgIHVuc3Vic2NyaWJlKHRvcGljKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cy5jb2RlICE9PSBHb3NzaXBTdGF0dXNDb2RlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHVic3ViIGlzIG5vdCBzdGFydGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2FzU3Vic2NyaWJlZCA9IHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUodG9waWMpO1xuICAgICAgICB0aGlzLmxvZygndW5zdWJzY3JpYmUgZnJvbSAlcyAtIGFtIHN1YnNjcmliZWQgJXMnLCB0b3BpYywgd2FzU3Vic2NyaWJlZCk7XG4gICAgICAgIGlmICh3YXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBlZXJJZCBvZiB0aGlzLnBlZXJzLmtleXMoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFN1YnNjcmlwdGlvbnMocGVlcklkLCBbdG9waWNdLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWF2ZSh0b3BpYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEpvaW4gdG9waWNcbiAgICAgKi9cbiAgICBqb2luKHRvcGljKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cy5jb2RlICE9PSBHb3NzaXBTdGF0dXNDb2RlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR29zc2lwc3ViIGhhcyBub3Qgc3RhcnRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGFyZSBhbHJlYWR5IGluIHRoZSBtZXNoLCByZXR1cm5cbiAgICAgICAgaWYgKHRoaXMubWVzaC5oYXModG9waWMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2coJ0pPSU4gJXMnLCB0b3BpYyk7XG4gICAgICAgIHRoaXMubWV0cmljcz8ub25Kb2luKHRvcGljKTtcbiAgICAgICAgY29uc3QgdG9BZGQgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IGJhY2tvZmYgPSB0aGlzLmJhY2tvZmYuZ2V0KHRvcGljKTtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBtZXNoX24gcGVlcnMgaW4gZmFub3V0W3RvcGljXSBhbmQgYWRkIHRoZW0gdG8gdGhlIG1lc2ggaWYgd2UgZG8sXG4gICAgICAgIC8vIHJlbW92aW5nIHRoZSBmYW5vdXQgZW50cnkuXG4gICAgICAgIGNvbnN0IGZhbm91dFBlZXJzID0gdGhpcy5mYW5vdXQuZ2V0KHRvcGljKTtcbiAgICAgICAgaWYgKGZhbm91dFBlZXJzICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBmYW5vdXQgZW50cnkgYW5kIHRoZSBsYXN0IHB1Ymxpc2hlZCB0aW1lXG4gICAgICAgICAgICB0aGlzLmZhbm91dC5kZWxldGUodG9waWMpO1xuICAgICAgICAgICAgdGhpcy5mYW5vdXRMYXN0cHViLmRlbGV0ZSh0b3BpYyk7XG4gICAgICAgICAgICAvLyByZW1vdmUgZXhwbGljaXQgcGVlcnMsIHBlZXJzIHdpdGggbmVnYXRpdmUgc2NvcmVzLCBhbmQgYmFja29mZmVkIHBlZXJzXG4gICAgICAgICAgICBmYW5vdXRQZWVycy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kaXJlY3QuaGFzKGlkKSAmJiB0aGlzLnNjb3JlLnNjb3JlKGlkKSA+PSAwICYmICgoYmFja29mZiA9PSBudWxsKSB8fCAhYmFja29mZi5oYXMoaWQpKSkge1xuICAgICAgICAgICAgICAgICAgICB0b0FkZC5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy5vbkFkZFRvTWVzaCh0b3BpYywgSW5jbHVzaW9uUmVhc29uLkZhbm91dCwgdG9BZGQuc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBnZXQgbW9yZSBwZWVycywgd2hpY2ggd2UgcmFuZG9tbHkgc2VsZWN0XG4gICAgICAgIGlmICh0b0FkZC5zaXplIDwgdGhpcy5vcHRzLkQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhbm91dENvdW50ID0gdG9BZGQuc2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BlZXJzID0gdGhpcy5nZXRSYW5kb21Hb3NzaXBQZWVycyh0b3BpYywgdGhpcy5vcHRzLkQsIChpZCkgPT4gXG4gICAgICAgICAgICAvLyBmaWx0ZXIgZGlyZWN0IHBlZXJzIGFuZCBwZWVycyB3aXRoIG5lZ2F0aXZlIHNjb3JlXG4gICAgICAgICAgICAhdG9BZGQuaGFzKGlkKSAmJiAhdGhpcy5kaXJlY3QuaGFzKGlkKSAmJiB0aGlzLnNjb3JlLnNjb3JlKGlkKSA+PSAwICYmICgoYmFja29mZiA9PSBudWxsKSB8fCAhYmFja29mZi5oYXMoaWQpKSk7XG4gICAgICAgICAgICBuZXdQZWVycy5mb3JFYWNoKChwZWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9BZGQuYWRkKHBlZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uQWRkVG9NZXNoKHRvcGljLCBJbmNsdXNpb25SZWFzb24uUmFuZG9tLCB0b0FkZC5zaXplIC0gZmFub3V0Q291bnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzaC5zZXQodG9waWMsIHRvQWRkKTtcbiAgICAgICAgdG9BZGQuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdKT0lOOiBBZGQgbWVzaCBsaW5rIHRvICVzIGluICVzJywgaWQsIHRvcGljKTtcbiAgICAgICAgICAgIHRoaXMuc2VuZEdyYWZ0KGlkLCB0b3BpYyk7XG4gICAgICAgICAgICAvLyBydXN0LWxpYnAycFxuICAgICAgICAgICAgLy8gLSBwZWVyX3Njb3JlLmdyYWZ0KClcbiAgICAgICAgICAgIC8vIC0gU2VsZjo6Y29udHJvbF9wb29sX2FkZCgpXG4gICAgICAgICAgICAvLyAtIHBlZXJfYWRkZWRfdG9fbWVzaCgpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMZWF2ZSB0b3BpY1xuICAgICAqL1xuICAgIGxlYXZlKHRvcGljKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cy5jb2RlICE9PSBHb3NzaXBTdGF0dXNDb2RlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR29zc2lwc3ViIGhhcyBub3Qgc3RhcnRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nKCdMRUFWRSAlcycsIHRvcGljKTtcbiAgICAgICAgdGhpcy5tZXRyaWNzPy5vbkxlYXZlKHRvcGljKTtcbiAgICAgICAgLy8gU2VuZCBQUlVORSB0byBtZXNoIHBlZXJzXG4gICAgICAgIGNvbnN0IG1lc2hQZWVycyA9IHRoaXMubWVzaC5nZXQodG9waWMpO1xuICAgICAgICBpZiAobWVzaFBlZXJzICE9IG51bGwpIHtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKEFycmF5LmZyb20obWVzaFBlZXJzKS5tYXAoYXN5bmMgKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coJ0xFQVZFOiBSZW1vdmUgbWVzaCBsaW5rIHRvICVzIGluICVzJywgaWQsIHRvcGljKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlbmRQcnVuZShpZCwgdG9waWMpO1xuICAgICAgICAgICAgfSkpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZygnRXJyb3Igc2VuZGluZyBwcnVuZXMgdG8gbWVzaCBwZWVycycsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubWVzaC5kZWxldGUodG9waWMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGVjdFBlZXJzVG9Gb3J3YXJkKHRvcGljLCBwcm9wYWdhdGlvblNvdXJjZSwgZXhjbHVkZVBlZXJzKSB7XG4gICAgICAgIGNvbnN0IHRvc2VuZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgLy8gQWRkIGV4cGxpY2l0IHBlZXJzXG4gICAgICAgIGNvbnN0IHBlZXJzSW5Ub3BpYyA9IHRoaXMudG9waWNzLmdldCh0b3BpYyk7XG4gICAgICAgIGlmIChwZWVyc0luVG9waWMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3QuZm9yRWFjaCgocGVlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwZWVyc0luVG9waWMuaGFzKHBlZXIpICYmIHByb3BhZ2F0aW9uU291cmNlICE9PSBwZWVyICYmICEoZXhjbHVkZVBlZXJzPy5oYXMocGVlcikgPz8gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvc2VuZC5hZGQocGVlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBcyBvZiBNYXIgMjAyMiwgc3BlYyArIGdvbGFuZy1saWJwMnAgaW5jbHVkZSB0aGlzIHdoaWxlIHJ1c3QtbGlicDJwIGRvZXMgbm90XG4gICAgICAgICAgICAvLyBydXN0LWxpYnAycDogaHR0cHM6Ly9naXRodWIuY29tL2xpYnAycC9ydXN0LWxpYnAycC9ibG9iLzZjYzNiNGVjNTJjOTIyYmZjZjU2MmEyOWI1ODA1YzMxNTBlMzdjNzUvcHJvdG9jb2xzL2dvc3NpcHN1Yi9zcmMvYmVoYXZpb3VyLnJzI0wyNjkzXG4gICAgICAgICAgICAvLyBzcGVjOiBodHRwczovL2dpdGh1Yi5jb20vbGlicDJwL3NwZWNzL2Jsb2IvMTA3MTJjNTVhYjMwOTA4NmE1MmVlYzdkMjVmMjk0ZGY0ZmE5NjUyOC9wdWJzdWIvZ29zc2lwc3ViL2dvc3NpcHN1Yi12MS4wLm1kP3BsYWluPTEjTDM2MVxuICAgICAgICAgICAgdGhpcy5mbG9vZHN1YlBlZXJzLmZvckVhY2goKHBlZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGVlcnNJblRvcGljLmhhcyhwZWVyKSAmJlxuICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGlvblNvdXJjZSAhPT0gcGVlciAmJlxuICAgICAgICAgICAgICAgICAgICAhKGV4Y2x1ZGVQZWVycz8uaGFzKHBlZXIpID8/IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLnNjb3JlKHBlZXIpID49IHRoaXMub3B0cy5zY29yZVRocmVzaG9sZHMucHVibGlzaFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICB0b3NlbmQuYWRkKHBlZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCBtZXNoIHBlZXJzXG4gICAgICAgIGNvbnN0IG1lc2hQZWVycyA9IHRoaXMubWVzaC5nZXQodG9waWMpO1xuICAgICAgICBpZiAoKG1lc2hQZWVycyAhPSBudWxsKSAmJiBtZXNoUGVlcnMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIG1lc2hQZWVycy5mb3JFYWNoKChwZWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BhZ2F0aW9uU291cmNlICE9PSBwZWVyICYmICEoZXhjbHVkZVBlZXJzPy5oYXMocGVlcikgPz8gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvc2VuZC5hZGQocGVlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvc2VuZDtcbiAgICB9XG4gICAgc2VsZWN0UGVlcnNUb1B1Ymxpc2godG9waWMpIHtcbiAgICAgICAgY29uc3QgdG9zZW5kID0gbmV3IFNldCgpO1xuICAgICAgICBjb25zdCB0b3NlbmRDb3VudCA9IHtcbiAgICAgICAgICAgIGRpcmVjdDogMCxcbiAgICAgICAgICAgIGZsb29kc3ViOiAwLFxuICAgICAgICAgICAgbWVzaDogMCxcbiAgICAgICAgICAgIGZhbm91dDogMFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwZWVyc0luVG9waWMgPSB0aGlzLnRvcGljcy5nZXQodG9waWMpO1xuICAgICAgICBpZiAocGVlcnNJblRvcGljICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGZsb29kLXB1Ymxpc2ggYmVoYXZpb3JcbiAgICAgICAgICAgIC8vIHNlbmQgdG8gZGlyZWN0IHBlZXJzIGFuZCBfYWxsXyBwZWVycyBtZWV0aW5nIHRoZSBwdWJsaXNoVGhyZXNob2xkXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRzLmZsb29kUHVibGlzaCkge1xuICAgICAgICAgICAgICAgIHBlZXJzSW5Ub3BpYy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXJlY3QuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9zZW5kLmFkZChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3NlbmRDb3VudC5kaXJlY3QrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNjb3JlLnNjb3JlKGlkKSA+PSB0aGlzLm9wdHMuc2NvcmVUaHJlc2hvbGRzLnB1Ymxpc2hUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvc2VuZC5hZGQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9zZW5kQ291bnQuZmxvb2RzdWIrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbm9uLWZsb29kLXB1Ymxpc2ggYmVoYXZpb3JcbiAgICAgICAgICAgICAgICAvLyBzZW5kIHRvIGRpcmVjdCBwZWVycywgc3Vic2NyaWJlZCBmbG9vZHN1YiBwZWVyc1xuICAgICAgICAgICAgICAgIC8vIGFuZCBzb21lIG1lc2ggcGVlcnMgYWJvdmUgcHVibGlzaFRocmVzaG9sZFxuICAgICAgICAgICAgICAgIC8vIGRpcmVjdCBwZWVycyAoaWYgc3Vic2NyaWJlZClcbiAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVlcnNJblRvcGljLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvc2VuZC5hZGQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9zZW5kQ291bnQuZGlyZWN0Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBmbG9vZHN1YiBwZWVyc1xuICAgICAgICAgICAgICAgIC8vIE5vdGU6IGlmIHRoZXJlIGFyZSBubyBmbG9vZHN1YiBwZWVycywgd2Ugc2F2ZSBhIGxvb3AgdGhyb3VnaCBwZWVyc0luVG9waWMgTWFwXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vZHN1YlBlZXJzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWVyc0luVG9waWMuaGFzKGlkKSAmJiB0aGlzLnNjb3JlLnNjb3JlKGlkKSA+PSB0aGlzLm9wdHMuc2NvcmVUaHJlc2hvbGRzLnB1Ymxpc2hUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvc2VuZC5hZGQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9zZW5kQ291bnQuZmxvb2RzdWIrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIEdvc3NpcHN1YiBwZWVycyBoYW5kbGluZ1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc2hQZWVycyA9IHRoaXMubWVzaC5nZXQodG9waWMpO1xuICAgICAgICAgICAgICAgIGlmICgobWVzaFBlZXJzICE9IG51bGwpICYmIG1lc2hQZWVycy5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZXNoUGVlcnMuZm9yRWFjaCgocGVlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9zZW5kLmFkZChwZWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvc2VuZENvdW50Lm1lc2grKztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYnJhY2Utc3R5bGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCBpbiB0aGUgbWVzaCBmb3IgdG9waWMsIHVzZSBmYW5vdXQgcGVlcnNcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmFub3V0UGVlcnMgPSB0aGlzLmZhbm91dC5nZXQodG9waWMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGZhbm91dFBlZXJzICE9IG51bGwpICYmIGZhbm91dFBlZXJzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYW5vdXRQZWVycy5mb3JFYWNoKChwZWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9zZW5kLmFkZChwZWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3NlbmRDb3VudC5mYW5vdXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9icmFjZS1zdHlsZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm8gZmFub3V0IHBlZXJzLCBzZWxlY3QgbWVzaF9uIG9mIHRoZW0gYW5kIGFkZCB0aGVtIHRvIHRoZSBmYW5vdXRcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIHRoZSBmYW5vdXQsIHRoZW4gcGljayBwZWVycyBpbiB0b3BpYyBhYm92ZSB0aGUgcHVibGlzaFRocmVzaG9sZFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmFub3V0UGVlcnMgPSB0aGlzLmdldFJhbmRvbUdvc3NpcFBlZXJzKHRvcGljLCB0aGlzLm9wdHMuRCwgKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NvcmUuc2NvcmUoaWQpID49IHRoaXMub3B0cy5zY29yZVRocmVzaG9sZHMucHVibGlzaFRocmVzaG9sZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1kZXB0aFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0Zhbm91dFBlZXJzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYW5vdXQuc2V0KHRvcGljLCBuZXdGYW5vdXRQZWVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmFub3V0UGVlcnMuZm9yRWFjaCgocGVlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3NlbmQuYWRkKHBlZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3NlbmRDb3VudC5mYW5vdXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcHVibGlzaGluZyB0byBmYW5vdXQgcGVlcnMgLSB1cGRhdGUgdGhlIHRpbWUgd2UgcHVibGlzaGVkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFub3V0TGFzdHB1Yi5zZXQodG9waWMsIERhdGUubm93KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0b3NlbmQsIHRvc2VuZENvdW50IH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvcndhcmRzIGEgbWVzc2FnZSBmcm9tIG91ciBwZWVycy5cbiAgICAgKlxuICAgICAqIEZvciBtZXNzYWdlcyBwdWJsaXNoZWQgYnkgdXMgKHRoZSBhcHAgbGF5ZXIpLCB0aGlzIGNsYXNzIHVzZXMgYHB1Ymxpc2hgXG4gICAgICovXG4gICAgZm9yd2FyZE1lc3NhZ2UobXNnSWRTdHIsIHJhd01zZywgcHJvcGFnYXRpb25Tb3VyY2UsIGV4Y2x1ZGVQZWVycykge1xuICAgICAgICAvLyBtZXNzYWdlIGlzIGZ1bGx5IHZhbGlkYXRlZCBpbmZvcm0gcGVlcl9zY29yZVxuICAgICAgICBpZiAocHJvcGFnYXRpb25Tb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zY29yZS5kZWxpdmVyTWVzc2FnZShwcm9wYWdhdGlvblNvdXJjZSwgbXNnSWRTdHIsIHJhd01zZy50b3BpYyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9zZW5kID0gdGhpcy5zZWxlY3RQZWVyc1RvRm9yd2FyZChyYXdNc2cudG9waWMsIHByb3BhZ2F0aW9uU291cmNlLCBleGNsdWRlUGVlcnMpO1xuICAgICAgICAvLyBOb3RlOiBEb24ndCB0aHJvdyBpZiB0b3NlbmQgaXMgZW1wdHksIHdlIGNhbiBoYXZlIGEgbWVzaCB3aXRoIGEgc2luZ2xlIHBlZXJcbiAgICAgICAgLy8gZm9yd2FyZCB0aGUgbWVzc2FnZSB0byBwZWVyc1xuICAgICAgICB0b3NlbmQuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgIC8vIHNlbmRScGMgbWF5IG11dGF0ZSBSUEMgbWVzc2FnZSBvbiBwaWdneWJhY2ssIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIGZvciBlYWNoIHBlZXJcbiAgICAgICAgICAgIHRoaXMuc2VuZFJwYyhpZCwgY3JlYXRlR29zc2lwUnBjKFtyYXdNc2ddKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uRm9yd2FyZE1zZyhyYXdNc2cudG9waWMsIHRvc2VuZC5zaXplKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXBwIGxheWVyIHB1Ymxpc2hlcyBhIG1lc3NhZ2UgdG8gcGVlcnMsIHJldHVybiBudW1iZXIgb2YgcGVlcnMgdGhpcyBtZXNzYWdlIGlzIHB1Ymxpc2hlZCB0b1xuICAgICAqIE5vdGU6IGBhc3luY2AgZHVlIHRvIGNyeXB0byBvbmx5IGlmIGBTdHJpY3RTaWduYCwgb3RoZXJ3aXNlIGl0J3MgYSBzeW5jIGZuLlxuICAgICAqXG4gICAgICogRm9yIG1lc3NhZ2VzIG5vdCBmcm9tIHVzLCB0aGlzIGNsYXNzIHVzZXMgYGZvcndhcmRNZXNzYWdlYC5cbiAgICAgKi9cbiAgICBhc3luYyBwdWJsaXNoKHRvcGljLCBkYXRhLCBvcHRzKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TXMgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSAodGhpcy5kYXRhVHJhbnNmb3JtICE9IG51bGwpID8gdGhpcy5kYXRhVHJhbnNmb3JtLm91dGJvdW5kVHJhbnNmb3JtKHRvcGljLCBkYXRhKSA6IGRhdGE7XG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hDb25maWcgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1B1Ymxpc2hFcnJvci5VbmluaXRpYWxpemVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJlcGFyZSByYXcgbWVzc2FnZSB3aXRoIHVzZXIncyBwdWJsaXNoQ29uZmlnXG4gICAgICAgIGNvbnN0IHsgcmF3OiByYXdNc2csIG1zZyB9ID0gYXdhaXQgYnVpbGRSYXdNZXNzYWdlKHRoaXMucHVibGlzaENvbmZpZywgdG9waWMsIGRhdGEsIHRyYW5zZm9ybWVkRGF0YSk7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbWVzc2FnZSBpZCBmcm9tIHRoZSB1bi10cmFuc2Zvcm1lZCBkYXRhXG4gICAgICAgIGNvbnN0IG1zZ0lkID0gYXdhaXQgdGhpcy5tc2dJZEZuKG1zZyk7XG4gICAgICAgIGNvbnN0IG1zZ0lkU3RyID0gdGhpcy5tc2dJZFRvU3RyRm4obXNnSWQpO1xuICAgICAgICAvLyBDdXJyZW50IHB1Ymxpc2ggb3B0IHRha2VzIHByZWNlZGVuY2UgZ2xvYmFsIG9wdHMsIHdoaWxlIHByZXNlcnZpbmcgZmFsc2UgdmFsdWVcbiAgICAgICAgY29uc3QgaWdub3JlRHVwbGljYXRlUHVibGlzaEVycm9yID0gb3B0cz8uaWdub3JlRHVwbGljYXRlUHVibGlzaEVycm9yID8/IHRoaXMub3B0cy5pZ25vcmVEdXBsaWNhdGVQdWJsaXNoRXJyb3I7XG4gICAgICAgIGlmICh0aGlzLnNlZW5DYWNoZS5oYXMobXNnSWRTdHIpKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBXZSBkb24ndCByZS1wdWJsaXNoIG1lc3NhZ2VzIHRoYXQgaGF2ZSBhbHJlYWR5XG4gICAgICAgICAgICAvLyBiZWVuIHB1Ymxpc2hlZCBvbiB0aGUgbmV0d29yay5cbiAgICAgICAgICAgIGlmIChpZ25vcmVEdXBsaWNhdGVQdWJsaXNoRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uUHVibGlzaER1cGxpY2F0ZU1zZyh0b3BpYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVjaXBpZW50czogW10gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IEVycm9yKCdQdWJsaXNoRXJyb3IuRHVwbGljYXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB0b3NlbmQsIHRvc2VuZENvdW50IH0gPSB0aGlzLnNlbGVjdFBlZXJzVG9QdWJsaXNoKHRvcGljKTtcbiAgICAgICAgY29uc3Qgd2lsbFNlbmRUb1NlbGYgPSB0aGlzLm9wdHMuZW1pdFNlbGYgJiYgdGhpcy5zdWJzY3JpcHRpb25zLmhhcyh0b3BpYyk7XG4gICAgICAgIC8vIEN1cnJlbnQgcHVibGlzaCBvcHQgdGFrZXMgcHJlY2VkZW5jZSBnbG9iYWwgb3B0cywgd2hpbGUgcHJlc2VydmluZyBmYWxzZSB2YWx1ZVxuICAgICAgICBjb25zdCBhbGxvd1B1Ymxpc2hUb1plcm9QZWVycyA9IG9wdHM/LmFsbG93UHVibGlzaFRvWmVyb1BlZXJzID8/IHRoaXMub3B0cy5hbGxvd1B1Ymxpc2hUb1plcm9QZWVycztcbiAgICAgICAgaWYgKHRvc2VuZC5zaXplID09PSAwICYmICFhbGxvd1B1Ymxpc2hUb1plcm9QZWVycyAmJiAhd2lsbFNlbmRUb1NlbGYpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdQdWJsaXNoRXJyb3IuSW5zdWZmaWNpZW50UGVlcnMnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpc24ndCBhIGR1cGxpY2F0ZSBhbmQgd2UgaGF2ZSBzZW50IGl0IHRvIHNvbWUgcGVlcnMgYWRkIGl0IHRvIHRoZVxuICAgICAgICAvLyBkdXBsaWNhdGUgY2FjaGUgYW5kIG1lbWNhY2hlLlxuICAgICAgICB0aGlzLnNlZW5DYWNoZS5wdXQobXNnSWRTdHIpO1xuICAgICAgICAvLyBhbGwgcHVibGlzaGVkIG1lc3NhZ2VzIGFyZSB2YWxpZFxuICAgICAgICB0aGlzLm1jYWNoZS5wdXQoeyBtc2dJZCwgbXNnSWRTdHIgfSwgcmF3TXNnLCB0cnVlKTtcbiAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgYW5vbnltb3VzIG9yIGhhcyBhIHJhbmRvbSBhdXRob3IgYWRkIGl0IHRvIHRoZSBwdWJsaXNoZWQgbWVzc2FnZSBpZHMgY2FjaGUuXG4gICAgICAgIHRoaXMucHVibGlzaGVkTWVzc2FnZUlkcy5wdXQobXNnSWRTdHIpO1xuICAgICAgICBjb25zdCBiYXRjaFB1Ymxpc2ggPSBvcHRzPy5iYXRjaFB1Ymxpc2ggPz8gdGhpcy5vcHRzLmJhdGNoUHVibGlzaDtcbiAgICAgICAgY29uc3QgcnBjID0gY3JlYXRlR29zc2lwUnBjKFtyYXdNc2ddKTtcbiAgICAgICAgaWYgKGJhdGNoUHVibGlzaCkge1xuICAgICAgICAgICAgdGhpcy5zZW5kUnBjSW5CYXRjaCh0b3NlbmQsIHJwYyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBTZW5kIHRvIHNldCBvZiBwZWVycyBhZ2dyZWdhdGVkIGZyb20gZGlyZWN0LCBtZXNoLCBmYW5vdXRcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgdG9zZW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VuZFJwYyBtYXkgbXV0YXRlIFJQQyBtZXNzYWdlIG9uIHBpZ2d5YmFjaywgY3JlYXRlIGEgbmV3IG1lc3NhZ2UgZm9yIGVhY2ggcGVlclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbnQgPSB0aGlzLnNlbmRScGMoaWQsIHJwYyk7XG4gICAgICAgICAgICAgICAgLy8gZGlkIG5vdCBhY3R1YWxseSBzZW5kIHRoZSBtZXNzYWdlXG4gICAgICAgICAgICAgICAgaWYgKCFzZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRvc2VuZC5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0TXM7XG4gICAgICAgIHRoaXMubWV0cmljcz8ub25QdWJsaXNoTXNnKHRvcGljLCB0b3NlbmRDb3VudCwgdG9zZW5kLnNpemUsIHJhd01zZy5kYXRhICE9IG51bGwgPyByYXdNc2cuZGF0YS5sZW5ndGggOiAwLCBkdXJhdGlvbk1zKTtcbiAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIG1lc3NhZ2UgdG8gdGhlIHVzZXIgaWYgd2UgYXJlIHN1YnNjcmliZWQgdG8gdGhlIHRvcGljXG4gICAgICAgIGlmICh3aWxsU2VuZFRvU2VsZikge1xuICAgICAgICAgICAgdG9zZW5kLmFkZCh0aGlzLmNvbXBvbmVudHMucGVlcklkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgc3VwZXIuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dvc3NpcHN1YjptZXNzYWdlJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGlvblNvdXJjZTogdGhpcy5jb21wb25lbnRzLnBlZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgbXNnSWQ6IG1zZ0lkU3RyLFxuICAgICAgICAgICAgICAgICAgICBtc2dcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBBZGQgb3B0aW9uIHRvIHN3aXRjaCBiZXR3ZWVuIGVtaXQgcGVyIHRvcGljIG9yIGFsbCBtZXNzYWdlcyBpbiBvbmVcbiAgICAgICAgICAgIHN1cGVyLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtZXNzYWdlJywgeyBkZXRhaWw6IG1zZyB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IEFycmF5LmZyb20odG9zZW5kLnZhbHVlcygpKS5tYXAoKHN0cikgPT4gcGVlcklkRnJvbVN0cmluZyhzdHIpKVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIHRoZSBzYW1lIGRhdGEgaW4gYmF0Y2ggdG8gdG9zZW5kIGxpc3Qgd2l0aG91dCBjb25zaWRlcmluZyBjYWNoZWQgY29udHJvbCBtZXNzYWdlc1xuICAgICAqIFRoaXMgaXMgbm90IG9ubHkgZmFzdGVyIGJ1dCBhbHNvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBlYWNoIHBlZXJcbiAgICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0NoYWluU2FmZS9qcy1saWJwMnAtZ29zc2lwc3ViL2lzc3Vlcy8zNDRcbiAgICAgKi9cbiAgICBzZW5kUnBjSW5CYXRjaCh0b3NlbmQsIHJwYykge1xuICAgICAgICBjb25zdCBycGNCeXRlcyA9IFJQQy5lbmNvZGUocnBjKTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWREYXRhID0gZW5jb2RlLnNpbmdsZShycGNCeXRlcyk7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgdG9zZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRib3VuZFN0cmVhbSA9IHRoaXMuc3RyZWFtc091dGJvdW5kLmdldChpZCk7XG4gICAgICAgICAgICBpZiAob3V0Ym91bmRTdHJlYW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nKGBDYW5ub3Qgc2VuZCBSUEMgdG8gJHtpZH0gYXMgdGhlcmUgaXMgbm8gb3BlbiBzdHJlYW0gdG8gaXQgYXZhaWxhYmxlYCk7XG4gICAgICAgICAgICAgICAgdG9zZW5kLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG91dGJvdW5kU3RyZWFtLnB1c2hQcmVmaXhlZChwcmVmaXhlZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0b3NlbmQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihgQ2Fubm90IHNlbmQgcnBjIHRvICR7aWR9YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uUnBjU2VudChycGMsIHJwY0J5dGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYGFzeW5jVmFsaWRhdGlvbmAgaXMgYHRydWVgIGFmdGVyXG4gICAgICogdGhlIG1lc3NhZ2UgZ290IHZhbGlkYXRlZCBieSB0aGUgY2FsbGVyLiBNZXNzYWdlcyBhcmUgc3RvcmVkIGluIHRoZSBgbWNhY2hlYCBhbmRcbiAgICAgKiB2YWxpZGF0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIGZhc3QgZW5vdWdoIHRoYXQgdGhlIG1lc3NhZ2VzIHNob3VsZCBzdGlsbCBleGlzdCBpbiB0aGUgY2FjaGUuXG4gICAgICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhbGlkYXRpb24gb3V0Y29tZXMgYW5kIHRoZSBvdXRjb21lIGlzIGdpdmVuIGluIGFjY2VwdGFuY2UuXG4gICAgICpcbiAgICAgKiBJZiBhY2NlcHRhbmNlID0gYE1lc3NhZ2VBY2NlcHRhbmNlLkFjY2VwdGAgdGhlIG1lc3NhZ2Ugd2lsbCBnZXQgcHJvcGFnYXRlZCB0byB0aGVcbiAgICAgKiBuZXR3b3JrLiBUaGUgYHByb3BhZ2F0aW9uX3NvdXJjZWAgcGFyYW1ldGVyIGluZGljYXRlcyB3aG8gdGhlIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGJ5IGFuZFxuICAgICAqIHdpbGwgbm90IGJlIGZvcndhcmRlZCBiYWNrIHRvIHRoYXQgcGVlci5cbiAgICAgKlxuICAgICAqIElmIGFjY2VwdGFuY2UgPSBgTWVzc2FnZUFjY2VwdGFuY2UuUmVqZWN0YCB0aGUgbWVzc2FnZSB3aWxsIGJlIGRlbGV0ZWQgZnJvbSB0aGUgbWVtY2FjaGVcbiAgICAgKiBhbmQgdGhlIFDigoQgcGVuYWx0eSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGBwcm9wYWdhdGlvblNvdXJjZWAuXG4gICAgICpcbiAgICAgKiBJZiBhY2NlcHRhbmNlID0gYE1lc3NhZ2VBY2NlcHRhbmNlLklnbm9yZWAgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBkZWxldGVkIGZyb20gdGhlIG1lbWNhY2hlXG4gICAgICogYnV0IG5vIFDigoQgcGVuYWx0eSB3aWxsIGJlIGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIG1lc3NhZ2Ugd2FzIGZvdW5kIGluIHRoZSBjYWNoZSBhbmQgZmFsc2UgaWYgd2FzIG5vdFxuICAgICAqIGluIHRoZSBjYWNoZSBhbnltb3JlLlxuICAgICAqXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgbWVzc2FnZS5cbiAgICAgKi9cbiAgICByZXBvcnRNZXNzYWdlVmFsaWRhdGlvblJlc3VsdChtc2dJZCwgcHJvcGFnYXRpb25Tb3VyY2UsIGFjY2VwdGFuY2UpIHtcbiAgICAgICAgbGV0IGNhY2hlRW50cnk7XG4gICAgICAgIGlmIChhY2NlcHRhbmNlID09PSBUb3BpY1ZhbGlkYXRvclJlc3VsdC5BY2NlcHQpIHtcbiAgICAgICAgICAgIGNhY2hlRW50cnkgPSB0aGlzLm1jYWNoZS52YWxpZGF0ZShtc2dJZCk7XG4gICAgICAgICAgICBpZiAoY2FjaGVFbnRyeSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlOiByYXdNc2csIG9yaWdpbmF0aW5nUGVlcnMgfSA9IGNhY2hlRW50cnk7XG4gICAgICAgICAgICAgICAgLy8gbWVzc2FnZSBpcyBmdWxseSB2YWxpZGF0ZWQgaW5mb3JtIHBlZXJfc2NvcmVcbiAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLmRlbGl2ZXJNZXNzYWdlKHByb3BhZ2F0aW9uU291cmNlLCBtc2dJZCwgcmF3TXNnLnRvcGljKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcndhcmRNZXNzYWdlKG1zZ0lkLCBjYWNoZUVudHJ5Lm1lc3NhZ2UsIHByb3BhZ2F0aW9uU291cmNlLCBvcmlnaW5hdGluZ1BlZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UsIE1lc3NhZ2Ugbm90IGluIGNhY2hlLiBJZ25vcmluZyBmb3J3YXJkaW5nXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2JyYWNlLXN0eWxlXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90IHZhbGlkXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVFbnRyeSA9IHRoaXMubWNhY2hlLnJlbW92ZShtc2dJZCk7XG4gICAgICAgICAgICBpZiAoY2FjaGVFbnRyeSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVqZWN0UmVhc29uID0gcmVqZWN0UmVhc29uRnJvbUFjY2VwdGFuY2UoYWNjZXB0YW5jZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlOiByYXdNc2csIG9yaWdpbmF0aW5nUGVlcnMgfSA9IGNhY2hlRW50cnk7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCBwZWVyX3Njb3JlIGFib3V0IHJlamVjdFxuICAgICAgICAgICAgICAgIC8vIFJlamVjdCB0aGUgb3JpZ2luYWwgc291cmNlLCBhbmQgYW55IGR1cGxpY2F0ZXMgd2UndmUgc2VlbiBmcm9tIG90aGVyIHBlZXJzLlxuICAgICAgICAgICAgICAgIHRoaXMuc2NvcmUucmVqZWN0TWVzc2FnZShwcm9wYWdhdGlvblNvdXJjZSwgbXNnSWQsIHJhd01zZy50b3BpYywgcmVqZWN0UmVhc29uKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBlZXIgb2Ygb3JpZ2luYXRpbmdQZWVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLnJlamVjdE1lc3NhZ2UocGVlciwgbXNnSWQsIHJhd01zZy50b3BpYywgcmVqZWN0UmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlLCBNZXNzYWdlIG5vdCBpbiBjYWNoZS4gSWdub3JpbmcgZm9yd2FyZGluZ1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0U2VlblRpbWVzdGFtcE1zID0gdGhpcy5zY29yZS5tZXNzYWdlRmlyc3RTZWVuVGltZXN0YW1wTXMobXNnSWQpO1xuICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uUmVwb3J0VmFsaWRhdGlvbihjYWNoZUVudHJ5LCBhY2NlcHRhbmNlLCBmaXJzdFNlZW5UaW1lc3RhbXBNcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgR1JBRlQgbWVzc2FnZSB0byBhIHBlZXJcbiAgICAgKi9cbiAgICBzZW5kR3JhZnQoaWQsIHRvcGljKSB7XG4gICAgICAgIGNvbnN0IGdyYWZ0ID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRvcGljSUQ6IHRvcGljXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG91dCA9IGNyZWF0ZUdvc3NpcFJwYyhbXSwgeyBncmFmdCB9KTtcbiAgICAgICAgdGhpcy5zZW5kUnBjKGlkLCBvdXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIFBSVU5FIG1lc3NhZ2UgdG8gYSBwZWVyXG4gICAgICovXG4gICAgYXN5bmMgc2VuZFBydW5lKGlkLCB0b3BpYykge1xuICAgICAgICAvLyB0aGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gbGVhdmUoKSBmdW5jdGlvblxuICAgICAgICBjb25zdCBvblVuc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcHJ1bmUgPSBbYXdhaXQgdGhpcy5tYWtlUHJ1bmUoaWQsIHRvcGljLCB0aGlzLm9wdHMuZG9QWCwgb25VbnN1YnNjcmliZSldO1xuICAgICAgICBjb25zdCBvdXQgPSBjcmVhdGVHb3NzaXBScGMoW10sIHsgcHJ1bmUgfSk7XG4gICAgICAgIHRoaXMuc2VuZFJwYyhpZCwgb3V0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZCBhbiBycGMgb2JqZWN0IHRvIGEgcGVlclxuICAgICAqL1xuICAgIHNlbmRScGMoaWQsIHJwYykge1xuICAgICAgICBjb25zdCBvdXRib3VuZFN0cmVhbSA9IHRoaXMuc3RyZWFtc091dGJvdW5kLmdldChpZCk7XG4gICAgICAgIGlmIChvdXRib3VuZFN0cmVhbSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvZyhgQ2Fubm90IHNlbmQgUlBDIHRvICR7aWR9IGFzIHRoZXJlIGlzIG5vIG9wZW4gc3RyZWFtIHRvIGl0IGF2YWlsYWJsZWApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBpZ2d5YmFjayBjb250cm9sIG1lc3NhZ2UgcmV0cmllc1xuICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5jb250cm9sLmdldChpZCk7XG4gICAgICAgIGlmIChjdHJsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucGlnZ3liYWNrQ29udHJvbChpZCwgcnBjLCBjdHJsKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5kZWxldGUoaWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBpZ2d5YmFjayBnb3NzaXBcbiAgICAgICAgY29uc3QgaWhhdmUgPSB0aGlzLmdvc3NpcC5nZXQoaWQpO1xuICAgICAgICBpZiAoaWhhdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5waWdneWJhY2tHb3NzaXAoaWQsIHJwYywgaWhhdmUpO1xuICAgICAgICAgICAgdGhpcy5nb3NzaXAuZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBycGNCeXRlcyA9IFJQQy5lbmNvZGUocnBjKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG91dGJvdW5kU3RyZWFtLnB1c2gocnBjQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihgQ2Fubm90IHNlbmQgcnBjIHRvICR7aWR9YCwgZSk7XG4gICAgICAgICAgICAvLyBpZiB0aGUgcGVlciBoYWQgY29udHJvbCBtZXNzYWdlcyBvciBnb3NzaXAsIHJlLWF0dGFjaFxuICAgICAgICAgICAgaWYgKGN0cmwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXQoaWQsIGN0cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGloYXZlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvc3NpcC5zZXQoaWQsIGloYXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldHJpY3M/Lm9uUnBjU2VudChycGMsIHJwY0J5dGVzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKiogTXV0YXRlcyBgb3V0UnBjYCBhZGRpbmcgZ3JhZnQgYW5kIHBydW5lIGNvbnRyb2wgbWVzc2FnZXMgKi9cbiAgICBwaWdneWJhY2tDb250cm9sKGlkLCBvdXRScGMsIGN0cmwpIHtcbiAgICAgICAgY29uc3QgcnBjID0gZW5zdXJlQ29udHJvbChvdXRScGMpO1xuICAgICAgICBmb3IgKGNvbnN0IGdyYWZ0IG9mIGN0cmwuZ3JhZnQpIHtcbiAgICAgICAgICAgIGlmIChncmFmdC50b3BpY0lEICE9IG51bGwgJiYgKHRoaXMubWVzaC5nZXQoZ3JhZnQudG9waWNJRCk/LmhhcyhpZCkgPz8gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgcnBjLmNvbnRyb2wuZ3JhZnQucHVzaChncmFmdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcnVuZSBvZiBjdHJsLnBydW5lKSB7XG4gICAgICAgICAgICBpZiAocHJ1bmUudG9waWNJRCAhPSBudWxsICYmICEodGhpcy5tZXNoLmdldChwcnVuZS50b3BpY0lEKT8uaGFzKGlkKSA/PyBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBycGMuY29udHJvbC5wcnVuZS5wdXNoKHBydW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogTXV0YXRlcyBgb3V0UnBjYCBhZGRpbmcgaWhhdmUgY29udHJvbCBtZXNzYWdlcyAqL1xuICAgIHBpZ2d5YmFja0dvc3NpcChpZCwgb3V0UnBjLCBpaGF2ZSkge1xuICAgICAgICBjb25zdCBycGMgPSBlbnN1cmVDb250cm9sKG91dFJwYyk7XG4gICAgICAgIHJwYy5jb250cm9sLmloYXZlID0gaWhhdmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmQgZ3JhZnQgYW5kIHBydW5lIG1lc3NhZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdG9ncmFmdCAtIHBlZXIgaWQgPT4gdG9waWNbXVxuICAgICAqIEBwYXJhbSB0b3BydW5lIC0gcGVlciBpZCA9PiB0b3BpY1tdXG4gICAgICovXG4gICAgYXN5bmMgc2VuZEdyYWZ0UHJ1bmUodG9ncmFmdCwgdG9wcnVuZSwgbm9QWCkge1xuICAgICAgICBjb25zdCBkb1BYID0gdGhpcy5vcHRzLmRvUFg7XG4gICAgICAgIGNvbnN0IG9uVW5zdWJzY3JpYmUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIHRvcGljc10gb2YgdG9ncmFmdCkge1xuICAgICAgICAgICAgY29uc3QgZ3JhZnQgPSB0b3BpY3MubWFwKCh0b3BpY0lEKSA9PiAoeyB0b3BpY0lEIH0pKTtcbiAgICAgICAgICAgIGxldCBwcnVuZSA9IFtdO1xuICAgICAgICAgICAgLy8gSWYgYSBwZWVyIGFsc28gaGFzIHBydW5lcywgcHJvY2VzcyB0aGVtIG5vd1xuICAgICAgICAgICAgY29uc3QgcHJ1bmluZyA9IHRvcHJ1bmUuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmIChwcnVuaW5nICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwcnVuZSA9IGF3YWl0IFByb21pc2UuYWxsKHBydW5pbmcubWFwKGFzeW5jICh0b3BpY0lEKSA9PiB0aGlzLm1ha2VQcnVuZShpZCwgdG9waWNJRCwgZG9QWCAmJiAhKG5vUFguZ2V0KGlkKSA/PyBmYWxzZSksIG9uVW5zdWJzY3JpYmUpKSk7XG4gICAgICAgICAgICAgICAgdG9wcnVuZS5kZWxldGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZW5kUnBjKGlkLCBjcmVhdGVHb3NzaXBScGMoW10sIHsgZ3JhZnQsIHBydW5lIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgdG9waWNzXSBvZiB0b3BydW5lKSB7XG4gICAgICAgICAgICBjb25zdCBwcnVuZSA9IGF3YWl0IFByb21pc2UuYWxsKHRvcGljcy5tYXAoYXN5bmMgKHRvcGljSUQpID0+IHRoaXMubWFrZVBydW5lKGlkLCB0b3BpY0lELCBkb1BYICYmICEobm9QWC5nZXQoaWQpID8/IGZhbHNlKSwgb25VbnN1YnNjcmliZSkpKTtcbiAgICAgICAgICAgIHRoaXMuc2VuZFJwYyhpZCwgY3JlYXRlR29zc2lwUnBjKFtdLCB7IHBydW5lIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0cyBnb3NzaXAgLSBTZW5kIElIQVZFIG1lc3NhZ2VzIHRvIGEgcmFuZG9tIHNldCBvZiBnb3NzaXAgcGVlcnNcbiAgICAgKi9cbiAgICBlbWl0R29zc2lwKHBlZXJzVG9Hb3NzaXBCeVRvcGljKSB7XG4gICAgICAgIGNvbnN0IGdvc3NpcElEc0J5VG9waWMgPSB0aGlzLm1jYWNoZS5nZXRHb3NzaXBJRHMobmV3IFNldChwZWVyc1RvR29zc2lwQnlUb3BpYy5rZXlzKCkpKTtcbiAgICAgICAgZm9yIChjb25zdCBbdG9waWMsIHBlZXJzVG9Hb3NzaXBdIG9mIHBlZXJzVG9Hb3NzaXBCeVRvcGljKSB7XG4gICAgICAgICAgICB0aGlzLmRvRW1pdEdvc3NpcCh0b3BpYywgcGVlcnNUb0dvc3NpcCwgZ29zc2lwSURzQnlUb3BpYy5nZXQodG9waWMpID8/IFtdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kIGdvc3NpcCBtZXNzYWdlcyB0byBHb3NzaXBGYWN0b3IgcGVlcnMgYWJvdmUgdGhyZXNob2xkIHdpdGggYSBtaW5pbXVtIG9mIERfbGF6eVxuICAgICAqIFBlZXJzIGFyZSByYW5kb21seSBzZWxlY3RlZCBmcm9tIHRoZSBoZWFydGJlYXQgd2hpY2ggZXhjbHVkZSBtZXNoICsgZmFub3V0IHBlZXJzXG4gICAgICogV2UgYWxzbyBleGNsdWRlIGRpcmVjdCBwZWVycywgYXMgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGVtaXQgZ29zc2lwIHRvIHRoZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0b3BpY1xuICAgICAqIEBwYXJhbSBjYW5kaWRhdGVUb0dvc3NpcCAtIHBlZXJzIHRvIGdvc3NpcFxuICAgICAqIEBwYXJhbSBtZXNzYWdlSURzIC0gbWVzc2FnZSBpZHMgdG8gZ29zc2lwXG4gICAgICovXG4gICAgZG9FbWl0R29zc2lwKHRvcGljLCBjYW5kaWRhdGVUb0dvc3NpcCwgbWVzc2FnZUlEcykge1xuICAgICAgICBpZiAobWVzc2FnZUlEcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaHVmZmxlIHRvIGVtaXQgaW4gcmFuZG9tIG9yZGVyXG4gICAgICAgIHNodWZmbGUobWVzc2FnZUlEcyk7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBlbWl0dGluZyBtb3JlIHRoYW4gR29zc2lwc3ViTWF4SUhhdmVMZW5ndGggaWRzLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgICAgICBpZiAobWVzc2FnZUlEcy5sZW5ndGggPiBjb25zdGFudHMuR29zc2lwc3ViTWF4SUhhdmVMZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvIHRoZSB0cnVuY2F0aW9uICh3aXRoIHNodWZmbGluZykgcGVyIHBlZXIgYmVsb3dcbiAgICAgICAgICAgIHRoaXMubG9nKCd0b28gbWFueSBtZXNzYWdlcyBmb3IgZ29zc2lwOyB3aWxsIHRydW5jYXRlIElIQVZFIGxpc3QgKCVkIG1lc3NhZ2VzKScsIG1lc3NhZ2VJRHMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuZGlkYXRlVG9Hb3NzaXAuc2l6ZSA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHRhcmdldCA9IHRoaXMub3B0cy5EbGF6eTtcbiAgICAgICAgY29uc3QgZmFjdG9yID0gY29uc3RhbnRzLkdvc3NpcHN1Ykdvc3NpcEZhY3RvciAqIGNhbmRpZGF0ZVRvR29zc2lwLnNpemU7XG4gICAgICAgIGxldCBwZWVyc1RvR29zc2lwID0gY2FuZGlkYXRlVG9Hb3NzaXA7XG4gICAgICAgIGlmIChmYWN0b3IgPiB0YXJnZXQpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IGZhY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0ID4gcGVlcnNUb0dvc3NpcC5zaXplKSB7XG4gICAgICAgICAgICB0YXJnZXQgPSBwZWVyc1RvR29zc2lwLnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBvbmx5IHNodWZmbGUgaWYgbmVlZGVkXG4gICAgICAgICAgICBwZWVyc1RvR29zc2lwID0gc2h1ZmZsZShBcnJheS5mcm9tKHBlZXJzVG9Hb3NzaXApKS5zbGljZSgwLCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVtaXQgdGhlIElIQVZFIGdvc3NpcCB0byB0aGUgc2VsZWN0ZWQgcGVlcnMgdXAgdG8gdGhlIHRhcmdldFxuICAgICAgICBwZWVyc1RvR29zc2lwLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGVlck1lc3NhZ2VJRHMgPSBtZXNzYWdlSURzO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VJRHMubGVuZ3RoID4gY29uc3RhbnRzLkdvc3NpcHN1Yk1heElIYXZlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gc2h1ZmZsZSBhbmQgc2xpY2UgbWVzc2FnZSBJRHMgcGVyIHBlZXIgc28gdGhhdCB3ZSBlbWl0IGEgZGlmZmVyZW50IHNldCBmb3IgZWFjaCBwZWVyXG4gICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBlbm91Z2ggcmVkdW5jYW5jeSBpbiB0aGUgc3lzdGVtIHRoYXQgdGhpcyB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGhlIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAvLyBjb3ZlcmFnZSB3aGVuIHdlIGRvIHRydW5jYXRlXG4gICAgICAgICAgICAgICAgcGVlck1lc3NhZ2VJRHMgPSBzaHVmZmxlKHBlZXJNZXNzYWdlSURzLnNsaWNlKCkpLnNsaWNlKDAsIGNvbnN0YW50cy5Hb3NzaXBzdWJNYXhJSGF2ZUxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnB1c2hHb3NzaXAoaWQsIHtcbiAgICAgICAgICAgICAgICB0b3BpY0lEOiB0b3BpYyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSURzOiBwZWVyTWVzc2FnZUlEc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGbHVzaCBnb3NzaXAgYW5kIGNvbnRyb2wgbWVzc2FnZXNcbiAgICAgKi9cbiAgICBmbHVzaCgpIHtcbiAgICAgICAgLy8gc2VuZCBnb3NzaXAgZmlyc3QsIHdoaWNoIHdpbGwgYWxzbyBwaWdneWJhY2sgY29udHJvbFxuICAgICAgICBmb3IgKGNvbnN0IFtwZWVyLCBpaGF2ZV0gb2YgdGhpcy5nb3NzaXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICB0aGlzLmdvc3NpcC5kZWxldGUocGVlcik7XG4gICAgICAgICAgICB0aGlzLnNlbmRScGMocGVlciwgY3JlYXRlR29zc2lwUnBjKFtdLCB7IGloYXZlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZW5kIHRoZSByZW1haW5pbmcgY29udHJvbCBtZXNzYWdlc1xuICAgICAgICBmb3IgKGNvbnN0IFtwZWVyLCBjb250cm9sXSBvZiB0aGlzLmNvbnRyb2wuZW50cmllcygpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZGVsZXRlKHBlZXIpO1xuICAgICAgICAgICAgY29uc3Qgb3V0ID0gY3JlYXRlR29zc2lwUnBjKFtdLCB7IGdyYWZ0OiBjb250cm9sLmdyYWZ0LCBwcnVuZTogY29udHJvbC5wcnVuZSB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VuZFJwYyhwZWVyLCBvdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgbmV3IElIQVZFIG1lc3NhZ2VzIHRvIHBlbmRpbmcgZ29zc2lwXG4gICAgICovXG4gICAgcHVzaEdvc3NpcChpZCwgY29udHJvbElIYXZlTXNncykge1xuICAgICAgICB0aGlzLmxvZygnQWRkIGdvc3NpcCB0byAlcycsIGlkKTtcbiAgICAgICAgY29uc3QgZ29zc2lwID0gdGhpcy5nb3NzaXAuZ2V0KGlkKSA/PyBbXTtcbiAgICAgICAgdGhpcy5nb3NzaXAuc2V0KGlkLCBnb3NzaXAuY29uY2F0KGNvbnRyb2xJSGF2ZU1zZ3MpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZSBhIFBSVU5FIGNvbnRyb2wgbWVzc2FnZSBmb3IgYSBwZWVyIGluIGEgdG9waWNcbiAgICAgKi9cbiAgICBhc3luYyBtYWtlUHJ1bmUoaWQsIHRvcGljLCBkb1BYLCBvblVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHRoaXMuc2NvcmUucHJ1bmUoaWQsIHRvcGljKTtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWFtc091dGJvdW5kLmdldChpZCk/LnByb3RvY29sID09PSBjb25zdGFudHMuR29zc2lwc3ViSUR2MTApIHtcbiAgICAgICAgICAgIC8vIEdvc3NpcHN1YiB2MS4wIC0tIG5vIGJhY2tvZmYsIHRoZSBwZWVyIHdvbid0IGJlIGFibGUgdG8gcGFyc2UgaXQgYW55d2F5XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRvcGljSUQ6IHRvcGljLFxuICAgICAgICAgICAgICAgIHBlZXJzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBiYWNrb2ZmIGlzIG1lYXN1cmVkIGluIHNlY29uZHNcbiAgICAgICAgLy8gR29zc2lwc3ViUHJ1bmVCYWNrb2ZmIGFuZCBHb3NzaXBzdWJVbnN1YnNjcmliZUJhY2tvZmYgYXJlIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kc1xuICAgICAgICAvLyBUaGUgcHJvdG9idWYgaGFzIGl0IGFzIGEgdWludDY0XG4gICAgICAgIGNvbnN0IGJhY2tvZmZNcyA9IG9uVW5zdWJzY3JpYmUgPyB0aGlzLm9wdHMudW5zdWJjcmliZUJhY2tvZmYgOiB0aGlzLm9wdHMucHJ1bmVCYWNrb2ZmO1xuICAgICAgICBjb25zdCBiYWNrb2ZmID0gYmFja29mZk1zIC8gMTAwMDtcbiAgICAgICAgdGhpcy5kb0FkZEJhY2tvZmYoaWQsIHRvcGljLCBiYWNrb2ZmTXMpO1xuICAgICAgICBpZiAoIWRvUFgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdG9waWNJRDogdG9waWMsXG4gICAgICAgICAgICAgICAgcGVlcnM6IFtdLFxuICAgICAgICAgICAgICAgIGJhY2tvZmZcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2VsZWN0IHBlZXJzIGZvciBQZWVyIGVYY2hhbmdlXG4gICAgICAgIGNvbnN0IHBlZXJzID0gdGhpcy5nZXRSYW5kb21Hb3NzaXBQZWVycyh0b3BpYywgdGhpcy5vcHRzLnBydW5lUGVlcnMsICh4aWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4aWQgIT09IGlkICYmIHRoaXMuc2NvcmUuc2NvcmUoeGlkKSA+PSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHggPSBhd2FpdCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHBlZXJzKS5tYXAoYXN5bmMgKHBlZXJJZCkgPT4ge1xuICAgICAgICAgICAgLy8gc2VlIGlmIHdlIGhhdmUgYSBzaWduZWQgcmVjb3JkIHRvIHNlbmQgYmFjazsgaWYgd2UgZG9uJ3QsIGp1c3Qgc2VuZFxuICAgICAgICAgICAgLy8gdGhlIHBlZXIgSUQgYW5kIGxldCB0aGUgcHJ1bmVkIHBlZXIgZmluZCB0aGVtIGluIHRoZSBESFQgLS0gd2UgY2FuJ3QgdHJ1c3RcbiAgICAgICAgICAgIC8vIHVuc2lnbmVkIGFkZHJlc3MgcmVjb3JkcyB0aHJvdWdoIFBYIGFueXdheXNcbiAgICAgICAgICAgIC8vIEZpbmRpbmcgc2lnbmVkIHJlY29yZHMgaW4gdGhlIERIVCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgaW4ganMtbGlicDJwXG4gICAgICAgICAgICBjb25zdCBpZCA9IHBlZXJJZEZyb21TdHJpbmcocGVlcklkKTtcbiAgICAgICAgICAgIGxldCBwZWVySW5mbztcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGVlckluZm8gPSBhd2FpdCB0aGlzLmNvbXBvbmVudHMucGVlclN0b3JlLmdldChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRVJSX05PVF9GT1VORCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGVlcklEOiBpZC50b0J5dGVzKCksXG4gICAgICAgICAgICAgICAgc2lnbmVkUGVlclJlY29yZDogcGVlckluZm8/LnBlZXJSZWNvcmRFbnZlbG9wZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9waWNJRDogdG9waWMsXG4gICAgICAgICAgICBwZWVyczogcHgsXG4gICAgICAgICAgICBiYWNrb2ZmXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJ1bkhlYXJ0YmVhdCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm1ldHJpY3M/LmhlYXJ0YmVhdER1cmF0aW9uLnN0YXJ0VGltZXIoKTtcbiAgICAgICAgdGhpcy5oZWFydGJlYXQoKVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdFcnJvciBydW5uaW5nIGhlYXJ0YmVhdCcsIGVycik7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRpbWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBydW4gaWYgc3RpbGwgaW4gc3RhcnRlZCBzdGF0dXNcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cy5jb2RlID09PSBHb3NzaXBTdGF0dXNDb2RlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lb3V0IGJlZm9yZSBvdmVyd3JpdGluZyBgc3RhdHVzLmhlYXJ0YmVhdFRpbWVvdXRgLCBpdCBzaG91bGQgYmUgY29tcGxldGVkIHRoby5cbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0dXMuaGVhcnRiZWF0VGltZW91dCk7XG4gICAgICAgICAgICAgICAgLy8gTm9kZUpTIHNldEludGVydmFsIGZ1bmN0aW9uIGlzIGlubmV4YWN0LCBjYWxscyBkcmlmdCBieSBhIGZldyBtaWxpc2Vjb25kcyBvbiBlYWNoIGNhbGwuXG4gICAgICAgICAgICAgICAgLy8gVG8gcnVuIHRoZSBoZWFydGJlYXQgcHJlY2lzZWx5IHNldFRpbWVvdXQoKSBtdXN0IGJlIHVzZWQgcmVjb21wdXRpbmcgdGhlIGRlbGF5IG9uIGV2ZXJ5IGxvb3AuXG4gICAgICAgICAgICAgICAgbGV0IG1zVG9OZXh0SGVhcnRiZWF0ID0gdGhpcy5vcHRzLmhlYXJ0YmVhdEludGVydmFsIC0gKChEYXRlLm5vdygpIC0gdGhpcy5zdGF0dXMuaGVhcmJlYXRTdGFydE1zKSAlIHRoaXMub3B0cy5oZWFydGJlYXRJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdG9vIGNsb3NlIHRvIG5leHQgaGVhcnRiZWF0LCBza2lwIG9uZVxuICAgICAgICAgICAgICAgIGlmIChtc1RvTmV4dEhlYXJ0YmVhdCA8IHRoaXMub3B0cy5oZWFydGJlYXRJbnRlcnZhbCAqIDAuMjUpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNUb05leHRIZWFydGJlYXQgKz0gdGhpcy5vcHRzLmhlYXJ0YmVhdEludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3M/LmhlYXJ0YmVhdFNraXBwZWQuaW5jKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzLmhlYXJ0YmVhdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMucnVuSGVhcnRiZWF0LCBtc1RvTmV4dEhlYXJ0YmVhdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogTWFpbnRhaW5zIHRoZSBtZXNoIGFuZCBmYW5vdXQgbWFwcyBpbiBnb3NzaXBzdWIuXG4gICAgICovXG4gICAgYXN5bmMgaGVhcnRiZWF0KCkge1xuICAgICAgICBjb25zdCB7IEQsIERsbywgRGhpLCBEc2NvcmUsIERvdXQsIGZhbm91dFRUTCB9ID0gdGhpcy5vcHRzO1xuICAgICAgICB0aGlzLmhlYXJ0YmVhdFRpY2tzKys7XG4gICAgICAgIC8vIGNhY2hlIHNjb3JlcyB0aHJvdWdodCB0aGUgaGVhcnRiZWF0XG4gICAgICAgIGNvbnN0IHNjb3JlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3QgZ2V0U2NvcmUgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGxldCBzID0gc2NvcmVzLmdldChpZCk7XG4gICAgICAgICAgICBpZiAocyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcyA9IHRoaXMuc2NvcmUuc2NvcmUoaWQpO1xuICAgICAgICAgICAgICAgIHNjb3Jlcy5zZXQoaWQsIHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH07XG4gICAgICAgIC8vIHBlZXIgaWQgPT4gdG9waWNbXVxuICAgICAgICBjb25zdCB0b2dyYWZ0ID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyBwZWVyIGlkID0+IHRvcGljW11cbiAgICAgICAgY29uc3QgdG9wcnVuZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgLy8gcGVlciBpZCA9PiBkb24ndCBweFxuICAgICAgICBjb25zdCBub1BYID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyBjbGVhbiB1cCBleHBpcmVkIGJhY2tvZmZzXG4gICAgICAgIHRoaXMuY2xlYXJCYWNrb2ZmKCk7XG4gICAgICAgIC8vIGNsZWFuIHVwIHBlZXJoYXZlL2lhc2tlZCBjb3VudGVyc1xuICAgICAgICB0aGlzLnBlZXJoYXZlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMubWV0cmljcz8uY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnaWFza2VkJyB9LCB0aGlzLmlhc2tlZC5zaXplKTtcbiAgICAgICAgdGhpcy5pYXNrZWQuY2xlYXIoKTtcbiAgICAgICAgLy8gYXBwbHkgSVdBTlQgcmVxdWVzdCBwZW5hbHRpZXNcbiAgICAgICAgdGhpcy5hcHBseUl3YW50UGVuYWx0aWVzKCk7XG4gICAgICAgIC8vIGVuc3VyZSBkaXJlY3QgcGVlcnMgYXJlIGNvbm5lY3RlZFxuICAgICAgICBpZiAodGhpcy5oZWFydGJlYXRUaWNrcyAlIHRoaXMub3B0cy5kaXJlY3RDb25uZWN0VGlja3MgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHdlIG9ubHkgZG8gdGhpcyBldmVyeSBmZXcgdGlja3MgdG8gYWxsb3cgcGVuZGluZyBjb25uZWN0aW9ucyB0byBjb21wbGV0ZSBhbmQgYWNjb3VudCBmb3IgcmVzdGFydHMvZG93bnRpbWVcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlyZWN0Q29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVYVFJBOiBQcnVuZSBjYWNoZXNcbiAgICAgICAgdGhpcy5mYXN0TXNnSWRDYWNoZT8ucHJ1bmUoKTtcbiAgICAgICAgdGhpcy5zZWVuQ2FjaGUucHJ1bmUoKTtcbiAgICAgICAgdGhpcy5nb3NzaXBUcmFjZXIucHJ1bmUoKTtcbiAgICAgICAgdGhpcy5wdWJsaXNoZWRNZXNzYWdlSWRzLnBydW5lKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbnN0ZWFkIG9mIGNhbGxpbmcgZ2V0UmFuZG9tR29zc2lwUGVlcnMgbXVsdGlwbGUgdGltZXMgdG86XG4gICAgICAgICAqICsgZ2V0IG1vcmUgbWVzaCBwZWVyc1xuICAgICAgICAgKiArIG1vcmUgb3V0Ym91bmQgcGVlcnNcbiAgICAgICAgICogKyBvcHBwb3J0dW5pc3RpYyBncmFmdGluZ1xuICAgICAgICAgKiArIGVtaXRHb3NzaXBcbiAgICAgICAgICpcbiAgICAgICAgICogV2Ugd2FudCB0byBsb29wIHRocm91Z2ggdGhlIHRvcGljIHBlZXJzIG9ubHkgYSBzaW5nbGUgdGltZSBhbmQgcHJlcGFyZSBnb3NzaXAgcGVlcnMgZm9yIGFsbCB0b3BpY3MgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2VcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHBlZXJzVG9Hb3NzaXBCeVRvcGljID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyBtYWludGFpbiB0aGUgbWVzaCBmb3IgdG9waWNzIHdlIGhhdmUgam9pbmVkXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgICAgIHRoaXMubWVzaC5mb3JFYWNoKChwZWVycywgdG9waWMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlZXJzSW5Ub3BpYyA9IHRoaXMudG9waWNzLmdldCh0b3BpYyk7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVNZXNoUGVlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBjb25zdCBwZWVyc1RvR29zc2lwID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgcGVlcnNUb0dvc3NpcEJ5VG9waWMuc2V0KHRvcGljLCBwZWVyc1RvR29zc2lwKTtcbiAgICAgICAgICAgIGlmIChwZWVyc0luVG9waWMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNodWZmbGVkUGVlcnMgPSBzaHVmZmxlKEFycmF5LmZyb20ocGVlcnNJblRvcGljKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFja29mZiA9IHRoaXMuYmFja29mZi5nZXQodG9waWMpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2h1ZmZsZWRQZWVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZWVyU3RyZWFtcyA9IHRoaXMuc3RyZWFtc091dGJvdW5kLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocGVlclN0cmVhbXMgIT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGljb2RlY3MuaW5jbHVkZXMocGVlclN0cmVhbXMucHJvdG9jb2wpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhcGVlcnMuaGFzKGlkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZGlyZWN0LmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3JlID0gZ2V0U2NvcmUoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoYmFja29mZiA9PSBudWxsKSB8fCAhYmFja29mZi5oYXMoaWQpKSAmJiBzY29yZSA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZU1lc2hQZWVycy5hZGQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBoYXZpbmcgdG8gZmluZCBnb3NzaXAgcGVlcnMgYWZ0ZXIgaGVhcnRiZWF0IHdoaWNoIHJlcXVpcmUgYW5vdGhlciBsb29wXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBwcmVwYXJlIHBlZXJzIHRvIGdvc3NpcCBpbiBhIHRvcGljIHdpdGhpbiBoZWFydGJlYXQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3JlID49IHRoaXMub3B0cy5zY29yZVRocmVzaG9sZHMuZ29zc2lwVGhyZXNob2xkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJzVG9Hb3NzaXAuYWRkKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHBydW5lL2dyYWZ0IGhlbHBlciBmdW5jdGlvbnMgKGRlZmluZWQgcGVyIHRvcGljKVxuICAgICAgICAgICAgY29uc3QgcHJ1bmVQZWVyID0gKGlkLCByZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZygnSEVBUlRCRUFUOiBSZW1vdmUgbWVzaCBsaW5rIHRvICVzIGluICVzJywgaWQsIHRvcGljKTtcbiAgICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBwZWVyIHNjb3JlIGhlcmUgYXMgd2UgZG8gaXQgaW4gbWFrZVBydW5lXG4gICAgICAgICAgICAgICAgLy8gYWRkIHBydW5lIGJhY2tvZmYgcmVjb3JkXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRCYWNrb2ZmKGlkLCB0b3BpYyk7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHBlZXIgZnJvbSBtZXNoXG4gICAgICAgICAgICAgICAgcGVlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICAvLyBhZnRlciBwcnVuaW5nIGEgcGVlciBmcm9tIG1lc2gsIHdlIHdhbnQgdG8gZ29zc2lwIHRvcGljIHRvIGl0IGlmIGl0cyBzY29yZSBtZWV0IHRoZSBnb3NzaXAgdGhyZXNob2xkXG4gICAgICAgICAgICAgICAgaWYgKGdldFNjb3JlKGlkKSA+PSB0aGlzLm9wdHMuc2NvcmVUaHJlc2hvbGRzLmdvc3NpcFRocmVzaG9sZClcbiAgICAgICAgICAgICAgICAgICAgcGVlcnNUb0dvc3NpcC5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25SZW1vdmVGcm9tTWVzaCh0b3BpYywgcmVhc29uLCAxKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgdG8gdG9wcnVuZVxuICAgICAgICAgICAgICAgIGNvbnN0IHRvcGljcyA9IHRvcHJ1bmUuZ2V0KGlkKTtcbiAgICAgICAgICAgICAgICBpZiAodG9waWNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wcnVuZS5zZXQoaWQsIFt0b3BpY10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9waWNzLnB1c2godG9waWMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBncmFmdFBlZXIgPSAoaWQsIHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nKCdIRUFSVEJFQVQ6IEFkZCBtZXNoIGxpbmsgdG8gJXMgaW4gJXMnLCBpZCwgdG9waWMpO1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBwZWVyIHNjb3JlXG4gICAgICAgICAgICAgICAgdGhpcy5zY29yZS5ncmFmdChpZCwgdG9waWMpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCBwZWVyIHRvIG1lc2hcbiAgICAgICAgICAgICAgICBwZWVycy5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gd2UgYWRkIGEgbmV3IG1lc2ggcGVlciwgd2UgZG9uJ3Qgd2FudCB0byBnb3NzaXAgbWVzc2FnZXMgdG8gaXRcbiAgICAgICAgICAgICAgICBwZWVyc1RvR29zc2lwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy5vbkFkZFRvTWVzaCh0b3BpYywgcmVhc29uLCAxKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgdG8gdG9ncmFmdFxuICAgICAgICAgICAgICAgIGNvbnN0IHRvcGljcyA9IHRvZ3JhZnQuZ2V0KGlkKTtcbiAgICAgICAgICAgICAgICBpZiAodG9waWNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9ncmFmdC5zZXQoaWQsIFt0b3BpY10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9waWNzLnB1c2godG9waWMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBkcm9wIGFsbCBwZWVycyB3aXRoIG5lZ2F0aXZlIHNjb3JlLCB3aXRob3V0IFBYXG4gICAgICAgICAgICBwZWVycy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjb3JlID0gZ2V0U2NvcmUoaWQpO1xuICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgc2NvcmVcbiAgICAgICAgICAgICAgICBpZiAoc2NvcmUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKCdIRUFSVEJFQVQ6IFBydW5lIHBlZXIgJXMgd2l0aCBuZWdhdGl2ZSBzY29yZTogc2NvcmU9JWQsIHRvcGljPSVzJywgaWQsIHNjb3JlLCB0b3BpYyk7XG4gICAgICAgICAgICAgICAgICAgIHBydW5lUGVlcihpZCwgQ2h1cm5SZWFzb24uQmFkU2NvcmUpO1xuICAgICAgICAgICAgICAgICAgICBub1BYLnNldChpZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBkbyB3ZSBoYXZlIGVub3VnaCBwZWVycz9cbiAgICAgICAgICAgIGlmIChwZWVycy5zaXplIDwgRGxvKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5lZWQgPSBEIC0gcGVlcnMuc2l6ZTtcbiAgICAgICAgICAgICAgICAvLyBzbGljZSB1cCB0byBmaXJzdCBgaW5lZWRgIGl0ZW1zIGFuZCByZW1vdmUgdGhlbSBmcm9tIGNhbmRpZGF0ZU1lc2hQZWVyc1xuICAgICAgICAgICAgICAgIC8vIHNhbWUgdG8gYGNvbnN0IG5ld01lc2hQZWVycyA9IGNhbmRpZGF0ZU1lc2hQZWVycy5zbGljZSgwLCBpbmVlZClgXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3TWVzaFBlZXJzID0gcmVtb3ZlRmlyc3ROSXRlbXNGcm9tU2V0KGNhbmRpZGF0ZU1lc2hQZWVycywgaW5lZWQpO1xuICAgICAgICAgICAgICAgIG5ld01lc2hQZWVycy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGdyYWZ0UGVlcihwLCBJbmNsdXNpb25SZWFzb24uTm90RW5vdWdoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvIHdlIGhhdmUgdG8gbWFueSBwZWVycz9cbiAgICAgICAgICAgIGlmIChwZWVycy5zaXplID4gRGhpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBlZXJzQXJyYXkgPSBBcnJheS5mcm9tKHBlZXJzKTtcbiAgICAgICAgICAgICAgICAvLyBzb3J0IGJ5IHNjb3JlXG4gICAgICAgICAgICAgICAgcGVlcnNBcnJheS5zb3J0KChhLCBiKSA9PiBnZXRTY29yZShiKSAtIGdldFNjb3JlKGEpKTtcbiAgICAgICAgICAgICAgICAvLyBXZSBrZWVwIHRoZSBmaXJzdCBEX3Njb3JlIHBlZXJzIGJ5IHNjb3JlIGFuZCB0aGUgcmVtYWluaW5nIHVwIHRvIEQgcmFuZG9tbHlcbiAgICAgICAgICAgICAgICAvLyB1bmRlciB0aGUgY29uc3RyYWludCB0aGF0IHdlIGtlZXAgRF9vdXQgcGVlcnMgaW4gdGhlIG1lc2ggKGlmIHdlIGhhdmUgdGhhdCBtYW55KVxuICAgICAgICAgICAgICAgIHBlZXJzQXJyYXkgPSBwZWVyc0FycmF5LnNsaWNlKDAsIERzY29yZSkuY29uY2F0KHNodWZmbGUocGVlcnNBcnJheS5zbGljZShEc2NvcmUpKSk7XG4gICAgICAgICAgICAgICAgLy8gY291bnQgdGhlIG91dGJvdW5kIHBlZXJzIHdlIGFyZSBrZWVwaW5nXG4gICAgICAgICAgICAgICAgbGV0IG91dGJvdW5kID0gMDtcbiAgICAgICAgICAgICAgICBwZWVyc0FycmF5LnNsaWNlKDAsIEQpLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0Ym91bmQuZ2V0KHApID8/IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRib3VuZCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBsZXNzIHRoYW4gRF9vdXQsIGJ1YmJsZSB1cCBzb21lIG91dGJvdW5kIHBlZXJzIGZyb20gdGhlIHJhbmRvbSBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICBpZiAob3V0Ym91bmQgPCBEb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZSA9IChpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByb3RhdGUgdGhlIHBlZXJzQXJyYXkgdG8gdGhlIHJpZ2h0IGFuZCBwdXQgdGhlIGl0aCBwZWVyIGluIHRoZSBmcm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBlZXJzQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA+IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJzQXJyYXlbal0gPSBwZWVyc0FycmF5W2ogLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJzQXJyYXlbMF0gPSBwO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBidWJibGUgdXAgYWxsIG91dGJvdW5kIHBlZXJzIGFscmVhZHkgaW4gdGhlIHNlbGVjdGlvbiB0byB0aGUgZnJvbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dGJvdW5kID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGloYXZlID0gb3V0Ym91bmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEQgJiYgaWhhdmUgPiAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWRlcHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0Ym91bmQuZ2V0KHBlZXJzQXJyYXlbaV0pID8/IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWhhdmUtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGJ1YmJsZSB1cCBlbm91Z2ggb3V0Ym91bmQgcGVlcnMgb3V0c2lkZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBmcm9udFxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5lZWQgPSBEIC0gb3V0Ym91bmQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBEOyBpIDwgcGVlcnNBcnJheS5sZW5ndGggJiYgaW5lZWQgPiAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dGJvdW5kLmdldChwZWVyc0FycmF5W2ldKSA/PyBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZShpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmVlZC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHBydW5lIHRoZSBleGNlc3MgcGVlcnNcbiAgICAgICAgICAgICAgICBwZWVyc0FycmF5LnNsaWNlKEQpLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJ1bmVQZWVyKHAsIENodXJuUmVhc29uLkV4Y2Vzcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyB3ZSBoYXZlIGVub3VnaCBvdXRib3VuZCBwZWVycz9cbiAgICAgICAgICAgIGlmIChwZWVycy5zaXplID49IERsbykge1xuICAgICAgICAgICAgICAgIC8vIGNvdW50IHRoZSBvdXRib3VuZCBwZWVycyB3ZSBoYXZlXG4gICAgICAgICAgICAgICAgbGV0IG91dGJvdW5kID0gMDtcbiAgICAgICAgICAgICAgICBwZWVycy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dGJvdW5kLmdldChwKSA/PyBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0Ym91bmQrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgbGVzcyB0aGFuIERfb3V0LCBzZWxlY3Qgc29tZSBwZWVycyB3aXRoIG91dGJvdW5kIGNvbm5lY3Rpb25zIGFuZCBncmFmdCB0aGVtXG4gICAgICAgICAgICAgICAgaWYgKG91dGJvdW5kIDwgRG91dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmVlZCA9IERvdXQgLSBvdXRib3VuZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3TWVzaFBlZXJzID0gcmVtb3ZlSXRlbXNGcm9tU2V0KGNhbmRpZGF0ZU1lc2hQZWVycywgaW5lZWQsIChpZCkgPT4gdGhpcy5vdXRib3VuZC5nZXQoaWQpID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWVzaFBlZXJzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWZ0UGVlcihwLCBJbmNsdXNpb25SZWFzb24uT3V0Ym91bmQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzaG91bGQgd2UgdHJ5IHRvIGltcHJvdmUgdGhlIG1lc2ggd2l0aCBvcHBvcnR1bmlzdGljIGdyYWZ0aW5nP1xuICAgICAgICAgICAgaWYgKHRoaXMuaGVhcnRiZWF0VGlja3MgJSB0aGlzLm9wdHMub3Bwb3J0dW5pc3RpY0dyYWZ0VGlja3MgPT09IDAgJiYgcGVlcnMuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBPcHBvcnR1bmlzdGljIGdyYWZ0aW5nIHdvcmtzIGFzIGZvbGxvd3M6IHdlIGNoZWNrIHRoZSBtZWRpYW4gc2NvcmUgb2YgcGVlcnMgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gbWVzaDsgaWYgdGhpcyBzY29yZSBpcyBiZWxvdyB0aGUgb3Bwb3J0dW5pc3RpY0dyYWZ0VGhyZXNob2xkLCB3ZSBzZWxlY3QgYSBmZXcgcGVlcnMgYXRcbiAgICAgICAgICAgICAgICAvLyByYW5kb20gd2l0aCBzY29yZSBvdmVyIHRoZSBtZWRpYW4uXG4gICAgICAgICAgICAgICAgLy8gVGhlIGludGVudGlvbiBpcyB0byAoc2xvd2x5KSBpbXByb3ZlIGFuIHVuZGVycGVyZm9ybWluZyBtZXNoIGJ5IGludHJvZHVjaW5nIGdvb2RcbiAgICAgICAgICAgICAgICAvLyBzY29yaW5nIHBlZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBnb3NzaXBpbmcgYXQgdXMuIFRoaXMgYWxsb3dzIHVzIHRvIGdldCBvdXQgb2Ygc3RpY2t5XG4gICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9ucyB3aGVyZSB3ZSBhcmUgc3R1Y2sgd2l0aCBwb29yIHBlZXJzIGFuZCBhbHNvIHJlY292ZXIgZnJvbSBjaHVybiBvZiBnb29kIHBlZXJzLlxuICAgICAgICAgICAgICAgIC8vIG5vdyBjb21wdXRlIHRoZSBtZWRpYW4gcGVlciBzY29yZSBpbiB0aGUgbWVzaFxuICAgICAgICAgICAgICAgIGNvbnN0IHBlZXJzTGlzdCA9IEFycmF5LmZyb20ocGVlcnMpLnNvcnQoKGEsIGIpID0+IGdldFNjb3JlKGEpIC0gZ2V0U2NvcmUoYikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lZGlhbkluZGV4ID0gTWF0aC5mbG9vcihwZWVycy5zaXplIC8gMik7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVkaWFuU2NvcmUgPSBnZXRTY29yZShwZWVyc0xpc3RbbWVkaWFuSW5kZXhdKTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbWVkaWFuIHNjb3JlIGlzIGJlbG93IHRoZSB0aHJlc2hvbGQsIHNlbGVjdCBhIGJldHRlciBwZWVyIChpZiBhbnkpIGFuZCBHUkFGVFxuICAgICAgICAgICAgICAgIGlmIChtZWRpYW5TY29yZSA8IHRoaXMub3B0cy5zY29yZVRocmVzaG9sZHMub3Bwb3J0dW5pc3RpY0dyYWZ0VGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZWVkID0gdGhpcy5vcHRzLm9wcG9ydHVuaXN0aWNHcmFmdFBlZXJzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdNZXNoUGVlcnMgPSByZW1vdmVJdGVtc0Zyb21TZXQoY2FuZGlkYXRlTWVzaFBlZXJzLCBpbmVlZCwgKGlkKSA9PiBnZXRTY29yZShpZCkgPiBtZWRpYW5TY29yZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgbmV3TWVzaFBlZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZygnSEVBUlRCRUFUOiBPcHBvcnR1bmlzdGljYWxseSBncmFmdCBwZWVyICVzIG9uIHRvcGljICVzJywgaWQsIHRvcGljKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWZ0UGVlcihpZCwgSW5jbHVzaW9uUmVhc29uLk9wcG9ydHVuaXN0aWMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZXhwaXJlIGZhbm91dCBmb3IgdG9waWNzIHdlIGhhdmVuJ3QgcHVibGlzaGVkIHRvIGluIGEgd2hpbGVcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy5mYW5vdXRMYXN0cHViLmZvckVhY2goKGxhc3RwYiwgdG9waWMpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXN0cGIgKyBmYW5vdXRUVEwgPCBub3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZhbm91dC5kZWxldGUodG9waWMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmFub3V0TGFzdHB1Yi5kZWxldGUodG9waWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gbWFpbnRhaW4gb3VyIGZhbm91dCBmb3IgdG9waWNzIHdlIGFyZSBwdWJsaXNoaW5nIGJ1dCB3ZSBoYXZlIG5vdCBqb2luZWRcbiAgICAgICAgdGhpcy5mYW5vdXQuZm9yRWFjaCgoZmFub3V0UGVlcnMsIHRvcGljKSA9PiB7XG4gICAgICAgICAgICAvLyBjaGVja3Mgd2hldGhlciBvdXIgcGVlcnMgYXJlIHN0aWxsIGluIHRoZSB0b3BpYyBhbmQgaGF2ZSBhIHNjb3JlIGFib3ZlIHRoZSBwdWJsaXNoIHRocmVzaG9sZFxuICAgICAgICAgICAgY29uc3QgdG9waWNQZWVycyA9IHRoaXMudG9waWNzLmdldCh0b3BpYyk7XG4gICAgICAgICAgICBmYW5vdXRQZWVycy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKHRvcGljUGVlcnM/LmhhcyhpZCkgPz8gZmFsc2UpIHx8IGdldFNjb3JlKGlkKSA8IHRoaXMub3B0cy5zY29yZVRocmVzaG9sZHMucHVibGlzaFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICBmYW5vdXRQZWVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcGVlcnNJblRvcGljID0gdGhpcy50b3BpY3MuZ2V0KHRvcGljKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUZhbm91dFBlZXJzID0gW107XG4gICAgICAgICAgICAvLyB0aGUgZmFub3V0IG1hcCBjb250YWlucyB0b3BpY3MgdG8gd2hpY2ggd2UgYXJlIG5vdCBzdWJzY3JpYmVkLlxuICAgICAgICAgICAgY29uc3QgcGVlcnNUb0dvc3NpcCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHBlZXJzVG9Hb3NzaXBCeVRvcGljLnNldCh0b3BpYywgcGVlcnNUb0dvc3NpcCk7XG4gICAgICAgICAgICBpZiAocGVlcnNJblRvcGljICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaHVmZmxlZFBlZXJzID0gc2h1ZmZsZShBcnJheS5mcm9tKHBlZXJzSW5Ub3BpYykpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2h1ZmZsZWRQZWVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZWVyU3RyZWFtcyA9IHRoaXMuc3RyZWFtc091dGJvdW5kLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocGVlclN0cmVhbXMgIT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGljb2RlY3MuaW5jbHVkZXMocGVlclN0cmVhbXMucHJvdG9jb2wpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhZmFub3V0UGVlcnMuaGFzKGlkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZGlyZWN0LmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3JlID0gZ2V0U2NvcmUoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3JlID49IHRoaXMub3B0cy5zY29yZVRocmVzaG9sZHMucHVibGlzaFRocmVzaG9sZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVGYW5vdXRQZWVycy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgaGF2aW5nIHRvIGZpbmQgZ29zc2lwIHBlZXJzIGFmdGVyIGhlYXJ0YmVhdCB3aGljaCByZXF1aXJlIGFub3RoZXIgbG9vcFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgcHJlcGFyZSBwZWVycyB0byBnb3NzaXAgaW4gYSB0b3BpYyB3aXRoaW4gaGVhcnRiZWF0IHRvIGltcHJvdmUgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29yZSA+PSB0aGlzLm9wdHMuc2NvcmVUaHJlc2hvbGRzLmdvc3NpcFRocmVzaG9sZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyc1RvR29zc2lwLmFkZChpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyB3ZSBuZWVkIG1vcmUgcGVlcnM/XG4gICAgICAgICAgICBpZiAoZmFub3V0UGVlcnMuc2l6ZSA8IEQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmVlZCA9IEQgLSBmYW5vdXRQZWVycy5zaXplO1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUZhbm91dFBlZXJzLnNsaWNlKDAsIGluZWVkKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmYW5vdXRQZWVycy5hZGQoaWQpO1xuICAgICAgICAgICAgICAgICAgICBwZWVyc1RvR29zc2lwPy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbWl0R29zc2lwKHBlZXJzVG9Hb3NzaXBCeVRvcGljKTtcbiAgICAgICAgLy8gc2VuZCBjb2FsZXNjZWQgR1JBRlQvUFJVTkUgbWVzc2FnZXMgKHdpbGwgcGlnZ3liYWNrIGdvc3NpcClcbiAgICAgICAgYXdhaXQgdGhpcy5zZW5kR3JhZnRQcnVuZSh0b2dyYWZ0LCB0b3BydW5lLCBub1BYKTtcbiAgICAgICAgLy8gZmx1c2ggcGVuZGluZyBnb3NzaXAgdGhhdCB3YXNuJ3QgcGlnZ3liYWNrZWQgYWJvdmVcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICAvLyBhZHZhbmNlIHRoZSBtZXNzYWdlIGhpc3Rvcnkgd2luZG93XG4gICAgICAgIHRoaXMubWNhY2hlLnNoaWZ0KCk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dvc3NpcHN1YjpoZWFydGJlYXQnKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgdG9waWMsIHJldHVybnMgdXAgdG8gY291bnQgcGVlcnMgc3Vic2NyaWJlZCB0byB0aGF0IHRvcGljXG4gICAgICogdGhhdCBwYXNzIGFuIG9wdGlvbmFsIGZpbHRlciBmdW5jdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHRvcGljXG4gICAgICogQHBhcmFtIGNvdW50XG4gICAgICogQHBhcmFtIGZpbHRlciAtIGEgZnVuY3Rpb24gdG8gZmlsdGVyIGFjY2VwdGFibGUgcGVlcnNcbiAgICAgKi9cbiAgICBnZXRSYW5kb21Hb3NzaXBQZWVycyh0b3BpYywgY291bnQsIGZpbHRlciA9ICgpID0+IHRydWUpIHtcbiAgICAgICAgY29uc3QgcGVlcnNJblRvcGljID0gdGhpcy50b3BpY3MuZ2V0KHRvcGljKTtcbiAgICAgICAgaWYgKHBlZXJzSW5Ub3BpYyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNldCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZHMgYWxsIHBlZXJzIHVzaW5nIG91ciBwcm90b2NvbFxuICAgICAgICAvLyB0aGF0IGFsc28gcGFzcyB0aGUgZmlsdGVyIGZ1bmN0aW9uXG4gICAgICAgIGxldCBwZWVycyA9IFtdO1xuICAgICAgICBwZWVyc0luVG9waWMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlZXJTdHJlYW1zID0gdGhpcy5zdHJlYW1zT3V0Ym91bmQuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmIChwZWVyU3RyZWFtcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGljb2RlY3MuaW5jbHVkZXMocGVlclN0cmVhbXMucHJvdG9jb2wpICYmIGZpbHRlcihpZCkpIHtcbiAgICAgICAgICAgICAgICBwZWVycy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFBzZXVkby1yYW5kb21seSBzaHVmZmxlcyBwZWVyc1xuICAgICAgICBwZWVycyA9IHNodWZmbGUocGVlcnMpO1xuICAgICAgICBpZiAoY291bnQgPiAwICYmIHBlZXJzLmxlbmd0aCA+IGNvdW50KSB7XG4gICAgICAgICAgICBwZWVycyA9IHBlZXJzLnNsaWNlKDAsIGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFNldChwZWVycyk7XG4gICAgfVxuICAgIG9uU2NyYXBlTWV0cmljcyhtZXRyaWNzKSB7XG4gICAgICAgIC8qIERhdGEgc3RydWN0dXJlIHNpemVzICovXG4gICAgICAgIG1ldHJpY3MubWNhY2hlU2l6ZS5zZXQodGhpcy5tY2FjaGUuc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MubWNhY2hlTm90VmFsaWRhdGVkQ291bnQuc2V0KHRoaXMubWNhY2hlLm5vdFZhbGlkYXRlZENvdW50KTtcbiAgICAgICAgLy8gQXJiaXRyYXJ5IHNpemVcbiAgICAgICAgbWV0cmljcy5jYWNoZVNpemUuc2V0KHsgY2FjaGU6ICdkaXJlY3QnIH0sIHRoaXMuZGlyZWN0LnNpemUpO1xuICAgICAgICBtZXRyaWNzLmNhY2hlU2l6ZS5zZXQoeyBjYWNoZTogJ3NlZW5DYWNoZScgfSwgdGhpcy5zZWVuQ2FjaGUuc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnZmFzdE1zZ0lkQ2FjaGUnIH0sIHRoaXMuZmFzdE1zZ0lkQ2FjaGU/LnNpemUgPz8gMCk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAncHVibGlzaGVkTWVzc2FnZUlkcycgfSwgdGhpcy5wdWJsaXNoZWRNZXNzYWdlSWRzLnNpemUpO1xuICAgICAgICBtZXRyaWNzLmNhY2hlU2l6ZS5zZXQoeyBjYWNoZTogJ21jYWNoZScgfSwgdGhpcy5tY2FjaGUuc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnc2NvcmUnIH0sIHRoaXMuc2NvcmUuc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnZ29zc2lwVHJhY2VyLnByb21pc2VzJyB9LCB0aGlzLmdvc3NpcFRyYWNlci5zaXplKTtcbiAgICAgICAgbWV0cmljcy5jYWNoZVNpemUuc2V0KHsgY2FjaGU6ICdnb3NzaXBUcmFjZXIucmVxdWVzdHMnIH0sIHRoaXMuZ29zc2lwVHJhY2VyLnJlcXVlc3RNc0J5TXNnU2l6ZSk7XG4gICAgICAgIC8vIEJvdW5kZWQgYnkgdG9waWNcbiAgICAgICAgbWV0cmljcy5jYWNoZVNpemUuc2V0KHsgY2FjaGU6ICd0b3BpY3MnIH0sIHRoaXMudG9waWNzLnNpemUpO1xuICAgICAgICBtZXRyaWNzLmNhY2hlU2l6ZS5zZXQoeyBjYWNoZTogJ3N1YnNjcmlwdGlvbnMnIH0sIHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplKTtcbiAgICAgICAgbWV0cmljcy5jYWNoZVNpemUuc2V0KHsgY2FjaGU6ICdtZXNoJyB9LCB0aGlzLm1lc2guc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnZmFub3V0JyB9LCB0aGlzLmZhbm91dC5zaXplKTtcbiAgICAgICAgLy8gQm91bmRlZCBieSBwZWVyXG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAncGVlcnMnIH0sIHRoaXMucGVlcnMuc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnc3RyZWFtc091dGJvdW5kJyB9LCB0aGlzLnN0cmVhbXNPdXRib3VuZC5zaXplKTtcbiAgICAgICAgbWV0cmljcy5jYWNoZVNpemUuc2V0KHsgY2FjaGU6ICdzdHJlYW1zSW5ib3VuZCcgfSwgdGhpcy5zdHJlYW1zSW5ib3VuZC5zaXplKTtcbiAgICAgICAgbWV0cmljcy5jYWNoZVNpemUuc2V0KHsgY2FjaGU6ICdhY2NlcHRGcm9tV2hpdGVsaXN0JyB9LCB0aGlzLmFjY2VwdEZyb21XaGl0ZWxpc3Quc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnZ29zc2lwJyB9LCB0aGlzLmdvc3NpcC5zaXplKTtcbiAgICAgICAgbWV0cmljcy5jYWNoZVNpemUuc2V0KHsgY2FjaGU6ICdjb250cm9sJyB9LCB0aGlzLmNvbnRyb2wuc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAncGVlcmhhdmUnIH0sIHRoaXMucGVlcmhhdmUuc2l6ZSk7XG4gICAgICAgIG1ldHJpY3MuY2FjaGVTaXplLnNldCh7IGNhY2hlOiAnb3V0Ym91bmQnIH0sIHRoaXMub3V0Ym91bmQuc2l6ZSk7XG4gICAgICAgIC8vIDJEIG5lc3RlZCBkYXRhIHN0cnVjdHVyZVxuICAgICAgICBsZXQgYmFja29mZlNpemUgPSAwO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBtZXRyaWNzLmNvbm5lY3RlZFBlZXJzQmFja29mZlNlYy5yZXNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGJhY2tvZmYgb2YgdGhpcy5iYWNrb2ZmLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBiYWNrb2ZmU2l6ZSArPSBiYWNrb2ZmLnNpemU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtwZWVyLCBleHBpcmVkTXNdIG9mIGJhY2tvZmYuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVlcnMuaGFzKHBlZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY3MuY29ubmVjdGVkUGVlcnNCYWNrb2ZmU2VjLm9ic2VydmUoTWF0aC5tYXgoMCwgZXhwaXJlZE1zIC0gbm93KSAvIDEwMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtZXRyaWNzLmNhY2hlU2l6ZS5zZXQoeyBjYWNoZTogJ2JhY2tvZmYnIH0sIGJhY2tvZmZTaXplKTtcbiAgICAgICAgLy8gUGVlciBjb3VudHNcbiAgICAgICAgZm9yIChjb25zdCBbdG9waWNTdHIsIHBlZXJzXSBvZiB0aGlzLnRvcGljcykge1xuICAgICAgICAgICAgbWV0cmljcy50b3BpY1BlZXJzQ291bnQuc2V0KHsgdG9waWNTdHIgfSwgcGVlcnMuc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdG9waWNTdHIsIHBlZXJzXSBvZiB0aGlzLm1lc2gpIHtcbiAgICAgICAgICAgIG1ldHJpY3MubWVzaFBlZXJDb3VudHMuc2V0KHsgdG9waWNTdHIgfSwgcGVlcnMuc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGVlciBzY29yZXNcbiAgICAgICAgY29uc3Qgc2NvcmVzID0gW107XG4gICAgICAgIGNvbnN0IHNjb3JlQnlQZWVyID0gbmV3IE1hcCgpO1xuICAgICAgICBtZXRyaWNzLmJlaGF2aW91clBlbmFsdHkucmVzZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBwZWVySWRTdHIgb2YgdGhpcy5wZWVycy5rZXlzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjb3JlID0gdGhpcy5zY29yZS5zY29yZShwZWVySWRTdHIpO1xuICAgICAgICAgICAgc2NvcmVzLnB1c2goc2NvcmUpO1xuICAgICAgICAgICAgc2NvcmVCeVBlZXIuc2V0KHBlZXJJZFN0ciwgc2NvcmUpO1xuICAgICAgICAgICAgbWV0cmljcy5iZWhhdmlvdXJQZW5hbHR5Lm9ic2VydmUodGhpcy5zY29yZS5wZWVyU3RhdHMuZ2V0KHBlZXJJZFN0cik/LmJlaGF2aW91clBlbmFsdHkgPz8gMCk7XG4gICAgICAgIH1cbiAgICAgICAgbWV0cmljcy5yZWdpc3RlclNjb3JlcyhzY29yZXMsIHRoaXMub3B0cy5zY29yZVRocmVzaG9sZHMpO1xuICAgICAgICAvLyBCcmVha2Rvd24gc2NvcmUgcGVyIG1lc2ggdG9waWNMYWJlbFxuICAgICAgICBtZXRyaWNzLnJlZ2lzdGVyU2NvcmVQZXJNZXNoKHRoaXMubWVzaCwgc2NvcmVCeVBlZXIpO1xuICAgICAgICAvLyBCcmVha2Rvd24gb24gZWFjaCBzY29yZSB3ZWlnaHRcbiAgICAgICAgY29uc3Qgc3cgPSBjb21wdXRlQWxsUGVlcnNTY29yZVdlaWdodHModGhpcy5wZWVycy5rZXlzKCksIHRoaXMuc2NvcmUucGVlclN0YXRzLCB0aGlzLnNjb3JlLnBhcmFtcywgdGhpcy5zY29yZS5wZWVySVBzLCBtZXRyaWNzLnRvcGljU3RyVG9MYWJlbCk7XG4gICAgICAgIG1ldHJpY3MucmVnaXN0ZXJTY29yZVdlaWdodHMoc3cpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnb3NzaXBzdWIoaW5pdCA9IHt9KSB7XG4gICAgcmV0dXJuIChjb21wb25lbnRzKSA9PiBuZXcgR29zc2lwU3ViKGNvbXBvbmVudHMsIGluaXQpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIkN1c3RvbUV2ZW50IiwiVHlwZWRFdmVudEVtaXR0ZXIiLCJTdHJpY3RTaWduIiwiU3RyaWN0Tm9TaWduIiwiVG9waWNWYWxpZGF0b3JSZXN1bHQiLCJwZWVySWRGcm9tQnl0ZXMiLCJwZWVySWRGcm9tU3RyaW5nIiwiZW5jb2RlIiwicGlwZSIsInB1c2hhYmxlIiwiY29uc3RhbnRzIiwiQUNDRVBUX0ZST01fV0hJVEVMSVNUX0RVUkFUSU9OX01TIiwiQUNDRVBUX0ZST01fV0hJVEVMSVNUX01BWF9NRVNTQUdFUyIsIkFDQ0VQVF9GUk9NX1dISVRFTElTVF9USFJFU0hPTERfU0NPUkUiLCJCQUNLT0ZGX1NMQUNLIiwiZGVmYXVsdERlY29kZVJwY0xpbWl0cyIsIlJQQyIsIk1lc3NhZ2VDYWNoZSIsIkNodXJuUmVhc29uIiwiZ2V0TWV0cmljcyIsIklIYXZlSWdub3JlUmVhc29uIiwiSW5jbHVzaW9uUmVhc29uIiwiU2NvcmVQZW5hbHR5IiwiUGVlclNjb3JlIiwiY3JlYXRlUGVlclNjb3JlUGFyYW1zIiwiY3JlYXRlUGVlclNjb3JlVGhyZXNob2xkcyIsImNvbXB1dGVBbGxQZWVyc1Njb3JlV2VpZ2h0cyIsIkluYm91bmRTdHJlYW0iLCJPdXRib3VuZFN0cmVhbSIsIklXYW50VHJhY2VyIiwiVmFsaWRhdGVFcnJvciIsIk1lc3NhZ2VTdGF0dXMiLCJSZWplY3RSZWFzb24iLCJyZWplY3RSZWFzb25Gcm9tQWNjZXB0YW5jZSIsImJ1aWxkUmF3TWVzc2FnZSIsInZhbGlkYXRlVG9SYXdNZXNzYWdlIiwiY3JlYXRlR29zc2lwUnBjIiwiZW5zdXJlQ29udHJvbCIsInNodWZmbGUiLCJtZXNzYWdlSWRUb1N0cmluZyIsIm1zZ0lkRm5TdHJpY3ROb1NpZ24iLCJtc2dJZEZuU3RyaWN0U2lnbiIsIm11bHRpYWRkclRvSVBTdHIiLCJnZXRQdWJsaXNoQ29uZmlnRnJvbVBlZXJJZCIsInJlbW92ZUZpcnN0Tkl0ZW1zRnJvbVNldCIsInJlbW92ZUl0ZW1zRnJvbVNldCIsIlNpbXBsZVRpbWVDYWNoZSIsIm11bHRpY29kZWMiLCJHb3NzaXBzdWJJRHYxMSIsIkdvc3NpcFN0YXR1c0NvZGUiLCJHb3NzaXBTdWIiLCJjb25zdHJ1Y3RvciIsImNvbXBvbmVudHMiLCJvcHRpb25zIiwibXVsdGljb2RlY3MiLCJHb3NzaXBzdWJJRHYxMCIsInBlZXJzIiwiU2V0Iiwic3RyZWFtc0luYm91bmQiLCJNYXAiLCJzdHJlYW1zT3V0Ym91bmQiLCJvdXRib3VuZEluZmxpZ2h0UXVldWUiLCJvYmplY3RNb2RlIiwiZGlyZWN0IiwiZmxvb2RzdWJQZWVycyIsImFjY2VwdEZyb21XaGl0ZWxpc3QiLCJ0b3BpY3MiLCJzdWJzY3JpcHRpb25zIiwibWVzaCIsImZhbm91dCIsImZhbm91dExhc3RwdWIiLCJnb3NzaXAiLCJjb250cm9sIiwicGVlcmhhdmUiLCJpYXNrZWQiLCJiYWNrb2ZmIiwib3V0Ym91bmQiLCJ0b3BpY1ZhbGlkYXRvcnMiLCJoZWFydGJlYXRUaWNrcyIsImRpcmVjdFBlZXJJbml0aWFsIiwic3RhdHVzIiwiY29kZSIsInN0b3BwZWQiLCJoZWFydGJlYXRUaW1lciIsInJ1bkhlYXJ0YmVhdCIsInRpbWVyIiwibWV0cmljcyIsImhlYXJ0YmVhdER1cmF0aW9uIiwic3RhcnRUaW1lciIsImhlYXJ0YmVhdCIsImNhdGNoIiwiZXJyIiwibG9nIiwiZmluYWxseSIsInN0YXJ0ZWQiLCJjbGVhclRpbWVvdXQiLCJoZWFydGJlYXRUaW1lb3V0IiwibXNUb05leHRIZWFydGJlYXQiLCJvcHRzIiwiaGVhcnRiZWF0SW50ZXJ2YWwiLCJEYXRlIiwibm93IiwiaGVhcmJlYXRTdGFydE1zIiwiaGVhcnRiZWF0U2tpcHBlZCIsImluYyIsInNldFRpbWVvdXQiLCJmYWxsYmFja1RvRmxvb2RzdWIiLCJmbG9vZFB1Ymxpc2giLCJiYXRjaFB1Ymxpc2giLCJkb1BYIiwiZGlyZWN0UGVlcnMiLCJEIiwiR29zc2lwc3ViRCIsIkRsbyIsIkdvc3NpcHN1YkRsbyIsIkRoaSIsIkdvc3NpcHN1YkRoaSIsIkRzY29yZSIsIkdvc3NpcHN1YkRzY29yZSIsIkRvdXQiLCJHb3NzaXBzdWJEb3V0IiwiRGxhenkiLCJHb3NzaXBzdWJEbGF6eSIsIkdvc3NpcHN1YkhlYXJ0YmVhdEludGVydmFsIiwiZmFub3V0VFRMIiwiR29zc2lwc3ViRmFub3V0VFRMIiwibWNhY2hlTGVuZ3RoIiwiR29zc2lwc3ViSGlzdG9yeUxlbmd0aCIsIm1jYWNoZUdvc3NpcCIsIkdvc3NpcHN1Ykhpc3RvcnlHb3NzaXAiLCJzZWVuVFRMIiwiR29zc2lwc3ViU2VlblRUTCIsImdvc3NpcHN1YklXYW50Rm9sbG93dXBNcyIsIkdvc3NpcHN1YklXYW50Rm9sbG93dXBUaW1lIiwicHJ1bmVQZWVycyIsIkdvc3NpcHN1YlBydW5lUGVlcnMiLCJwcnVuZUJhY2tvZmYiLCJHb3NzaXBzdWJQcnVuZUJhY2tvZmYiLCJ1bnN1YmNyaWJlQmFja29mZiIsIkdvc3NpcHN1YlVuc3Vic2NyaWJlQmFja29mZiIsImdyYWZ0Rmxvb2RUaHJlc2hvbGQiLCJHb3NzaXBzdWJHcmFmdEZsb29kVGhyZXNob2xkIiwib3Bwb3J0dW5pc3RpY0dyYWZ0UGVlcnMiLCJHb3NzaXBzdWJPcHBvcnR1bmlzdGljR3JhZnRQZWVycyIsIm9wcG9ydHVuaXN0aWNHcmFmdFRpY2tzIiwiR29zc2lwc3ViT3Bwb3J0dW5pc3RpY0dyYWZ0VGlja3MiLCJkaXJlY3RDb25uZWN0VGlja3MiLCJHb3NzaXBzdWJEaXJlY3RDb25uZWN0VGlja3MiLCJzY29yZVBhcmFtcyIsInNjb3JlVGhyZXNob2xkcyIsImRlY29kZVJwY0xpbWl0cyIsImdsb2JhbFNpZ25hdHVyZVBvbGljeSIsInB1c2giLCJGbG9vZHN1YklEIiwibG9nZ2VyIiwiZm9yQ29tcG9uZW50IiwiZGVidWdOYW1lIiwibWFwIiwicCIsImlkIiwidG9TdHJpbmciLCJzZWVuQ2FjaGUiLCJ2YWxpZGl0eU1zIiwicHVibGlzaGVkTWVzc2FnZUlkcyIsIm1zZ0lkRm4iLCJFcnJvciIsImZhc3RNc2dJZEZuIiwiZmFzdE1zZ0lkQ2FjaGUiLCJtc2dJZFRvU3RyRm4iLCJtY2FjaGUiLCJtZXNzYWdlQ2FjaGUiLCJkYXRhVHJhbnNmb3JtIiwibWV0cmljc1JlZ2lzdGVyIiwibWV0cmljc1RvcGljU3RyVG9MYWJlbCIsIm1heE1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvd01zIiwiTWF0aCIsIm1heCIsIk9iamVjdCIsInZhbHVlcyIsInRvcGljUGFyYW0iLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNXaW5kb3ciLCJERUZBVUxUX01FVFJJQ19NRVNIX01FU1NBR0VfREVMSVZFUklFU19XSU5ET1dTIiwiZ29zc2lwUHJvbWlzZUV4cGlyZVNlYyIsImJlaGF2aW91clBlbmFsdHlUaHJlc2hvbGQiLCJtYXhNZXNoTWVzc2FnZURlbGl2ZXJpZXNXaW5kb3dTZWMiLCJtY2FjaGVTaXplIiwiYWRkQ29sbGVjdCIsIm9uU2NyYXBlTWV0cmljcyIsInByb3RvY29sIiwicHJvdG9jb2xzRW5hYmxlZCIsInNldCIsImdvc3NpcFRyYWNlciIsInNjb3JlIiwic2NvcmVDYWNoZVZhbGlkaXR5TXMiLCJtYXhJbmJvdW5kU3RyZWFtcyIsIm1heE91dGJvdW5kU3RyZWFtcyIsInJ1bk9uVHJhbnNpZW50Q29ubmVjdGlvbiIsImFsbG93ZWRUb3BpY3MiLCJnZXRQZWVycyIsImtleXMiLCJzdHIiLCJpc1N0YXJ0ZWQiLCJzdGFydCIsInB1Ymxpc2hDb25maWciLCJwZWVySWQiLCJzb3VyY2UiLCJjb25uZWN0aW9uIiwiY3JlYXRlT3V0Ym91bmRTdHJlYW0iLCJlIiwiZXJyb3IiLCJQcm9taXNlIiwiYWxsIiwicGVlclN0b3JlIiwibWVyZ2UiLCJtdWx0aWFkZHJzIiwiYWRkcnMiLCJyZWdpc3RyYXIiLCJoYW5kbGUiLCJvbkluY29taW5nU3RyZWFtIiwiYmluZCIsInRvcG9sb2d5Iiwib25Db25uZWN0Iiwib25QZWVyQ29ubmVjdGVkIiwib25EaXNjb25uZWN0Iiwib25QZWVyRGlzY29ubmVjdGVkIiwibm90aWZ5T25UcmFuc2llbnQiLCJyZWdpc3RyYXJUb3BvbG9neUlkcyIsInJlZ2lzdGVyIiwiR29zc2lwc3ViSGVhcnRiZWF0SW5pdGlhbERlbGF5IiwicmVzb2x2ZSIsInRoZW4iLCJBcnJheSIsImZyb20iLCJjb25uZWN0IiwiR29zc2lwc3ViRGlyZWN0Q29ubmVjdEluaXRpYWxEZWxheSIsInN0b3AiLCJ1bmhhbmRsZSIsImZvckVhY2giLCJ1bnJlZ2lzdGVyIiwiZW5kIiwiY2xvc2VQcm9taXNlcyIsIm91dGJvdW5kU3RyZWFtIiwiY2xvc2UiLCJjbGVhciIsImluYm91bmRTdHJlYW0iLCJjYW5jZWwiLCJkdW1wUGVlclNjb3JlU3RhdHMiLCJzdHJlYW0iLCJyZW1vdGVQZWVyIiwiYWRkUGVlciIsImRpcmVjdGlvbiIsInJlbW90ZUFkZHIiLCJjcmVhdGVJbmJvdW5kU3RyZWFtIiwibmV3Q29ubmVjdGlvbkNvdW50IiwicmVtb3ZlUGVlciIsImhhcyIsIm5ld1N0cmVhbSIsIm1heEJ1ZmZlclNpemUiLCJtYXhPdXRib3VuZEJ1ZmZlclNpemUiLCJhZGQiLCJwZWVyc1BlclByb3RvY29sIiwic2l6ZSIsInNlbmRTdWJzY3JpcHRpb25zIiwicHJpb3JJbmJvdW5kU3RyZWFtIiwiZ2V0IiwidW5kZWZpbmVkIiwibWF4RGF0YUxlbmd0aCIsIm1heEluYm91bmREYXRhTGVuZ3RoIiwicGlwZVBlZXJSZWFkU3RyZWFtIiwiYWRkciIsImN1cnJlbnRJUCIsImFkZElQIiwiZGVsZXRlIiwidG9waWNTdHIiLCJvblJlbW92ZUZyb21NZXNoIiwiRGMiLCJnZXRNZXNoUGVlcnMiLCJ0b3BpYyIsInBlZXJzSW5Ub3BpYyIsImdldFN1YnNjcmliZXJzIiwiZ2V0VG9waWNzIiwiZGF0YSIsInJwY0J5dGVzIiwic3ViYXJyYXkiLCJycGMiLCJkZWNvZGUiLCJsaW1pdHMiLCJtYXhTdWJzY3JpcHRpb25zIiwibWVzc2FnZXMiLCJtYXhNZXNzYWdlcyIsImNvbnRyb2wkIiwiaWhhdmUiLCJtYXhJaGF2ZU1lc3NhZ2VJRHMiLCJpd2FudCIsIm1heEl3YW50TWVzc2FnZUlEcyIsImdyYWZ0IiwibWF4Q29udHJvbE1lc3NhZ2VzIiwicHJ1bmUiLCJwcnVuZSQiLCJtYXhQZWVySW5mb3MiLCJvblJwY1JlY3YiLCJsZW5ndGgiLCJhd2FpdFJwY0hhbmRsZXIiLCJoYW5kbGVSZWNlaXZlZFJwYyIsIm9uUnBjUmVjdkVycm9yIiwib25ScGNEYXRhRXJyb3IiLCJvblBlZXJSZWFkU3RyZWFtRXJyb3IiLCJoYW5kbGVQZWVyUmVhZFN0cmVhbUVycm9yIiwiYWNjZXB0RnJvbSIsInJwY1JlY3ZOb3RBY2NlcHRlZCIsInN1Yk9wdCIsInN1YnNjcmliZSIsImhhbmRsZVJlY2VpdmVkU3Vic2NyaXB0aW9uIiwic2FmZURpc3BhdGNoRXZlbnQiLCJkZXRhaWwiLCJtZXNzYWdlIiwiaGFuZGxlUmVjZWl2ZWRNZXNzYWdlUHJvbWlzZSIsImhhbmRsZVJlY2VpdmVkTWVzc2FnZSIsIm9uTXNnUmVjdkVycm9yIiwiYXdhaXRScGNNZXNzYWdlSGFuZGxlciIsImhhbmRsZUNvbnRyb2xNZXNzYWdlIiwidG9waWNTZXQiLCJycGNNc2ciLCJvbk1zZ1JlY3ZQcmVWYWxpZGF0aW9uIiwidmFsaWRhdGlvblJlc3VsdCIsInZhbGlkYXRlUmVjZWl2ZWRNZXNzYWdlIiwib25QcmV2YWxpZGF0aW9uUmVzdWx0IiwidmFsaWRhdGlvbkNvZGUiLCJkdXBsaWNhdGUiLCJkdXBsaWNhdGVNZXNzYWdlIiwibXNnSWRTdHIiLCJkZWxpdmVyTWVzc2FnZSIsIm9ic2VydmVEdXBsaWNhdGUiLCJpbnZhbGlkIiwicmVqZWN0TWVzc2FnZSIsInJlYXNvbiIsInJlamVjdEludmFsaWRNZXNzYWdlIiwib25Nc2dSZWN2SW52YWxpZCIsInZhbGlkIiwidmFsaWRhdGVNZXNzYWdlIiwibWVzc2FnZUlkIiwicHV0IiwiYXN5bmNWYWxpZGF0aW9uIiwiaXNGcm9tU2VsZiIsImVxdWFscyIsImVtaXRTZWxmIiwiZGlzcGF0Y2hFdmVudCIsInByb3BhZ2F0aW9uU291cmNlIiwibXNnSWQiLCJtc2ciLCJmb3J3YXJkTWVzc2FnZSIsImZhc3RNc2dJZFN0ciIsIm1zZ0lkQ2FjaGVkIiwiaW5ib3VuZFRyYW5zZm9ybSIsIlRyYW5zZm9ybUZhaWxlZCIsImNvbGxpc2lvbiIsImZhc3RNc2dJZENhY2hlQ29sbGlzaW9uIiwidG9waWNWYWxpZGF0b3IiLCJhY2NlcHRhbmNlIiwiZXJyQ29kZSIsIkVSUl9UT1BJQ19WQUxJREFUT1JfSUdOT1JFIiwiSWdub3JlIiwiRVJSX1RPUElDX1ZBTElEQVRPUl9SRUpFQ1QiLCJSZWplY3QiLCJBY2NlcHQiLCJnZXRTY29yZSIsInRvUGVlciIsInNlbmRScGMiLCJjb250cm9sTXNnIiwiaGFuZGxlSUhhdmUiLCJoYW5kbGVJV2FudCIsImhhbmRsZUdyYWZ0IiwiaGFuZGxlUHJ1bmUiLCJzZW50IiwiaXdhbnRNZXNzYWdlSWRzIiwibWVzc2FnZUlEcyIsImFkZFByb21pc2UiLCJpd2FudFByb21pc2VVbnRyYWNrZWQiLCJlbnRyeSIsIm1lc3NhZ2VzQWNjZXB0ZWQiLCJhY2NlcHRVbnRpbCIsImdyYXlsaXN0VGhyZXNob2xkIiwiZ29zc2lwVGhyZXNob2xkIiwiaWhhdmVSY3ZJZ25vcmVkIiwiTG93U2NvcmUiLCJHb3NzaXBzdWJNYXhJSGF2ZU1lc3NhZ2VzIiwiTWF4SWhhdmUiLCJHb3NzaXBzdWJNYXhJSGF2ZUxlbmd0aCIsIk1heElhc2tlZCIsInRvcGljSUQiLCJpZG9udGhhdmUiLCJvbkloYXZlUmN2IiwiaWFzayIsIml3YW50TGlzdCIsInNsaWNlIiwiaXdhbnRCeVRvcGljIiwiaXdhbnREb250aGF2ZSIsImdldFdpdGhJV2FudENvdW50IiwiY291bnQiLCJHb3NzaXBzdWJHb3NzaXBSZXRyYW5zbWlzc2lvbiIsIm9uSXdhbnRSY3YiLCJwZWVyc0luTWVzaCIsImV4cGlyZSIsImFkZFBlbmFsdHkiLCJHcmFmdEJhY2tvZmYiLCJmbG9vZEN1dG9mZiIsImFkZEJhY2tvZmYiLCJvbkFkZFRvTWVzaCIsIlN1YnNjcmliZWQiLCJvblVuc3Vic2NyaWJlIiwibWFrZVBydW5lIiwiUHJ1bmUiLCJkb0FkZEJhY2tvZmYiLCJhY2NlcHRQWFRocmVzaG9sZCIsInB4Q29ubmVjdCIsImludGVydmFsTXMiLCJleGlzdGluZ0V4cGlyZSIsImFwcGx5SXdhbnRQZW5hbHRpZXMiLCJnZXRCcm9rZW5Qcm9taXNlcyIsIkJyb2tlblByb21pc2UiLCJjbGVhckJhY2tvZmYiLCJHb3NzaXBzdWJQcnVuZUJhY2tvZmZUaWNrcyIsImRpcmVjdENvbm5lY3QiLCJ0b2Nvbm5lY3QiLCJwaSIsInBlZXJJRCIsInBlZXIiLCJzaWduZWRQZWVyUmVjb3JkIiwiY29uc3VtZVBlZXJSZWNvcmQiLCJjb25uZWN0aW9uTWFuYWdlciIsIm9wZW5Db25uZWN0aW9uIiwiZ2V0VG9wb2xvZ2llcyIsImpvaW4iLCJ1bnN1YnNjcmliZSIsIndhc1N1YnNjcmliZWQiLCJsZWF2ZSIsIm9uSm9pbiIsInRvQWRkIiwiZmFub3V0UGVlcnMiLCJGYW5vdXQiLCJmYW5vdXRDb3VudCIsIm5ld1BlZXJzIiwiZ2V0UmFuZG9tR29zc2lwUGVlcnMiLCJSYW5kb20iLCJzZW5kR3JhZnQiLCJvbkxlYXZlIiwibWVzaFBlZXJzIiwic2VuZFBydW5lIiwic2VsZWN0UGVlcnNUb0ZvcndhcmQiLCJleGNsdWRlUGVlcnMiLCJ0b3NlbmQiLCJwdWJsaXNoVGhyZXNob2xkIiwic2VsZWN0UGVlcnNUb1B1Ymxpc2giLCJ0b3NlbmRDb3VudCIsImZsb29kc3ViIiwibmV3RmFub3V0UGVlcnMiLCJyYXdNc2ciLCJvbkZvcndhcmRNc2ciLCJwdWJsaXNoIiwic3RhcnRNcyIsInRyYW5zZm9ybWVkRGF0YSIsIm91dGJvdW5kVHJhbnNmb3JtIiwicmF3IiwiaWdub3JlRHVwbGljYXRlUHVibGlzaEVycm9yIiwib25QdWJsaXNoRHVwbGljYXRlTXNnIiwicmVjaXBpZW50cyIsIndpbGxTZW5kVG9TZWxmIiwiYWxsb3dQdWJsaXNoVG9aZXJvUGVlcnMiLCJzZW5kUnBjSW5CYXRjaCIsImR1cmF0aW9uTXMiLCJvblB1Ymxpc2hNc2ciLCJwcmVmaXhlZERhdGEiLCJzaW5nbGUiLCJwdXNoUHJlZml4ZWQiLCJvblJwY1NlbnQiLCJyZXBvcnRNZXNzYWdlVmFsaWRhdGlvblJlc3VsdCIsImNhY2hlRW50cnkiLCJ2YWxpZGF0ZSIsIm9yaWdpbmF0aW5nUGVlcnMiLCJyZW1vdmUiLCJyZWplY3RSZWFzb24iLCJmaXJzdFNlZW5UaW1lc3RhbXBNcyIsIm1lc3NhZ2VGaXJzdFNlZW5UaW1lc3RhbXBNcyIsIm9uUmVwb3J0VmFsaWRhdGlvbiIsIm91dCIsImN0cmwiLCJwaWdneWJhY2tDb250cm9sIiwicGlnZ3liYWNrR29zc2lwIiwib3V0UnBjIiwic2VuZEdyYWZ0UHJ1bmUiLCJ0b2dyYWZ0IiwidG9wcnVuZSIsIm5vUFgiLCJwcnVuaW5nIiwiZW1pdEdvc3NpcCIsInBlZXJzVG9Hb3NzaXBCeVRvcGljIiwiZ29zc2lwSURzQnlUb3BpYyIsImdldEdvc3NpcElEcyIsInBlZXJzVG9Hb3NzaXAiLCJkb0VtaXRHb3NzaXAiLCJjYW5kaWRhdGVUb0dvc3NpcCIsInRhcmdldCIsImZhY3RvciIsIkdvc3NpcHN1Ykdvc3NpcEZhY3RvciIsInBlZXJNZXNzYWdlSURzIiwicHVzaEdvc3NpcCIsImZsdXNoIiwiZW50cmllcyIsImNvbnRyb2xJSGF2ZU1zZ3MiLCJjb25jYXQiLCJiYWNrb2ZmTXMiLCJ4aWQiLCJweCIsInBlZXJJbmZvIiwidG9CeXRlcyIsInBlZXJSZWNvcmRFbnZlbG9wZSIsInNjb3JlcyIsInMiLCJjYWNoZVNpemUiLCJjYWNoZSIsImNhbmRpZGF0ZU1lc2hQZWVycyIsInNodWZmbGVkUGVlcnMiLCJwZWVyU3RyZWFtcyIsImluY2x1ZGVzIiwicHJ1bmVQZWVyIiwiZ3JhZnRQZWVyIiwiQmFkU2NvcmUiLCJpbmVlZCIsIm5ld01lc2hQZWVycyIsIk5vdEVub3VnaCIsInBlZXJzQXJyYXkiLCJzb3J0IiwiYSIsImIiLCJyb3RhdGUiLCJpIiwiaiIsIkV4Y2VzcyIsIk91dGJvdW5kIiwicGVlcnNMaXN0IiwibWVkaWFuSW5kZXgiLCJmbG9vciIsIm1lZGlhblNjb3JlIiwib3Bwb3J0dW5pc3RpY0dyYWZ0VGhyZXNob2xkIiwiT3Bwb3J0dW5pc3RpYyIsImxhc3RwYiIsInRvcGljUGVlcnMiLCJjYW5kaWRhdGVGYW5vdXRQZWVycyIsInNoaWZ0IiwiZmlsdGVyIiwibWNhY2hlTm90VmFsaWRhdGVkQ291bnQiLCJub3RWYWxpZGF0ZWRDb3VudCIsInJlcXVlc3RNc0J5TXNnU2l6ZSIsImJhY2tvZmZTaXplIiwiY29ubmVjdGVkUGVlcnNCYWNrb2ZmU2VjIiwicmVzZXQiLCJleHBpcmVkTXMiLCJvYnNlcnZlIiwidG9waWNQZWVyc0NvdW50IiwibWVzaFBlZXJDb3VudHMiLCJzY29yZUJ5UGVlciIsImJlaGF2aW91clBlbmFsdHkiLCJwZWVySWRTdHIiLCJwZWVyU3RhdHMiLCJyZWdpc3RlclNjb3JlcyIsInJlZ2lzdGVyU2NvcmVQZXJNZXNoIiwic3ciLCJwYXJhbXMiLCJwZWVySVBzIiwidG9waWNTdHJUb0xhYmVsIiwicmVnaXN0ZXJTY29yZVdlaWdodHMiLCJnb3NzaXBzdWIiLCJpbml0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.js":
/*!****************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.js ***!
\****************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MessageCache: () => (/* binding */ MessageCache)\n/* harmony export */ });\nclass MessageCache {\n /**\n * Holds history of messages in timebounded history arrays\n */ constructor(/**\n * The number of indices in the cache history used for gossiping. That means that a message\n * won't get gossiped anymore when shift got called `gossip` many times after inserting the\n * message in the cache.\n */ gossip, historyCapacity, msgIdToStrFn){\n this.msgs = new Map();\n this.history = [];\n /** Track with accounting of messages in the mcache that are not yet validated */ this.notValidatedCount = 0;\n this.gossip = gossip;\n this.msgIdToStrFn = msgIdToStrFn;\n for(let i = 0; i < historyCapacity; i++){\n this.history[i] = [];\n }\n }\n get size() {\n return this.msgs.size;\n }\n /**\n * Adds a message to the current window and the cache\n * Returns true if the message is not known and is inserted in the cache\n */ put(messageId, msg, validated = false) {\n const { msgIdStr } = messageId;\n // Don't add duplicate entries to the cache.\n if (this.msgs.has(msgIdStr)) {\n return false;\n }\n this.msgs.set(msgIdStr, {\n message: msg,\n validated,\n originatingPeers: new Set(),\n iwantCounts: new Map()\n });\n this.history[0].push({\n ...messageId,\n topic: msg.topic\n });\n if (!validated) {\n this.notValidatedCount++;\n }\n return true;\n }\n observeDuplicate(msgId, fromPeerIdStr) {\n const entry = this.msgs.get(msgId);\n if (entry != null && // if the message is already validated, we don't need to store extra peers sending us\n // duplicates as the message has already been forwarded\n !entry.validated) {\n entry.originatingPeers.add(fromPeerIdStr);\n }\n }\n /**\n * Retrieves a message from the cache by its ID, if it is still present\n */ get(msgId) {\n return this.msgs.get(this.msgIdToStrFn(msgId))?.message;\n }\n /**\n * Increases the iwant count for the given message by one and returns the message together\n * with the iwant if the message exists.\n */ getWithIWantCount(msgIdStr, p) {\n const msg = this.msgs.get(msgIdStr);\n if (msg == null) {\n return null;\n }\n const count = (msg.iwantCounts.get(p) ?? 0) + 1;\n msg.iwantCounts.set(p, count);\n return {\n msg: msg.message,\n count\n };\n }\n /**\n * Retrieves a list of message IDs for a set of topics\n */ getGossipIDs(topics) {\n const msgIdsByTopic = new Map();\n for(let i = 0; i < this.gossip; i++){\n this.history[i].forEach((entry)=>{\n const msg = this.msgs.get(entry.msgIdStr);\n if ((msg?.validated ?? false) && topics.has(entry.topic)) {\n let msgIds = msgIdsByTopic.get(entry.topic);\n if (msgIds == null) {\n msgIds = [];\n msgIdsByTopic.set(entry.topic, msgIds);\n }\n msgIds.push(entry.msgId);\n }\n });\n }\n return msgIdsByTopic;\n }\n /**\n * Gets a message with msgId and tags it as validated.\n * This function also returns the known peers that have sent us this message. This is used to\n * prevent us sending redundant messages to peers who have already propagated it.\n */ validate(msgId) {\n const entry = this.msgs.get(msgId);\n if (entry == null) {\n return null;\n }\n if (!entry.validated) {\n this.notValidatedCount--;\n }\n const { message, originatingPeers } = entry;\n entry.validated = true;\n // Clear the known peers list (after a message is validated, it is forwarded and we no\n // longer need to store the originating peers).\n entry.originatingPeers = new Set();\n return {\n message,\n originatingPeers\n };\n }\n /**\n * Shifts the current window, discarding messages older than this.history.length of the cache\n */ shift() {\n const lastCacheEntries = this.history[this.history.length - 1];\n lastCacheEntries.forEach((cacheEntry)=>{\n const entry = this.msgs.get(cacheEntry.msgIdStr);\n if (entry != null) {\n this.msgs.delete(cacheEntry.msgIdStr);\n if (!entry.validated) {\n this.notValidatedCount--;\n }\n }\n });\n this.history.pop();\n this.history.unshift([]);\n }\n remove(msgId) {\n const entry = this.msgs.get(msgId);\n if (entry == null) {\n return null;\n }\n // Keep the message on the history vector, it will be dropped on a shift()\n this.msgs.delete(msgId);\n return entry;\n }\n} //# sourceMappingURL=message-cache.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL21lc3NhZ2UtY2FjaGUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPLE1BQU1BO0lBT1Q7O0tBRUMsR0FDREMsWUFDQTs7OztLQUlDLEdBQ0RDLE1BQU0sRUFBRUMsZUFBZSxFQUFFQyxZQUFZLENBQUU7YUFkdkNDLE9BQU8sSUFBSUM7YUFFWEMsVUFBVSxFQUFFO1FBQ1osK0VBQStFLFFBQy9FQyxvQkFBb0I7UUFXaEIsSUFBSSxDQUFDTixNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDRSxZQUFZLEdBQUdBO1FBQ3BCLElBQUssSUFBSUssSUFBSSxHQUFHQSxJQUFJTixpQkFBaUJNLElBQUs7WUFDdEMsSUFBSSxDQUFDRixPQUFPLENBQUNFLEVBQUUsR0FBRyxFQUFFO1FBQ3hCO0lBQ0o7SUFDQSxJQUFJQyxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUNMLElBQUksQ0FBQ0ssSUFBSTtJQUN6QjtJQUNBOzs7S0FHQyxHQUNEQyxJQUFJQyxTQUFTLEVBQUVDLEdBQUcsRUFBRUMsWUFBWSxLQUFLLEVBQUU7UUFDbkMsTUFBTSxFQUFFQyxRQUFRLEVBQUUsR0FBR0g7UUFDckIsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDUCxJQUFJLENBQUNXLEdBQUcsQ0FBQ0QsV0FBVztZQUN6QixPQUFPO1FBQ1g7UUFDQSxJQUFJLENBQUNWLElBQUksQ0FBQ1ksR0FBRyxDQUFDRixVQUFVO1lBQ3BCRyxTQUFTTDtZQUNUQztZQUNBSyxrQkFBa0IsSUFBSUM7WUFDdEJDLGFBQWEsSUFBSWY7UUFDckI7UUFDQSxJQUFJLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUNlLElBQUksQ0FBQztZQUFFLEdBQUdWLFNBQVM7WUFBRVcsT0FBT1YsSUFBSVUsS0FBSztRQUFDO1FBQ3RELElBQUksQ0FBQ1QsV0FBVztZQUNaLElBQUksQ0FBQ04saUJBQWlCO1FBQzFCO1FBQ0EsT0FBTztJQUNY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QUFpQjtnQkFDMUI7WUFDSjtRQUNKO1FBQ0EsSUFBSSxDQUFDRCxPQUFPLENBQUNxQyxHQUFHO1FBQ2hCLElBQUksQ0FBQ3JDLE9BQU8sQ0FBQ3NDLE9BQU8sQ0FBQyxFQUFFO0lBQzNCO0lBQ0FDLE9BQU9yQixLQUFLLEVBQUU7UUFDVixNQUFNRSxRQUFRLElBQUksQ0FBQ3RCLElBQUksQ0FBQ3VCLEdBQUcsQ0FBQ0g7UUFDNUIsSUFBSUUsU0FBUyxNQUFNO1lBQ2YsT0FBTztRQUNYO1FBQ0EsMEVBQTBFO1FBQzFFLElBQUksQ0FBQ3RCLElBQUksQ0FBQ3NDLE1BQU0sQ0FBQ2xCO1FBQ2pCLE9BQU9FO0lBQ1g7QUFDSixFQUNBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy9tZXNzYWdlLWNhY2hlLmpzP2QxZmEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIE1lc3NhZ2VDYWNoZSB7XG4gICAgZ29zc2lwO1xuICAgIG1zZ3MgPSBuZXcgTWFwKCk7XG4gICAgbXNnSWRUb1N0ckZuO1xuICAgIGhpc3RvcnkgPSBbXTtcbiAgICAvKiogVHJhY2sgd2l0aCBhY2NvdW50aW5nIG9mIG1lc3NhZ2VzIGluIHRoZSBtY2FjaGUgdGhhdCBhcmUgbm90IHlldCB2YWxpZGF0ZWQgKi9cbiAgICBub3RWYWxpZGF0ZWRDb3VudCA9IDA7XG4gICAgLyoqXG4gICAgICogSG9sZHMgaGlzdG9yeSBvZiBtZXNzYWdlcyBpbiB0aW1lYm91bmRlZCBoaXN0b3J5IGFycmF5c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgaW5kaWNlcyBpbiB0aGUgY2FjaGUgaGlzdG9yeSB1c2VkIGZvciBnb3NzaXBpbmcuIFRoYXQgbWVhbnMgdGhhdCBhIG1lc3NhZ2VcbiAgICAgKiB3b24ndCBnZXQgZ29zc2lwZWQgYW55bW9yZSB3aGVuIHNoaWZ0IGdvdCBjYWxsZWQgYGdvc3NpcGAgbWFueSB0aW1lcyBhZnRlciBpbnNlcnRpbmcgdGhlXG4gICAgICogbWVzc2FnZSBpbiB0aGUgY2FjaGUuXG4gICAgICovXG4gICAgZ29zc2lwLCBoaXN0b3J5Q2FwYWNpdHksIG1zZ0lkVG9TdHJGbikge1xuICAgICAgICB0aGlzLmdvc3NpcCA9IGdvc3NpcDtcbiAgICAgICAgdGhpcy5tc2dJZFRvU3RyRm4gPSBtc2dJZFRvU3RyRm47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGlzdG9yeUNhcGFjaXR5OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeVtpXSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tc2dzLnNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSBjdXJyZW50IHdpbmRvdyBhbmQgdGhlIGNhY2hlXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtZXNzYWdlIGlzIG5vdCBrbm93biBhbmQgaXMgaW5zZXJ0ZWQgaW4gdGhlIGNhY2hlXG4gICAgICovXG4gICAgcHV0KG1lc3NhZ2VJZCwgbXNnLCB2YWxpZGF0ZWQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB7IG1zZ0lkU3RyIH0gPSBtZXNzYWdlSWQ7XG4gICAgICAgIC8vIERvbid0IGFkZCBkdXBsaWNhdGUgZW50cmllcyB0byB0aGUgY2FjaGUuXG4gICAgICAgIGlmICh0aGlzLm1zZ3MuaGFzKG1zZ0lkU3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubXNncy5zZXQobXNnSWRTdHIsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1zZyxcbiAgICAgICAgICAgIHZhbGlkYXRlZCxcbiAgICAgICAgICAgIG9yaWdpbmF0aW5nUGVlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGl3YW50Q291bnRzOiBuZXcgTWFwKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeVswXS5wdXNoKHsgLi4ubWVzc2FnZUlkLCB0b3BpYzogbXNnLnRvcGljIH0pO1xuICAgICAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5ub3RWYWxpZGF0ZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBvYnNlcnZlRHVwbGljYXRlKG1zZ0lkLCBmcm9tUGVlcklkU3RyKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5tc2dzLmdldChtc2dJZCk7XG4gICAgICAgIGlmICgoZW50cnkgIT0gbnVsbCkgJiZcbiAgICAgICAgICAgIC8vIGlmIHRoZSBtZXNzYWdlIGlzIGFscmVhZHkgdmFsaWRhdGVkLCB3ZSBkb24ndCBuZWVkIHRvIHN0b3JlIGV4dHJhIHBlZXJzIHNlbmRpbmcgdXNcbiAgICAgICAgICAgIC8vIGR1cGxpY2F0ZXMgYXMgdGhlIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiBmb3J3YXJkZWRcbiAgICAgICAgICAgICFlbnRyeS52YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgIGVudHJ5Lm9yaWdpbmF0aW5nUGVlcnMuYWRkKGZyb21QZWVySWRTdHIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgY2FjaGUgYnkgaXRzIElELCBpZiBpdCBpcyBzdGlsbCBwcmVzZW50XG4gICAgICovXG4gICAgZ2V0KG1zZ0lkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1zZ3MuZ2V0KHRoaXMubXNnSWRUb1N0ckZuKG1zZ0lkKSk/Lm1lc3NhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluY3JlYXNlcyB0aGUgaXdhbnQgY291bnQgZm9yIHRoZSBnaXZlbiBtZXNzYWdlIGJ5IG9uZSBhbmQgcmV0dXJucyB0aGUgbWVzc2FnZSB0b2dldGhlclxuICAgICAqIHdpdGggdGhlIGl3YW50IGlmIHRoZSBtZXNzYWdlIGV4aXN0cy5cbiAgICAgKi9cbiAgICBnZXRXaXRoSVdhbnRDb3VudChtc2dJZFN0ciwgcCkge1xuICAgICAgICBjb25zdCBtc2cgPSB0aGlzLm1zZ3MuZ2V0KG1zZ0lkU3RyKTtcbiAgICAgICAgaWYgKG1zZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3VudCA9IChtc2cuaXdhbnRDb3VudHMuZ2V0KHApID8/IDApICsgMTtcbiAgICAgICAgbXNnLml3YW50Q291bnRzLnNldChwLCBjb3VudCk7XG4gICAgICAgIHJldHVybiB7IG1zZzogbXNnLm1lc3NhZ2UsIGNvdW50IH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgbWVzc2FnZSBJRHMgZm9yIGEgc2V0IG9mIHRvcGljc1xuICAgICAqL1xuICAgIGdldEdvc3NpcElEcyh0b3BpY3MpIHtcbiAgICAgICAgY29uc3QgbXNnSWRzQnlUb3BpYyA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdvc3NpcDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlbaV0uZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSB0aGlzLm1zZ3MuZ2V0KGVudHJ5Lm1zZ0lkU3RyKTtcbiAgICAgICAgICAgICAgICBpZiAoKG1zZz8udmFsaWRhdGVkID8/IGZhbHNlKSAmJiB0b3BpY3MuaGFzKGVudHJ5LnRvcGljKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbXNnSWRzID0gbXNnSWRzQnlUb3BpYy5nZXQoZW50cnkudG9waWMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnSWRzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZ0lkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnSWRzQnlUb3BpYy5zZXQoZW50cnkudG9waWMsIG1zZ0lkcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbXNnSWRzLnB1c2goZW50cnkubXNnSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtc2dJZHNCeVRvcGljO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgbWVzc2FnZSB3aXRoIG1zZ0lkIGFuZCB0YWdzIGl0IGFzIHZhbGlkYXRlZC5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsc28gcmV0dXJucyB0aGUga25vd24gcGVlcnMgdGhhdCBoYXZlIHNlbnQgdXMgdGhpcyBtZXNzYWdlLiBUaGlzIGlzIHVzZWQgdG9cbiAgICAgKiBwcmV2ZW50IHVzIHNlbmRpbmcgcmVkdW5kYW50IG1lc3NhZ2VzIHRvIHBlZXJzIHdobyBoYXZlIGFscmVhZHkgcHJvcGFnYXRlZCBpdC5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZShtc2dJZCkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubXNncy5nZXQobXNnSWQpO1xuICAgICAgICBpZiAoZW50cnkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnRyeS52YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm90VmFsaWRhdGVkQ291bnQtLTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIG9yaWdpbmF0aW5nUGVlcnMgfSA9IGVudHJ5O1xuICAgICAgICBlbnRyeS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICAvLyBDbGVhciB0aGUga25vd24gcGVlcnMgbGlzdCAoYWZ0ZXIgYSBtZXNzYWdlIGlzIHZhbGlkYXRlZCwgaXQgaXMgZm9yd2FyZGVkIGFuZCB3ZSBub1xuICAgICAgICAvLyBsb25nZXIgbmVlZCB0byBzdG9yZSB0aGUgb3JpZ2luYXRpbmcgcGVlcnMpLlxuICAgICAgICBlbnRyeS5vcmlnaW5hdGluZ1BlZXJzID0gbmV3IFNldCgpO1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlLCBvcmlnaW5hdGluZ1BlZXJzIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNoaWZ0cyB0aGUgY3VycmVudCB3aW5kb3csIGRpc2NhcmRpbmcgbWVzc2FnZXMgb2xkZXIgdGhhbiB0aGlzLmhpc3RvcnkubGVuZ3RoIG9mIHRoZSBjYWNoZVxuICAgICAqL1xuICAgIHNoaWZ0KCkge1xuICAgICAgICBjb25zdCBsYXN0Q2FjaGVFbnRyaWVzID0gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGggLSAxXTtcbiAgICAgICAgbGFzdENhY2hlRW50cmllcy5mb3JFYWNoKChjYWNoZUVudHJ5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubXNncy5nZXQoY2FjaGVFbnRyeS5tc2dJZFN0cik7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXNncy5kZWxldGUoY2FjaGVFbnRyeS5tc2dJZFN0cik7XG4gICAgICAgICAgICAgICAgaWYgKCFlbnRyeS52YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RWYWxpZGF0ZWRDb3VudC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wb3AoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnVuc2hpZnQoW10pO1xuICAgIH1cbiAgICByZW1vdmUobXNnSWQpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLm1zZ3MuZ2V0KG1zZ0lkKTtcbiAgICAgICAgaWYgKGVudHJ5ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIEtlZXAgdGhlIG1lc3NhZ2Ugb24gdGhlIGhpc3RvcnkgdmVjdG9yLCBpdCB3aWxsIGJlIGRyb3BwZWQgb24gYSBzaGlmdCgpXG4gICAgICAgIHRoaXMubXNncy5kZWxldGUobXNnSWQpO1xuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVzc2FnZS1jYWNoZS5qcy5tYXAiXSwibmFtZXMiOlsiTWVzc2FnZUNhY2hlIiwiY29uc3RydWN0b3IiLCJnb3NzaXAiLCJoaXN0b3J5Q2FwYWNpdHkiLCJtc2dJZFRvU3RyRm4iLCJtc2dzIiwiTWFwIiwiaGlzdG9yeSIsIm5vdFZhbGlkYXRlZENvdW50IiwiaSIsInNpemUiLCJwdXQiLCJtZXNzYWdlSWQiLCJtc2ciLCJ2YWxpZGF0ZWQiLCJtc2dJZFN0ciIsImhhcyIsInNldCIsIm1lc3NhZ2UiLCJvcmlnaW5hdGluZ1BlZXJzIiwiU2V0IiwiaXdhbnRDb3VudHMiLCJwdXNoIiwidG9waWMiLCJvYnNlcnZlRHVwbGljYXRlIiwibXNnSWQiLCJmcm9tUGVlcklkU3RyIiwiZW50cnkiLCJnZXQiLCJhZGQiLCJnZXRXaXRoSVdhbnRDb3VudCIsInAiLCJjb3VudCIsImdldEdvc3NpcElEcyIsInRvcGljcyIsIm1zZ0lkc0J5VG9waWMiLCJmb3JFYWNoIiwibXNnSWRzIiwidmFsaWRhdGUiLCJzaGlmdCIsImxhc3RDYWNoZUVudHJpZXMiLCJsZW5ndGgiLCJjYWNoZUVudHJ5IiwiZGVsZXRlIiwicG9wIiwidW5zaGlmdCIsInJlbW92ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decodeRpc.js":
/*!********************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decodeRpc.js ***!
\********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defaultDecodeRpcLimits: () => (/* binding */ defaultDecodeRpcLimits)\n/* harmony export */ });\nconst defaultDecodeRpcLimits = {\n maxSubscriptions: Infinity,\n maxMessages: Infinity,\n maxIhaveMessageIDs: Infinity,\n maxIwantMessageIDs: Infinity,\n maxControlMessages: Infinity,\n maxPeerInfos: Infinity\n}; //# sourceMappingURL=decodeRpc.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL21lc3NhZ2UvZGVjb2RlUnBjLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyxNQUFNQSx5QkFBeUI7SUFDbENDLGtCQUFrQkM7SUFDbEJDLGFBQWFEO0lBQ2JFLG9CQUFvQkY7SUFDcEJHLG9CQUFvQkg7SUFDcEJJLG9CQUFvQko7SUFDcEJLLGNBQWNMO0FBQ2xCLEVBQUUsQ0FDRixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvbWVzc2FnZS9kZWNvZGVScGMuanM/ZGY2MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZGVmYXVsdERlY29kZVJwY0xpbWl0cyA9IHtcbiAgICBtYXhTdWJzY3JpcHRpb25zOiBJbmZpbml0eSxcbiAgICBtYXhNZXNzYWdlczogSW5maW5pdHksXG4gICAgbWF4SWhhdmVNZXNzYWdlSURzOiBJbmZpbml0eSxcbiAgICBtYXhJd2FudE1lc3NhZ2VJRHM6IEluZmluaXR5LFxuICAgIG1heENvbnRyb2xNZXNzYWdlczogSW5maW5pdHksXG4gICAgbWF4UGVlckluZm9zOiBJbmZpbml0eVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlY29kZVJwYy5qcy5tYXAiXSwibmFtZXMiOlsiZGVmYXVsdERlY29kZVJwY0xpbWl0cyIsIm1heFN1YnNjcmlwdGlvbnMiLCJJbmZpbml0eSIsIm1heE1lc3NhZ2VzIiwibWF4SWhhdmVNZXNzYWdlSURzIiwibWF4SXdhbnRNZXNzYWdlSURzIiwibWF4Q29udHJvbE1lc3NhZ2VzIiwibWF4UGVlckluZm9zIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decodeRpc.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.js":
/*!**************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.js ***!
\**************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RPC: () => (/* binding */ RPC)\n/* harmony export */ });\n/* harmony import */ var protons_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! protons-runtime */ \"(ssr)/./node_modules/protons-runtime/dist/src/index.js\");\n/* eslint-disable import/export */ /* eslint-disable complexity */ /* eslint-disable @typescript-eslint/no-namespace */ /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */ /* eslint-disable @typescript-eslint/no-empty-interface */ \nvar RPC;\n(function(RPC) {\n let SubOpts;\n (function(SubOpts) {\n let _codec;\n SubOpts.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.subscribe != null) {\n w.uint32(8);\n w.bool(obj.subscribe);\n }\n if (obj.topic != null) {\n w.uint32(18);\n w.string(obj.topic);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {};\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.subscribe = reader.bool();\n break;\n }\n case 2:\n {\n obj.topic = reader.string();\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n SubOpts.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, SubOpts.codec());\n };\n SubOpts.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, SubOpts.codec(), opts);\n };\n })(SubOpts = RPC.SubOpts || (RPC.SubOpts = {}));\n let Message;\n (function(Message) {\n let _codec;\n Message.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.from != null) {\n w.uint32(10);\n w.bytes(obj.from);\n }\n if (obj.data != null) {\n w.uint32(18);\n w.bytes(obj.data);\n }\n if (obj.seqno != null) {\n w.uint32(26);\n w.bytes(obj.seqno);\n }\n if (obj.topic != null && obj.topic !== \"\") {\n w.uint32(34);\n w.string(obj.topic);\n }\n if (obj.signature != null) {\n w.uint32(42);\n w.bytes(obj.signature);\n }\n if (obj.key != null) {\n w.uint32(50);\n w.bytes(obj.key);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {\n topic: \"\"\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.from = reader.bytes();\n break;\n }\n case 2:\n {\n obj.data = reader.bytes();\n break;\n }\n case 3:\n {\n obj.seqno = reader.bytes();\n break;\n }\n case 4:\n {\n obj.topic = reader.string();\n break;\n }\n case 5:\n {\n obj.signature = reader.bytes();\n break;\n }\n case 6:\n {\n obj.key = reader.bytes();\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n Message.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, Message.codec());\n };\n Message.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, Message.codec(), opts);\n };\n })(Message = RPC.Message || (RPC.Message = {}));\n let ControlMessage;\n (function(ControlMessage) {\n let _codec;\n ControlMessage.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.ihave != null) {\n for (const value of obj.ihave){\n w.uint32(10);\n RPC.ControlIHave.codec().encode(value, w);\n }\n }\n if (obj.iwant != null) {\n for (const value of obj.iwant){\n w.uint32(18);\n RPC.ControlIWant.codec().encode(value, w);\n }\n }\n if (obj.graft != null) {\n for (const value of obj.graft){\n w.uint32(26);\n RPC.ControlGraft.codec().encode(value, w);\n }\n }\n if (obj.prune != null) {\n for (const value of obj.prune){\n w.uint32(34);\n RPC.ControlPrune.codec().encode(value, w);\n }\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {\n ihave: [],\n iwant: [],\n graft: [],\n prune: []\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n if (opts.limits?.ihave != null && obj.ihave.length === opts.limits.ihave) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"ihave\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.ihave.push(RPC.ControlIHave.codec().decode(reader, reader.uint32()));\n break;\n }\n case 2:\n {\n if (opts.limits?.iwant != null && obj.iwant.length === opts.limits.iwant) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"iwant\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.iwant.push(RPC.ControlIWant.codec().decode(reader, reader.uint32()));\n break;\n }\n case 3:\n {\n if (opts.limits?.graft != null && obj.graft.length === opts.limits.graft) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"graft\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.graft.push(RPC.ControlGraft.codec().decode(reader, reader.uint32()));\n break;\n }\n case 4:\n {\n if (opts.limits?.prune != null && obj.prune.length === opts.limits.prune) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"prune\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.prune.push(RPC.ControlPrune.codec().decode(reader, reader.uint32()));\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n ControlMessage.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, ControlMessage.codec());\n };\n ControlMessage.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, ControlMessage.codec(), opts);\n };\n })(ControlMessage = RPC.ControlMessage || (RPC.ControlMessage = {}));\n let ControlIHave;\n (function(ControlIHave) {\n let _codec;\n ControlIHave.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.topicID != null) {\n w.uint32(10);\n w.string(obj.topicID);\n }\n if (obj.messageIDs != null) {\n for (const value of obj.messageIDs){\n w.uint32(18);\n w.bytes(value);\n }\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {\n messageIDs: []\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.topicID = reader.string();\n break;\n }\n case 2:\n {\n if (opts.limits?.messageIDs != null && obj.messageIDs.length === opts.limits.messageIDs) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"messageIDs\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.messageIDs.push(reader.bytes());\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n ControlIHave.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, ControlIHave.codec());\n };\n ControlIHave.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, ControlIHave.codec(), opts);\n };\n })(ControlIHave = RPC.ControlIHave || (RPC.ControlIHave = {}));\n let ControlIWant;\n (function(ControlIWant) {\n let _codec;\n ControlIWant.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.messageIDs != null) {\n for (const value of obj.messageIDs){\n w.uint32(10);\n w.bytes(value);\n }\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {\n messageIDs: []\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n if (opts.limits?.messageIDs != null && obj.messageIDs.length === opts.limits.messageIDs) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"messageIDs\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.messageIDs.push(reader.bytes());\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n ControlIWant.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, ControlIWant.codec());\n };\n ControlIWant.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, ControlIWant.codec(), opts);\n };\n })(ControlIWant = RPC.ControlIWant || (RPC.ControlIWant = {}));\n let ControlGraft;\n (function(ControlGraft) {\n let _codec;\n ControlGraft.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.topicID != null) {\n w.uint32(10);\n w.string(obj.topicID);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {};\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.topicID = reader.string();\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n ControlGraft.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, ControlGraft.codec());\n };\n ControlGraft.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, ControlGraft.codec(), opts);\n };\n })(ControlGraft = RPC.ControlGraft || (RPC.ControlGraft = {}));\n let ControlPrune;\n (function(ControlPrune) {\n let _codec;\n ControlPrune.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.topicID != null) {\n w.uint32(10);\n w.string(obj.topicID);\n }\n if (obj.peers != null) {\n for (const value of obj.peers){\n w.uint32(18);\n RPC.PeerInfo.codec().encode(value, w);\n }\n }\n if (obj.backoff != null) {\n w.uint32(24);\n w.uint64Number(obj.backoff);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {\n peers: []\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.topicID = reader.string();\n break;\n }\n case 2:\n {\n if (opts.limits?.peers != null && obj.peers.length === opts.limits.peers) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"peers\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.peers.push(RPC.PeerInfo.codec().decode(reader, reader.uint32()));\n break;\n }\n case 3:\n {\n obj.backoff = reader.uint64Number();\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n ControlPrune.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, ControlPrune.codec());\n };\n ControlPrune.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, ControlPrune.codec(), opts);\n };\n })(ControlPrune = RPC.ControlPrune || (RPC.ControlPrune = {}));\n let PeerInfo;\n (function(PeerInfo) {\n let _codec;\n PeerInfo.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.peerID != null) {\n w.uint32(10);\n w.bytes(obj.peerID);\n }\n if (obj.signedPeerRecord != null) {\n w.uint32(18);\n w.bytes(obj.signedPeerRecord);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {};\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.peerID = reader.bytes();\n break;\n }\n case 2:\n {\n obj.signedPeerRecord = reader.bytes();\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n PeerInfo.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, PeerInfo.codec());\n };\n PeerInfo.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, PeerInfo.codec(), opts);\n };\n })(PeerInfo = RPC.PeerInfo || (RPC.PeerInfo = {}));\n let _codec;\n RPC.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.subscriptions != null) {\n for (const value of obj.subscriptions){\n w.uint32(10);\n RPC.SubOpts.codec().encode(value, w);\n }\n }\n if (obj.messages != null) {\n for (const value of obj.messages){\n w.uint32(18);\n RPC.Message.codec().encode(value, w);\n }\n }\n if (obj.control != null) {\n w.uint32(26);\n RPC.ControlMessage.codec().encode(obj.control, w);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length, opts = {})=>{\n const obj = {\n subscriptions: [],\n messages: []\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n if (opts.limits?.subscriptions != null && obj.subscriptions.length === opts.limits.subscriptions) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"subscriptions\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.subscriptions.push(RPC.SubOpts.codec().decode(reader, reader.uint32()));\n break;\n }\n case 2:\n {\n if (opts.limits?.messages != null && obj.messages.length === opts.limits.messages) {\n throw new protons_runtime__WEBPACK_IMPORTED_MODULE_0__.CodeError('decode error - map field \"messages\" had too many elements', \"ERR_MAX_LENGTH\");\n }\n obj.messages.push(RPC.Message.codec().decode(reader, reader.uint32()));\n break;\n }\n case 3:\n {\n obj.control = RPC.ControlMessage.codec().decode(reader, reader.uint32());\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n RPC.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, RPC.codec());\n };\n RPC.decode = (buf, opts)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, RPC.codec(), opts);\n };\n})(RPC || (RPC = {})); //# sourceMappingURL=rpc.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL21lc3NhZ2UvcnBjLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0NBQWdDLEdBQ2hDLDZCQUE2QixHQUM3QixrREFBa0QsR0FDbEQsNEVBQTRFLEdBQzVFLHdEQUF3RCxHQUMyQjtBQUM1RSxJQUFJSSxJQUFJO0FBQ2QsVUFBVUEsR0FBRztJQUNWLElBQUlDO0lBQ0gsVUFBVUEsT0FBTztRQUNkLElBQUlDO1FBQ0pELFFBQVFFLEtBQUssR0FBRztZQUNaLElBQUlELFVBQVUsTUFBTTtnQkFDaEJBLFNBQVNILHdEQUFPQSxDQUFDLENBQUNLLEtBQUtDLEdBQUdDLE9BQU8sQ0FBQyxDQUFDO29CQUMvQixJQUFJQSxLQUFLQyxlQUFlLEtBQUssT0FBTzt3QkFDaENGLEVBQUVHLElBQUk7b0JBQ1Y7b0JBQ0EsSUFBSUosSUFBSUssU0FBUyxJQUFJLE1BQU07d0JBQ3ZCSixFQUFFSyxNQUFNLENBQUM7d0JBQ1RMLEVBQUVNLElBQUksQ0FBQ1AsSUFBSUssU0FBUztvQkFDeEI7b0JBQ0EsSUFBSUwsSUFBSVEsS0FBSyxJQUFJLE1BQU07d0JBQ25CUCxFQUFFSyxNQUFNLENBQUM7d0JBQ1RMLEVBQUVRLE1BQU0sQ0FBQ1QsSUFBSVEsS0FBSztvQkFDdEI7b0JBQ0EsSUFBSU4sS0FBS0MsZUFBZSxLQUFLLE9BQU87d0JBQ2hDRixFQUFFUyxNQUFNO29CQUNaO2dCQUNKLEdBQUcsQ0FBQ0MsUUFBUUMsUUFBUVYsT0FBTyxDQUFDLENBQUM7b0JBQ3pCLE1BQU1GLE1BQU0sQ0FBQztvQkFDYixNQUFNYSxNQUFNRCxVQUFVLE9BQU9ELE9BQU9HLEdBQUcsR0FBR0gsT0FBT0ksR0FBRyxHQUFHSDtvQkFDdkQsTUFBT0QsT0FBT0ksR0FBRyxHQUFHRixJQUFLO3dCQUNyQixNQUFNRyxNQUFNTCxPQUFPTCxNQUFNO3dCQUN6QixPQUFRVSxRQUFROzRCQUNaLEtBQUs7Z0NBQUc7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O2dDQUNKLElBQUlKLEtBQUtvQyxNQUFNLEVBQUVXLFlBQVksUUFBUWpELElBQUlpRCxRQUFRLENBQUNyQyxNQUFNLEtBQUtWLEtBQUtvQyxNQUFNLENBQUNXLFFBQVEsRUFBRTtvQ0FDL0UsTUFBTSxJQUFJekQsc0RBQVNBLENBQUMsNkRBQTZEO2dDQUNyRjtnQ0FDQVEsSUFBSWlELFFBQVEsQ0FBQ1YsSUFBSSxDQUFDM0MsSUFBSXlCLE9BQU8sQ0FBQ3RCLEtBQUssR0FBR29CLE1BQU0sQ0FBQ1IsUUFBUUEsT0FBT0wsTUFBTTtnQ0FDbEU7NEJBQ0o7d0JBQ0EsS0FBSzs0QkFBRztnQ0FDSk4sSUFBSWtELE9BQU8sR0FBR3RELElBQUlnQyxjQUFjLENBQUM3QixLQUFLLEdBQUdvQixNQUFNLENBQUNSLFFBQVFBLE9BQU9MLE1BQU07Z0NBQ3JFOzRCQUNKO3dCQUNBOzRCQUFTO2dDQUNMSyxPQUFPTSxRQUFRLENBQUNELE1BQU07Z0NBQ3RCOzRCQUNKO29CQUNKO2dCQUNKO2dCQUNBLE9BQU9oQjtZQUNYO1FBQ0o7UUFDQSxPQUFPRjtJQUNYO0lBQ0FGLElBQUlzQixNQUFNLEdBQUcsQ0FBQ2xCO1FBQ1YsT0FBT04sOERBQWFBLENBQUNNLEtBQUtKLElBQUlHLEtBQUs7SUFDdkM7SUFDQUgsSUFBSXVCLE1BQU0sR0FBRyxDQUFDQyxLQUFLbEI7UUFDZixPQUFPVCw4REFBYUEsQ0FBQzJCLEtBQUt4QixJQUFJRyxLQUFLLElBQUlHO0lBQzNDO0FBQ0osR0FBR04sT0FBUUEsQ0FBQUEsTUFBTSxDQUFDLEtBQ2xCLCtCQUErQiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy9tZXNzYWdlL3JwYy5qcz8xY2VkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9leHBvcnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1ib29sZWFuLWxpdGVyYWwtY29tcGFyZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqL1xuaW1wb3J0IHsgQ29kZUVycm9yLCBkZWNvZGVNZXNzYWdlLCBlbmNvZGVNZXNzYWdlLCBtZXNzYWdlIH0gZnJvbSAncHJvdG9ucy1ydW50aW1lJztcbmV4cG9ydCB2YXIgUlBDO1xuKGZ1bmN0aW9uIChSUEMpIHtcbiAgICBsZXQgU3ViT3B0cztcbiAgICAoZnVuY3Rpb24gKFN1Yk9wdHMpIHtcbiAgICAgICAgbGV0IF9jb2RlYztcbiAgICAgICAgU3ViT3B0cy5jb2RlYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9jb2RlYyA9IG1lc3NhZ2UoKG9iaiwgdywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouc3Vic2NyaWJlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcudWludDMyKDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5ib29sKG9iai5zdWJzY3JpYmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudG9waWMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5zdHJpbmcob2JqLnRvcGljKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgKHJlYWRlciwgbGVuZ3RoLCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PSBudWxsID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouc3Vic2NyaWJlID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoudG9waWMgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NvZGVjO1xuICAgICAgICB9O1xuICAgICAgICBTdWJPcHRzLmVuY29kZSA9IChvYmopID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVNZXNzYWdlKG9iaiwgU3ViT3B0cy5jb2RlYygpKTtcbiAgICAgICAgfTtcbiAgICAgICAgU3ViT3B0cy5kZWNvZGUgPSAoYnVmLCBvcHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlTWVzc2FnZShidWYsIFN1Yk9wdHMuY29kZWMoKSwgb3B0cyk7XG4gICAgICAgIH07XG4gICAgfSkoU3ViT3B0cyA9IFJQQy5TdWJPcHRzIHx8IChSUEMuU3ViT3B0cyA9IHt9KSk7XG4gICAgbGV0IE1lc3NhZ2U7XG4gICAgKGZ1bmN0aW9uIChNZXNzYWdlKSB7XG4gICAgICAgIGxldCBfY29kZWM7XG4gICAgICAgIE1lc3NhZ2UuY29kZWMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoX2NvZGVjID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfY29kZWMgPSBtZXNzYWdlKChvYmosIHcsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmZvcmsoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5ieXRlcyhvYmouZnJvbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5kYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcudWludDMyKDE4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcuYnl0ZXMob2JqLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouc2Vxbm8gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMjYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5ieXRlcyhvYmouc2Vxbm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgob2JqLnRvcGljICE9IG51bGwgJiYgb2JqLnRvcGljICE9PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcudWludDMyKDM0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcuc3RyaW5nKG9iai50b3BpYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5zaWduYXR1cmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoNDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5ieXRlcyhvYmouc2lnbmF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMig1MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmJ5dGVzKG9iai5rZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAocmVhZGVyLCBsZW5ndGgsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BpYzogJydcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbGVuZ3RoID09IG51bGwgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5mcm9tID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmRhdGEgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouc2Vxbm8gPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoudG9waWMgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnNpZ25hdHVyZSA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5rZXkgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY29kZWM7XG4gICAgICAgIH07XG4gICAgICAgIE1lc3NhZ2UuZW5jb2RlID0gKG9iaikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZU1lc3NhZ2Uob2JqLCBNZXNzYWdlLmNvZGVjKCkpO1xuICAgICAgICB9O1xuICAgICAgICBNZXNzYWdlLmRlY29kZSA9IChidWYsIG9wdHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVNZXNzYWdlKGJ1ZiwgTWVzc2FnZS5jb2RlYygpLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICB9KShNZXNzYWdlID0gUlBDLk1lc3NhZ2UgfHwgKFJQQy5NZXNzYWdlID0ge30pKTtcbiAgICBsZXQgQ29udHJvbE1lc3NhZ2U7XG4gICAgKGZ1bmN0aW9uIChDb250cm9sTWVzc2FnZSkge1xuICAgICAgICBsZXQgX2NvZGVjO1xuICAgICAgICBDb250cm9sTWVzc2FnZS5jb2RlYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9jb2RlYyA9IG1lc3NhZ2UoKG9iaiwgdywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouaWhhdmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmouaWhhdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUlBDLkNvbnRyb2xJSGF2ZS5jb2RlYygpLmVuY29kZSh2YWx1ZSwgdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5pd2FudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iai5pd2FudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcudWludDMyKDE4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUEMuQ29udHJvbElXYW50LmNvZGVjKCkuZW5jb2RlKHZhbHVlLCB3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmdyYWZ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqLmdyYWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMjYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJQQy5Db250cm9sR3JhZnQuY29kZWMoKS5lbmNvZGUodmFsdWUsIHcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoucHJ1bmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmoucHJ1bmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigzNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUlBDLkNvbnRyb2xQcnVuZS5jb2RlYygpLmVuY29kZSh2YWx1ZSwgdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGVuZ3RoRGVsaW1pdGVkICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIChyZWFkZXIsIGxlbmd0aCwgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGloYXZlOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl3YW50OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWZ0OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lOiBbXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsZW5ndGggPT0gbnVsbCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGltaXRzPy5paGF2ZSAhPSBudWxsICYmIG9iai5paGF2ZS5sZW5ndGggPT09IG9wdHMubGltaXRzLmloYXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdkZWNvZGUgZXJyb3IgLSBtYXAgZmllbGQgXCJpaGF2ZVwiIGhhZCB0b28gbWFueSBlbGVtZW50cycsICdFUlJfTUFYX0xFTkdUSCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5paGF2ZS5wdXNoKFJQQy5Db250cm9sSUhhdmUuY29kZWMoKS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5saW1pdHM/Lml3YW50ICE9IG51bGwgJiYgb2JqLml3YW50Lmxlbmd0aCA9PT0gb3B0cy5saW1pdHMuaXdhbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2RlY29kZSBlcnJvciAtIG1hcCBmaWVsZCBcIml3YW50XCIgaGFkIHRvbyBtYW55IGVsZW1lbnRzJywgJ0VSUl9NQVhfTEVOR1RIJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLml3YW50LnB1c2goUlBDLkNvbnRyb2xJV2FudC5jb2RlYygpLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxpbWl0cz8uZ3JhZnQgIT0gbnVsbCAmJiBvYmouZ3JhZnQubGVuZ3RoID09PSBvcHRzLmxpbWl0cy5ncmFmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignZGVjb2RlIGVycm9yIC0gbWFwIGZpZWxkIFwiZ3JhZnRcIiBoYWQgdG9vIG1hbnkgZWxlbWVudHMnLCAnRVJSX01BWF9MRU5HVEgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZ3JhZnQucHVzaChSUEMuQ29udHJvbEdyYWZ0LmNvZGVjKCkuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGltaXRzPy5wcnVuZSAhPSBudWxsICYmIG9iai5wcnVuZS5sZW5ndGggPT09IG9wdHMubGltaXRzLnBydW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdkZWNvZGUgZXJyb3IgLSBtYXAgZmllbGQgXCJwcnVuZVwiIGhhZCB0b28gbWFueSBlbGVtZW50cycsICdFUlJfTUFYX0xFTkdUSCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wcnVuZS5wdXNoKFJQQy5Db250cm9sUHJ1bmUuY29kZWMoKS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY29kZWM7XG4gICAgICAgIH07XG4gICAgICAgIENvbnRyb2xNZXNzYWdlLmVuY29kZSA9IChvYmopID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVNZXNzYWdlKG9iaiwgQ29udHJvbE1lc3NhZ2UuY29kZWMoKSk7XG4gICAgICAgIH07XG4gICAgICAgIENvbnRyb2xNZXNzYWdlLmRlY29kZSA9IChidWYsIG9wdHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVNZXNzYWdlKGJ1ZiwgQ29udHJvbE1lc3NhZ2UuY29kZWMoKSwgb3B0cyk7XG4gICAgICAgIH07XG4gICAgfSkoQ29udHJvbE1lc3NhZ2UgPSBSUEMuQ29udHJvbE1lc3NhZ2UgfHwgKFJQQy5Db250cm9sTWVzc2FnZSA9IHt9KSk7XG4gICAgbGV0IENvbnRyb2xJSGF2ZTtcbiAgICAoZnVuY3Rpb24gKENvbnRyb2xJSGF2ZSkge1xuICAgICAgICBsZXQgX2NvZGVjO1xuICAgICAgICBDb250cm9sSUhhdmUuY29kZWMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoX2NvZGVjID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfY29kZWMgPSBtZXNzYWdlKChvYmosIHcsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmZvcmsoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnRvcGljSUQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5zdHJpbmcob2JqLnRvcGljSUQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoubWVzc2FnZUlEcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iai5tZXNzYWdlSURzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcuYnl0ZXModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAocmVhZGVyLCBsZW5ndGgsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSURzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsZW5ndGggPT0gbnVsbCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRvcGljSUQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGltaXRzPy5tZXNzYWdlSURzICE9IG51bGwgJiYgb2JqLm1lc3NhZ2VJRHMubGVuZ3RoID09PSBvcHRzLmxpbWl0cy5tZXNzYWdlSURzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdkZWNvZGUgZXJyb3IgLSBtYXAgZmllbGQgXCJtZXNzYWdlSURzXCIgaGFkIHRvbyBtYW55IGVsZW1lbnRzJywgJ0VSUl9NQVhfTEVOR1RIJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLm1lc3NhZ2VJRHMucHVzaChyZWFkZXIuYnl0ZXMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NvZGVjO1xuICAgICAgICB9O1xuICAgICAgICBDb250cm9sSUhhdmUuZW5jb2RlID0gKG9iaikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZU1lc3NhZ2Uob2JqLCBDb250cm9sSUhhdmUuY29kZWMoKSk7XG4gICAgICAgIH07XG4gICAgICAgIENvbnRyb2xJSGF2ZS5kZWNvZGUgPSAoYnVmLCBvcHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlTWVzc2FnZShidWYsIENvbnRyb2xJSGF2ZS5jb2RlYygpLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICB9KShDb250cm9sSUhhdmUgPSBSUEMuQ29udHJvbElIYXZlIHx8IChSUEMuQ29udHJvbElIYXZlID0ge30pKTtcbiAgICBsZXQgQ29udHJvbElXYW50O1xuICAgIChmdW5jdGlvbiAoQ29udHJvbElXYW50KSB7XG4gICAgICAgIGxldCBfY29kZWM7XG4gICAgICAgIENvbnRyb2xJV2FudC5jb2RlYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9jb2RlYyA9IG1lc3NhZ2UoKG9iaiwgdywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoubWVzc2FnZUlEcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iai5tZXNzYWdlSURzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcuYnl0ZXModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAocmVhZGVyLCBsZW5ndGgsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSURzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsZW5ndGggPT0gbnVsbCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGltaXRzPy5tZXNzYWdlSURzICE9IG51bGwgJiYgb2JqLm1lc3NhZ2VJRHMubGVuZ3RoID09PSBvcHRzLmxpbWl0cy5tZXNzYWdlSURzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdkZWNvZGUgZXJyb3IgLSBtYXAgZmllbGQgXCJtZXNzYWdlSURzXCIgaGFkIHRvbyBtYW55IGVsZW1lbnRzJywgJ0VSUl9NQVhfTEVOR1RIJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLm1lc3NhZ2VJRHMucHVzaChyZWFkZXIuYnl0ZXMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NvZGVjO1xuICAgICAgICB9O1xuICAgICAgICBDb250cm9sSVdhbnQuZW5jb2RlID0gKG9iaikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZU1lc3NhZ2Uob2JqLCBDb250cm9sSVdhbnQuY29kZWMoKSk7XG4gICAgICAgIH07XG4gICAgICAgIENvbnRyb2xJV2FudC5kZWNvZGUgPSAoYnVmLCBvcHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlTWVzc2FnZShidWYsIENvbnRyb2xJV2FudC5jb2RlYygpLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICB9KShDb250cm9sSVdhbnQgPSBSUEMuQ29udHJvbElXYW50IHx8IChSUEMuQ29udHJvbElXYW50ID0ge30pKTtcbiAgICBsZXQgQ29udHJvbEdyYWZ0O1xuICAgIChmdW5jdGlvbiAoQ29udHJvbEdyYWZ0KSB7XG4gICAgICAgIGxldCBfY29kZWM7XG4gICAgICAgIENvbnRyb2xHcmFmdC5jb2RlYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9jb2RlYyA9IG1lc3NhZ2UoKG9iaiwgdywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudG9waWNJRCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnN0cmluZyhvYmoudG9waWNJRCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGVuZ3RoRGVsaW1pdGVkICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIChyZWFkZXIsIGxlbmd0aCwgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsZW5ndGggPT0gbnVsbCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRvcGljSUQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NvZGVjO1xuICAgICAgICB9O1xuICAgICAgICBDb250cm9sR3JhZnQuZW5jb2RlID0gKG9iaikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZU1lc3NhZ2Uob2JqLCBDb250cm9sR3JhZnQuY29kZWMoKSk7XG4gICAgICAgIH07XG4gICAgICAgIENvbnRyb2xHcmFmdC5kZWNvZGUgPSAoYnVmLCBvcHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlTWVzc2FnZShidWYsIENvbnRyb2xHcmFmdC5jb2RlYygpLCBvcHRzKTtcbiAgICAgICAgfTtcbiAgICB9KShDb250cm9sR3JhZnQgPSBSUEMuQ29udHJvbEdyYWZ0IHx8IChSUEMuQ29udHJvbEdyYWZ0ID0ge30pKTtcbiAgICBsZXQgQ29udHJvbFBydW5lO1xuICAgIChmdW5jdGlvbiAoQ29udHJvbFBydW5lKSB7XG4gICAgICAgIGxldCBfY29kZWM7XG4gICAgICAgIENvbnRyb2xQcnVuZS5jb2RlYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9jb2RlYyA9IG1lc3NhZ2UoKG9iaiwgdywgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoudG9waWNJRCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnN0cmluZyhvYmoudG9waWNJRCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5wZWVycyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iai5wZWVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcudWludDMyKDE4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSUEMuUGVlckluZm8uY29kZWMoKS5lbmNvZGUodmFsdWUsIHcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYmFja29mZiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigyNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQ2NE51bWJlcihvYmouYmFja29mZik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGVuZ3RoRGVsaW1pdGVkICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdy5sZGVsaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIChyZWFkZXIsIGxlbmd0aCwgb3B0cyA9IHt9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsZW5ndGggPT0gbnVsbCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnRvcGljSUQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGltaXRzPy5wZWVycyAhPSBudWxsICYmIG9iai5wZWVycy5sZW5ndGggPT09IG9wdHMubGltaXRzLnBlZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdkZWNvZGUgZXJyb3IgLSBtYXAgZmllbGQgXCJwZWVyc1wiIGhhZCB0b28gbWFueSBlbGVtZW50cycsICdFUlJfTUFYX0xFTkdUSCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wZWVycy5wdXNoKFJQQy5QZWVySW5mby5jb2RlYygpLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5iYWNrb2ZmID0gcmVhZGVyLnVpbnQ2NE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9jb2RlYztcbiAgICAgICAgfTtcbiAgICAgICAgQ29udHJvbFBydW5lLmVuY29kZSA9IChvYmopID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVNZXNzYWdlKG9iaiwgQ29udHJvbFBydW5lLmNvZGVjKCkpO1xuICAgICAgICB9O1xuICAgICAgICBDb250cm9sUHJ1bmUuZGVjb2RlID0gKGJ1Ziwgb3B0cykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlY29kZU1lc3NhZ2UoYnVmLCBDb250cm9sUHJ1bmUuY29kZWMoKSwgb3B0cyk7XG4gICAgICAgIH07XG4gICAgfSkoQ29udHJvbFBydW5lID0gUlBDLkNvbnRyb2xQcnVuZSB8fCAoUlBDLkNvbnRyb2xQcnVuZSA9IHt9KSk7XG4gICAgbGV0IFBlZXJJbmZvO1xuICAgIChmdW5jdGlvbiAoUGVlckluZm8pIHtcbiAgICAgICAgbGV0IF9jb2RlYztcbiAgICAgICAgUGVlckluZm8uY29kZWMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoX2NvZGVjID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfY29kZWMgPSBtZXNzYWdlKChvYmosIHcsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmZvcmsoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnBlZXJJRCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmJ5dGVzKG9iai5wZWVySUQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouc2lnbmVkUGVlclJlY29yZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmJ5dGVzKG9iai5zaWduZWRQZWVyUmVjb3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgKHJlYWRlciwgbGVuZ3RoLCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PSBudWxsID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucGVlcklEID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnNpZ25lZFBlZXJSZWNvcmQgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY29kZWM7XG4gICAgICAgIH07XG4gICAgICAgIFBlZXJJbmZvLmVuY29kZSA9IChvYmopID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVNZXNzYWdlKG9iaiwgUGVlckluZm8uY29kZWMoKSk7XG4gICAgICAgIH07XG4gICAgICAgIFBlZXJJbmZvLmRlY29kZSA9IChidWYsIG9wdHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVNZXNzYWdlKGJ1ZiwgUGVlckluZm8uY29kZWMoKSwgb3B0cyk7XG4gICAgICAgIH07XG4gICAgfSkoUGVlckluZm8gPSBSUEMuUGVlckluZm8gfHwgKFJQQy5QZWVySW5mbyA9IHt9KSk7XG4gICAgbGV0IF9jb2RlYztcbiAgICBSUEMuY29kZWMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgX2NvZGVjID0gbWVzc2FnZSgob2JqLCB3LCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLnN1YnNjcmlwdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iai5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSUEMuU3ViT3B0cy5jb2RlYygpLmVuY29kZSh2YWx1ZSwgdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5tZXNzYWdlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSUEMuTWVzc2FnZS5jb2RlYygpLmVuY29kZSh2YWx1ZSwgdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5jb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMjYpO1xuICAgICAgICAgICAgICAgICAgICBSUEMuQ29udHJvbE1lc3NhZ2UuY29kZWMoKS5lbmNvZGUob2JqLmNvbnRyb2wsIHcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHcubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKHJlYWRlciwgbGVuZ3RoLCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PSBudWxsID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGltaXRzPy5zdWJzY3JpcHRpb25zICE9IG51bGwgJiYgb2JqLnN1YnNjcmlwdGlvbnMubGVuZ3RoID09PSBvcHRzLmxpbWl0cy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2RlY29kZSBlcnJvciAtIG1hcCBmaWVsZCBcInN1YnNjcmlwdGlvbnNcIiBoYWQgdG9vIG1hbnkgZWxlbWVudHMnLCAnRVJSX01BWF9MRU5HVEgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnN1YnNjcmlwdGlvbnMucHVzaChSUEMuU3ViT3B0cy5jb2RlYygpLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubGltaXRzPy5tZXNzYWdlcyAhPSBudWxsICYmIG9iai5tZXNzYWdlcy5sZW5ndGggPT09IG9wdHMubGltaXRzLm1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2RlY29kZSBlcnJvciAtIG1hcCBmaWVsZCBcIm1lc3NhZ2VzXCIgaGFkIHRvbyBtYW55IGVsZW1lbnRzJywgJ0VSUl9NQVhfTEVOR1RIJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5tZXNzYWdlcy5wdXNoKFJQQy5NZXNzYWdlLmNvZGVjKCkuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29udHJvbCA9IFJQQy5Db250cm9sTWVzc2FnZS5jb2RlYygpLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NvZGVjO1xuICAgIH07XG4gICAgUlBDLmVuY29kZSA9IChvYmopID0+IHtcbiAgICAgICAgcmV0dXJuIGVuY29kZU1lc3NhZ2Uob2JqLCBSUEMuY29kZWMoKSk7XG4gICAgfTtcbiAgICBSUEMuZGVjb2RlID0gKGJ1Ziwgb3B0cykgPT4ge1xuICAgICAgICByZXR1cm4gZGVjb2RlTWVzc2FnZShidWYsIFJQQy5jb2RlYygpLCBvcHRzKTtcbiAgICB9O1xufSkoUlBDIHx8IChSUEMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnBjLmpzLm1hcCJdLCJuYW1lcyI6WyJDb2RlRXJyb3IiLCJkZWNvZGVNZXNzYWdlIiwiZW5jb2RlTWVzc2FnZSIsIm1lc3NhZ2UiLCJSUEMiLCJTdWJPcHRzIiwiX2NvZGVjIiwiY29kZWMiLCJvYmoiLCJ3Iiwib3B0cyIsImxlbmd0aERlbGltaXRlZCIsImZvcmsiLCJzdWJzY3JpYmUiLCJ1aW50MzIiLCJib29sIiwidG9waWMiLCJzdHJpbmciLCJsZGVsaW0iLCJyZWFkZXIiLCJsZW5ndGgiLCJlbmQiLCJsZW4iLCJwb3MiLCJ0YWciLCJza2lwVHlwZSIsImVuY29kZSIsImRlY29kZSIsImJ1ZiIsIk1lc3NhZ2UiLCJmcm9tIiwiYnl0ZXMiLCJkYXRhIiwic2Vxbm8iLCJzaWduYXR1cmUiLCJrZXkiLCJDb250cm9sTWVzc2FnZSIsImloYXZlIiwidmFsdWUiLCJDb250cm9sSUhhdmUiLCJpd2FudCIsIkNvbnRyb2xJV2FudCIsImdyYWZ0IiwiQ29udHJvbEdyYWZ0IiwicHJ1bmUiLCJDb250cm9sUHJ1bmUiLCJsaW1pdHMiLCJwdXNoIiwidG9waWNJRCIsIm1lc3NhZ2VJRHMiLCJwZWVycyIsIlBlZXJJbmZvIiwiYmFja29mZiIsInVpbnQ2NE51bWJlciIsInBlZXJJRCIsInNpZ25lZFBlZXJSZWNvcmQiLCJzdWJzY3JpcHRpb25zIiwibWVzc2FnZXMiLCJjb250cm9sIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.js":
/*!**********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.js ***!
\**********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChurnReason: () => (/* binding */ ChurnReason),\n/* harmony export */ IHaveIgnoreReason: () => (/* binding */ IHaveIgnoreReason),\n/* harmony export */ InclusionReason: () => (/* binding */ InclusionReason),\n/* harmony export */ MessageSource: () => (/* binding */ MessageSource),\n/* harmony export */ ScorePenalty: () => (/* binding */ ScorePenalty),\n/* harmony export */ ScoreThreshold: () => (/* binding */ ScoreThreshold),\n/* harmony export */ getMetrics: () => (/* binding */ getMetrics)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/pubsub/index.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js\");\n\n\nvar MessageSource;\n(function(MessageSource) {\n MessageSource[\"forward\"] = \"forward\";\n MessageSource[\"publish\"] = \"publish\";\n})(MessageSource || (MessageSource = {}));\nvar InclusionReason;\n(function(InclusionReason) {\n /** Peer was a fanaout peer. */ InclusionReason[\"Fanout\"] = \"fanout\";\n /** Included from random selection. */ InclusionReason[\"Random\"] = \"random\";\n /** Peer subscribed. */ InclusionReason[\"Subscribed\"] = \"subscribed\";\n /** On heartbeat, peer was included to fill the outbound quota. */ InclusionReason[\"Outbound\"] = \"outbound\";\n /** On heartbeat, not enough peers in mesh */ InclusionReason[\"NotEnough\"] = \"not_enough\";\n /** On heartbeat opportunistic grafting due to low mesh score */ InclusionReason[\"Opportunistic\"] = \"opportunistic\";\n})(InclusionReason || (InclusionReason = {}));\n/// Reasons why a peer was removed from the mesh.\nvar ChurnReason;\n(function(ChurnReason) {\n /// Peer disconnected.\n ChurnReason[\"Dc\"] = \"disconnected\";\n /// Peer had a bad score.\n ChurnReason[\"BadScore\"] = \"bad_score\";\n /// Peer sent a PRUNE.\n ChurnReason[\"Prune\"] = \"prune\";\n /// Too many peers.\n ChurnReason[\"Excess\"] = \"excess\";\n})(ChurnReason || (ChurnReason = {}));\n/// Kinds of reasons a peer's score has been penalized\nvar ScorePenalty;\n(function(ScorePenalty) {\n /// A peer grafted before waiting the back-off time.\n ScorePenalty[\"GraftBackoff\"] = \"graft_backoff\";\n /// A Peer did not respond to an IWANT request in time.\n ScorePenalty[\"BrokenPromise\"] = \"broken_promise\";\n /// A Peer did not send enough messages as expected.\n ScorePenalty[\"MessageDeficit\"] = \"message_deficit\";\n /// Too many peers under one IP address.\n ScorePenalty[\"IPColocation\"] = \"IP_colocation\";\n})(ScorePenalty || (ScorePenalty = {}));\nvar IHaveIgnoreReason;\n(function(IHaveIgnoreReason) {\n IHaveIgnoreReason[\"LowScore\"] = \"low_score\";\n IHaveIgnoreReason[\"MaxIhave\"] = \"max_ihave\";\n IHaveIgnoreReason[\"MaxIasked\"] = \"max_iasked\";\n})(IHaveIgnoreReason || (IHaveIgnoreReason = {}));\nvar ScoreThreshold;\n(function(ScoreThreshold) {\n ScoreThreshold[\"graylist\"] = \"graylist\";\n ScoreThreshold[\"publish\"] = \"publish\";\n ScoreThreshold[\"gossip\"] = \"gossip\";\n ScoreThreshold[\"mesh\"] = \"mesh\";\n})(ScoreThreshold || (ScoreThreshold = {}));\n/**\n * A collection of metrics used throughout the Gossipsub behaviour.\n * NOTE: except for special reasons, do not add more than 1 label for frequent metrics,\n * there's a performance penalty as of June 2023.\n */ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type\nfunction getMetrics(register, topicStrToLabel, opts) {\n // Using function style instead of class to prevent having to re-declare all MetricsPrometheus types.\n return {\n /* Metrics for static config */ protocolsEnabled: register.gauge({\n name: \"gossipsub_protocol\",\n help: \"Status of enabled protocols\",\n labelNames: [\n \"protocol\"\n ]\n }),\n /* Metrics per known topic */ /**\n * Status of our subscription to this topic. This metric allows analyzing other topic metrics\n * filtered by our current subscription status.\n * = rust-libp2p `topic_subscription_status` */ topicSubscriptionStatus: register.gauge({\n name: \"gossipsub_topic_subscription_status\",\n help: \"Status of our subscription to this topic\",\n labelNames: [\n \"topicStr\"\n ]\n }),\n /** Number of peers subscribed to each topic. This allows us to analyze a topic's behaviour\n * regardless of our subscription status. */ topicPeersCount: register.gauge({\n name: \"gossipsub_topic_peer_count\",\n help: \"Number of peers subscribed to each topic\",\n labelNames: [\n \"topicStr\"\n ]\n }),\n /* Metrics regarding mesh state */ /**\n * Number of peers in our mesh. This metric should be updated with the count of peers for a\n * topic in the mesh regardless of inclusion and churn events.\n * = rust-libp2p `mesh_peer_counts` */ meshPeerCounts: register.gauge({\n name: \"gossipsub_mesh_peer_count\",\n help: \"Number of peers in our mesh\",\n labelNames: [\n \"topicStr\"\n ]\n }),\n /**\n * Number of times we include peers in a topic mesh for different reasons.\n * = rust-libp2p `mesh_peer_inclusion_events` */ meshPeerInclusionEventsFanout: register.gauge({\n name: \"gossipsub_mesh_peer_inclusion_events_fanout_total\",\n help: \"Number of times we include peers in a topic mesh for fanout reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerInclusionEventsRandom: register.gauge({\n name: \"gossipsub_mesh_peer_inclusion_events_random_total\",\n help: \"Number of times we include peers in a topic mesh for random reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerInclusionEventsSubscribed: register.gauge({\n name: \"gossipsub_mesh_peer_inclusion_events_subscribed_total\",\n help: \"Number of times we include peers in a topic mesh for subscribed reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerInclusionEventsOutbound: register.gauge({\n name: \"gossipsub_mesh_peer_inclusion_events_outbound_total\",\n help: \"Number of times we include peers in a topic mesh for outbound reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerInclusionEventsNotEnough: register.gauge({\n name: \"gossipsub_mesh_peer_inclusion_events_not_enough_total\",\n help: \"Number of times we include peers in a topic mesh for not_enough reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerInclusionEventsOpportunistic: register.gauge({\n name: \"gossipsub_mesh_peer_inclusion_events_opportunistic_total\",\n help: \"Number of times we include peers in a topic mesh for opportunistic reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerInclusionEventsUnknown: register.gauge({\n name: \"gossipsub_mesh_peer_inclusion_events_unknown_total\",\n help: \"Number of times we include peers in a topic mesh for unknown reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n /**\n * Number of times we remove peers in a topic mesh for different reasons.\n * = rust-libp2p `mesh_peer_churn_events` */ meshPeerChurnEventsDisconnected: register.gauge({\n name: \"gossipsub_peer_churn_events_disconnected_total\",\n help: \"Number of times we remove peers in a topic mesh for disconnected reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerChurnEventsBadScore: register.gauge({\n name: \"gossipsub_peer_churn_events_bad_score_total\",\n help: \"Number of times we remove peers in a topic mesh for bad_score reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerChurnEventsPrune: register.gauge({\n name: \"gossipsub_peer_churn_events_prune_total\",\n help: \"Number of times we remove peers in a topic mesh for prune reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerChurnEventsExcess: register.gauge({\n name: \"gossipsub_peer_churn_events_excess_total\",\n help: \"Number of times we remove peers in a topic mesh for excess reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeerChurnEventsUnknown: register.gauge({\n name: \"gossipsub_peer_churn_events_unknown_total\",\n help: \"Number of times we remove peers in a topic mesh for unknown reasons\",\n labelNames: [\n \"topic\"\n ]\n }),\n /* General Metrics */ /**\n * Gossipsub supports floodsub, gossipsub v1.0 and gossipsub v1.1. Peers are classified based\n * on which protocol they support. This metric keeps track of the number of peers that are\n * connected of each type. */ peersPerProtocol: register.gauge({\n name: \"gossipsub_peers_per_protocol_count\",\n help: \"Peers connected for each topic\",\n labelNames: [\n \"protocol\"\n ]\n }),\n /** The time it takes to complete one iteration of the heartbeat. */ heartbeatDuration: register.histogram({\n name: \"gossipsub_heartbeat_duration_seconds\",\n help: \"The time it takes to complete one iteration of the heartbeat\",\n // Should take <10ms, over 1s it's a huge issue that needs debugging, since a heartbeat will be cancelled\n buckets: [\n 0.01,\n 0.1,\n 1\n ]\n }),\n /** Heartbeat run took longer than heartbeat interval so next is skipped */ heartbeatSkipped: register.gauge({\n name: \"gossipsub_heartbeat_skipped\",\n help: \"Heartbeat run took longer than heartbeat interval so next is skipped\"\n }),\n /**\n * Message validation results for each topic.\n * Invalid == Reject?\n * = rust-libp2p `invalid_messages`, `accepted_messages`, `ignored_messages`, `rejected_messages` */ acceptedMessagesTotal: register.gauge({\n name: \"gossipsub_accepted_messages_total\",\n help: \"Total accepted messages for each topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n ignoredMessagesTotal: register.gauge({\n name: \"gossipsub_ignored_messages_total\",\n help: \"Total ignored messages for each topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n rejectedMessagesTotal: register.gauge({\n name: \"gossipsub_rejected_messages_total\",\n help: \"Total rejected messages for each topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n unknownValidationResultsTotal: register.gauge({\n name: \"gossipsub_unknown_validation_results_total\",\n help: \"Total unknown validation results for each topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /**\n * When the user validates a message, it tries to re propagate it to its mesh peers. If the\n * message expires from the memcache before it can be validated, we count this a cache miss\n * and it is an indicator that the memcache size should be increased.\n * = rust-libp2p `mcache_misses` */ asyncValidationMcacheHit: register.gauge({\n name: \"gossipsub_async_validation_mcache_hit_total\",\n help: \"Async validation result reported by the user layer\",\n labelNames: [\n \"hit\"\n ]\n }),\n asyncValidationDelayFromFirstSeenSec: register.histogram({\n name: \"gossipsub_async_validation_delay_from_first_seen\",\n help: \"Async validation report delay from first seen in second\",\n buckets: [\n 0.01,\n 0.03,\n 0.1,\n 0.3,\n 1,\n 3,\n 10\n ]\n }),\n asyncValidationUnknownFirstSeen: register.gauge({\n name: \"gossipsub_async_validation_unknown_first_seen_count_total\",\n help: \"Async validation report unknown first seen value for message\"\n }),\n // peer stream\n peerReadStreamError: register.gauge({\n name: \"gossipsub_peer_read_stream_err_count_total\",\n help: \"Peer read stream error\"\n }),\n // RPC outgoing. Track byte length + data structure sizes\n rpcRecvBytes: register.gauge({\n name: \"gossipsub_rpc_recv_bytes_total\",\n help: \"RPC recv\"\n }),\n rpcRecvCount: register.gauge({\n name: \"gossipsub_rpc_recv_count_total\",\n help: \"RPC recv\"\n }),\n rpcRecvSubscription: register.gauge({\n name: \"gossipsub_rpc_recv_subscription_total\",\n help: \"RPC recv\"\n }),\n rpcRecvMessage: register.gauge({\n name: \"gossipsub_rpc_recv_message_total\",\n help: \"RPC recv\"\n }),\n rpcRecvControl: register.gauge({\n name: \"gossipsub_rpc_recv_control_total\",\n help: \"RPC recv\"\n }),\n rpcRecvIHave: register.gauge({\n name: \"gossipsub_rpc_recv_ihave_total\",\n help: \"RPC recv\"\n }),\n rpcRecvIWant: register.gauge({\n name: \"gossipsub_rpc_recv_iwant_total\",\n help: \"RPC recv\"\n }),\n rpcRecvGraft: register.gauge({\n name: \"gossipsub_rpc_recv_graft_total\",\n help: \"RPC recv\"\n }),\n rpcRecvPrune: register.gauge({\n name: \"gossipsub_rpc_recv_prune_total\",\n help: \"RPC recv\"\n }),\n rpcDataError: register.gauge({\n name: \"gossipsub_rpc_data_err_count_total\",\n help: \"RPC data error\"\n }),\n rpcRecvError: register.gauge({\n name: \"gossipsub_rpc_recv_err_count_total\",\n help: \"RPC recv error\"\n }),\n /** Total count of RPC dropped because acceptFrom() == false */ rpcRecvNotAccepted: register.gauge({\n name: \"gossipsub_rpc_rcv_not_accepted_total\",\n help: \"Total count of RPC dropped because acceptFrom() == false\"\n }),\n // RPC incoming. Track byte length + data structure sizes\n rpcSentBytes: register.gauge({\n name: \"gossipsub_rpc_sent_bytes_total\",\n help: \"RPC sent\"\n }),\n rpcSentCount: register.gauge({\n name: \"gossipsub_rpc_sent_count_total\",\n help: \"RPC sent\"\n }),\n rpcSentSubscription: register.gauge({\n name: \"gossipsub_rpc_sent_subscription_total\",\n help: \"RPC sent\"\n }),\n rpcSentMessage: register.gauge({\n name: \"gossipsub_rpc_sent_message_total\",\n help: \"RPC sent\"\n }),\n rpcSentControl: register.gauge({\n name: \"gossipsub_rpc_sent_control_total\",\n help: \"RPC sent\"\n }),\n rpcSentIHave: register.gauge({\n name: \"gossipsub_rpc_sent_ihave_total\",\n help: \"RPC sent\"\n }),\n rpcSentIWant: register.gauge({\n name: \"gossipsub_rpc_sent_iwant_total\",\n help: \"RPC sent\"\n }),\n rpcSentGraft: register.gauge({\n name: \"gossipsub_rpc_sent_graft_total\",\n help: \"RPC sent\"\n }),\n rpcSentPrune: register.gauge({\n name: \"gossipsub_rpc_sent_prune_total\",\n help: \"RPC sent\"\n }),\n // publish message. Track peers sent to and bytes\n /** Total count of msg published by topic */ msgPublishCount: register.gauge({\n name: \"gossipsub_msg_publish_count_total\",\n help: \"Total count of msg published by topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total count of peers that we publish a msg to */ msgPublishPeersByTopic: register.gauge({\n name: \"gossipsub_msg_publish_peers_total\",\n help: \"Total count of peers that we publish a msg to\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total count of peers (by group) that we publish a msg to */ directPeersPublishedTotal: register.gauge({\n name: \"gossipsub_direct_peers_published_total\",\n help: \"Total direct peers that we publish a msg to\",\n labelNames: [\n \"topic\"\n ]\n }),\n floodsubPeersPublishedTotal: register.gauge({\n name: \"gossipsub_floodsub_peers_published_total\",\n help: \"Total floodsub peers that we publish a msg to\",\n labelNames: [\n \"topic\"\n ]\n }),\n meshPeersPublishedTotal: register.gauge({\n name: \"gossipsub_mesh_peers_published_total\",\n help: \"Total mesh peers that we publish a msg to\",\n labelNames: [\n \"topic\"\n ]\n }),\n fanoutPeersPublishedTotal: register.gauge({\n name: \"gossipsub_fanout_peers_published_total\",\n help: \"Total fanout peers that we publish a msg to\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total count of msg publish data.length bytes */ msgPublishBytes: register.gauge({\n name: \"gossipsub_msg_publish_bytes_total\",\n help: \"Total count of msg publish data.length bytes\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total time in seconds to publish a message */ msgPublishTime: register.histogram({\n name: \"gossipsub_msg_publish_seconds\",\n help: \"Total time in seconds to publish a message\",\n buckets: [\n 0.001,\n 0.002,\n 0.005,\n 0.01,\n 0.1,\n 0.5,\n 1\n ],\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total count of msg forwarded by topic */ msgForwardCount: register.gauge({\n name: \"gossipsub_msg_forward_count_total\",\n help: \"Total count of msg forwarded by topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total count of peers that we forward a msg to */ msgForwardPeers: register.gauge({\n name: \"gossipsub_msg_forward_peers_total\",\n help: \"Total count of peers that we forward a msg to\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total count of recv msgs before any validation */ msgReceivedPreValidation: register.gauge({\n name: \"gossipsub_msg_received_prevalidation_total\",\n help: \"Total count of recv msgs before any validation\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total count of recv msgs error */ msgReceivedError: register.gauge({\n name: \"gossipsub_msg_received_error_total\",\n help: \"Total count of recv msgs error\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Tracks distribution of recv msgs by duplicate, invalid, valid */ prevalidationInvalidTotal: register.gauge({\n name: \"gossipsub_pre_validation_invalid_total\",\n help: \"Total count of invalid messages received\",\n labelNames: [\n \"topic\"\n ]\n }),\n prevalidationValidTotal: register.gauge({\n name: \"gossipsub_pre_validation_valid_total\",\n help: \"Total count of valid messages received\",\n labelNames: [\n \"topic\"\n ]\n }),\n prevalidationDuplicateTotal: register.gauge({\n name: \"gossipsub_pre_validation_duplicate_total\",\n help: \"Total count of duplicate messages received\",\n labelNames: [\n \"topic\"\n ]\n }),\n prevalidationUnknownTotal: register.gauge({\n name: \"gossipsub_pre_validation_unknown_status_total\",\n help: \"Total count of unknown_status messages received\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Tracks specific reason of invalid */ msgReceivedInvalid: register.gauge({\n name: \"gossipsub_msg_received_invalid_total\",\n help: \"Tracks specific reason of invalid\",\n labelNames: [\n \"error\"\n ]\n }),\n msgReceivedInvalidByTopic: register.gauge({\n name: \"gossipsub_msg_received_invalid_by_topic_total\",\n help: \"Tracks specific invalid message by topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Track duplicate message delivery time */ duplicateMsgDeliveryDelay: register.histogram({\n name: \"gossisub_duplicate_msg_delivery_delay_seconds\",\n help: \"Time since the 1st duplicated message validated\",\n labelNames: [\n \"topic\"\n ],\n buckets: [\n 0.25 * opts.maxMeshMessageDeliveriesWindowSec,\n 0.5 * opts.maxMeshMessageDeliveriesWindowSec,\n Number(opts.maxMeshMessageDeliveriesWindowSec),\n 2 * opts.maxMeshMessageDeliveriesWindowSec,\n 4 * opts.maxMeshMessageDeliveriesWindowSec\n ]\n }),\n /** Total count of late msg delivery total by topic */ duplicateMsgLateDelivery: register.gauge({\n name: \"gossisub_duplicate_msg_late_delivery_total\",\n help: \"Total count of late duplicate message delivery by topic, which triggers P3 penalty\",\n labelNames: [\n \"topic\"\n ]\n }),\n duplicateMsgIgnored: register.gauge({\n name: \"gossisub_ignored_published_duplicate_msgs_total\",\n help: \"Total count of published duplicate message ignored by topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /* Metrics related to scoring */ /** Total times score() is called */ scoreFnCalls: register.gauge({\n name: \"gossipsub_score_fn_calls_total\",\n help: \"Total times score() is called\"\n }),\n /** Total times score() call actually computed computeScore(), no cache */ scoreFnRuns: register.gauge({\n name: \"gossipsub_score_fn_runs_total\",\n help: \"Total times score() call actually computed computeScore(), no cache\"\n }),\n scoreCachedDelta: register.histogram({\n name: \"gossipsub_score_cache_delta\",\n help: \"Delta of score between cached values that expired\",\n buckets: [\n 10,\n 100,\n 1000\n ]\n }),\n /** Current count of peers by score threshold */ peersByScoreThreshold: register.gauge({\n name: \"gossipsub_peers_by_score_threshold_count\",\n help: \"Current count of peers by score threshold\",\n labelNames: [\n \"threshold\"\n ]\n }),\n score: register.avgMinMax({\n name: \"gossipsub_score\",\n help: \"Avg min max of gossip scores\"\n }),\n /**\n * Separate score weights\n * Need to use 2-label metrics in this case to debug the score weights\n **/ scoreWeights: register.avgMinMax({\n name: \"gossipsub_score_weights\",\n help: \"Separate score weights\",\n labelNames: [\n \"topic\",\n \"p\"\n ]\n }),\n /** Histogram of the scores for each mesh topic. */ // TODO: Not implemented\n scorePerMesh: register.avgMinMax({\n name: \"gossipsub_score_per_mesh\",\n help: \"Histogram of the scores for each mesh topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** A counter of the kind of penalties being applied to peers. */ // TODO: Not fully implemented\n scoringPenalties: register.gauge({\n name: \"gossipsub_scoring_penalties_total\",\n help: \"A counter of the kind of penalties being applied to peers\",\n labelNames: [\n \"penalty\"\n ]\n }),\n behaviourPenalty: register.histogram({\n name: \"gossipsub_peer_stat_behaviour_penalty\",\n help: \"Current peer stat behaviour_penalty at each scrape\",\n buckets: [\n 0.25 * opts.behaviourPenaltyThreshold,\n 0.5 * opts.behaviourPenaltyThreshold,\n Number(opts.behaviourPenaltyThreshold),\n 2 * opts.behaviourPenaltyThreshold,\n 4 * opts.behaviourPenaltyThreshold\n ]\n }),\n // TODO:\n // - iasked per peer (on heartbeat)\n // - when promise is resolved, track messages from promises\n /** Total received IHAVE messages that we ignore for some reason */ ihaveRcvIgnored: register.gauge({\n name: \"gossipsub_ihave_rcv_ignored_total\",\n help: \"Total received IHAVE messages that we ignore for some reason\",\n labelNames: [\n \"reason\"\n ]\n }),\n /** Total received IHAVE messages by topic */ ihaveRcvMsgids: register.gauge({\n name: \"gossipsub_ihave_rcv_msgids_total\",\n help: \"Total received IHAVE messages by topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /**\n * Total messages per topic we don't have. Not actual requests.\n * The number of times we have decided that an IWANT control message is required for this\n * topic. A very high metric might indicate an underperforming network.\n * = rust-libp2p `topic_iwant_msgs` */ ihaveRcvNotSeenMsgids: register.gauge({\n name: \"gossipsub_ihave_rcv_not_seen_msgids_total\",\n help: \"Total messages per topic we do not have, not actual requests\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total received IWANT messages by topic */ iwantRcvMsgids: register.gauge({\n name: \"gossipsub_iwant_rcv_msgids_total\",\n help: \"Total received IWANT messages by topic\",\n labelNames: [\n \"topic\"\n ]\n }),\n /** Total requested messageIDs that we don't have */ iwantRcvDonthaveMsgids: register.gauge({\n name: \"gossipsub_iwant_rcv_dont_have_msgids_total\",\n help: \"Total requested messageIDs that we do not have\"\n }),\n iwantPromiseStarted: register.gauge({\n name: \"gossipsub_iwant_promise_sent_total\",\n help: \"Total count of started IWANT promises\"\n }),\n /** Total count of resolved IWANT promises */ iwantPromiseResolved: register.gauge({\n name: \"gossipsub_iwant_promise_resolved_total\",\n help: \"Total count of resolved IWANT promises\"\n }),\n /** Total count of resolved IWANT promises from duplicate messages */ iwantPromiseResolvedFromDuplicate: register.gauge({\n name: \"gossipsub_iwant_promise_resolved_from_duplicate_total\",\n help: \"Total count of resolved IWANT promises from duplicate messages\"\n }),\n /** Total count of peers we have asked IWANT promises that are resolved */ iwantPromiseResolvedPeers: register.gauge({\n name: \"gossipsub_iwant_promise_resolved_peers\",\n help: \"Total count of peers we have asked IWANT promises that are resolved\"\n }),\n iwantPromiseBroken: register.gauge({\n name: \"gossipsub_iwant_promise_broken\",\n help: \"Total count of broken IWANT promises\"\n }),\n iwantMessagePruned: register.gauge({\n name: \"gossipsub_iwant_message_pruned\",\n help: \"Total count of pruned IWANT messages\"\n }),\n /** Histogram of delivery time of resolved IWANT promises */ iwantPromiseDeliveryTime: register.histogram({\n name: \"gossipsub_iwant_promise_delivery_seconds\",\n help: \"Histogram of delivery time of resolved IWANT promises\",\n buckets: [\n 0.5 * opts.gossipPromiseExpireSec,\n Number(opts.gossipPromiseExpireSec),\n 2 * opts.gossipPromiseExpireSec,\n 4 * opts.gossipPromiseExpireSec\n ]\n }),\n iwantPromiseUntracked: register.gauge({\n name: \"gossip_iwant_promise_untracked\",\n help: \"Total count of untracked IWANT promise\"\n }),\n /** Backoff time */ connectedPeersBackoffSec: register.histogram({\n name: \"gossipsub_connected_peers_backoff_seconds\",\n help: \"Backoff time in seconds\",\n // Using 1 seconds as minimum as that's close to the heartbeat duration, no need for more resolution.\n // As per spec, backoff times are 10 seconds for UnsubscribeBackoff and 60 seconds for PruneBackoff.\n // Higher values of 60 seconds should not occur, but we add 120 seconds just in case\n // https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#overview-of-new-parameters\n buckets: [\n 1,\n 2,\n 4,\n 10,\n 20,\n 60,\n 120\n ]\n }),\n /* Data structure sizes */ /** Unbounded cache sizes */ cacheSize: register.gauge({\n name: \"gossipsub_cache_size\",\n help: \"Unbounded cache sizes\",\n labelNames: [\n \"cache\"\n ]\n }),\n /** Current mcache msg count */ mcacheSize: register.gauge({\n name: \"gossipsub_mcache_size\",\n help: \"Current mcache msg count\"\n }),\n mcacheNotValidatedCount: register.gauge({\n name: \"gossipsub_mcache_not_validated_count\",\n help: \"Current mcache msg count not validated\"\n }),\n fastMsgIdCacheCollision: register.gauge({\n name: \"gossipsub_fastmsgid_cache_collision_total\",\n help: \"Total count of key collisions on fastmsgid cache put\"\n }),\n newConnectionCount: register.gauge({\n name: \"gossipsub_new_connection_total\",\n help: \"Total new connection by status\",\n labelNames: [\n \"status\"\n ]\n }),\n topicStrToLabel,\n toTopic (topicStr) {\n return this.topicStrToLabel.get(topicStr) ?? topicStr;\n },\n /** We joined a topic */ onJoin (topicStr) {\n this.topicSubscriptionStatus.set({\n topicStr\n }, 1);\n this.meshPeerCounts.set({\n topicStr\n }, 0); // Reset count\n },\n /** We left a topic */ onLeave (topicStr) {\n this.topicSubscriptionStatus.set({\n topicStr\n }, 0);\n this.meshPeerCounts.set({\n topicStr\n }, 0); // Reset count\n },\n /** Register the inclusion of peers in our mesh due to some reason. */ onAddToMesh (topicStr, reason, count) {\n const topic = this.toTopic(topicStr);\n switch(reason){\n case InclusionReason.Fanout:\n this.meshPeerInclusionEventsFanout.inc({\n topic\n }, count);\n break;\n case InclusionReason.Random:\n this.meshPeerInclusionEventsRandom.inc({\n topic\n }, count);\n break;\n case InclusionReason.Subscribed:\n this.meshPeerInclusionEventsSubscribed.inc({\n topic\n }, count);\n break;\n case InclusionReason.Outbound:\n this.meshPeerInclusionEventsOutbound.inc({\n topic\n }, count);\n break;\n case InclusionReason.NotEnough:\n this.meshPeerInclusionEventsNotEnough.inc({\n topic\n }, count);\n break;\n case InclusionReason.Opportunistic:\n this.meshPeerInclusionEventsOpportunistic.inc({\n topic\n }, count);\n break;\n default:\n this.meshPeerInclusionEventsUnknown.inc({\n topic\n }, count);\n break;\n }\n },\n /** Register the removal of peers in our mesh due to some reason */ // - remove_peer_from_mesh()\n // - heartbeat() Churn::BadScore\n // - heartbeat() Churn::Excess\n // - on_disconnect() Churn::Ds\n onRemoveFromMesh (topicStr, reason, count) {\n const topic = this.toTopic(topicStr);\n switch(reason){\n case ChurnReason.Dc:\n this.meshPeerChurnEventsDisconnected.inc({\n topic\n }, count);\n break;\n case ChurnReason.BadScore:\n this.meshPeerChurnEventsBadScore.inc({\n topic\n }, count);\n break;\n case ChurnReason.Prune:\n this.meshPeerChurnEventsPrune.inc({\n topic\n }, count);\n break;\n case ChurnReason.Excess:\n this.meshPeerChurnEventsExcess.inc({\n topic\n }, count);\n break;\n default:\n this.meshPeerChurnEventsUnknown.inc({\n topic\n }, count);\n break;\n }\n },\n /**\n * Update validation result to metrics\n *\n * @param messageRecord - null means the message's mcache record was not known at the time of acceptance report\n */ onReportValidation (messageRecord, acceptance, firstSeenTimestampMs) {\n this.asyncValidationMcacheHit.inc({\n hit: messageRecord != null ? \"hit\" : \"miss\"\n });\n if (messageRecord != null) {\n const topic = this.toTopic(messageRecord.message.topic);\n switch(acceptance){\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.TopicValidatorResult.Accept:\n this.acceptedMessagesTotal.inc({\n topic\n });\n break;\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.TopicValidatorResult.Ignore:\n this.ignoredMessagesTotal.inc({\n topic\n });\n break;\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.TopicValidatorResult.Reject:\n this.rejectedMessagesTotal.inc({\n topic\n });\n break;\n default:\n this.unknownValidationResultsTotal.inc({\n topic\n });\n break;\n }\n }\n if (firstSeenTimestampMs != null) {\n this.asyncValidationDelayFromFirstSeenSec.observe((Date.now() - firstSeenTimestampMs) / 1000);\n } else {\n this.asyncValidationUnknownFirstSeen.inc();\n }\n },\n /**\n * - in handle_graft() Penalty::GraftBackoff\n * - in apply_iwant_penalties() Penalty::BrokenPromise\n * - in metric_score() P3 Penalty::MessageDeficit\n * - in metric_score() P6 Penalty::IPColocation\n */ onScorePenalty (penalty) {\n // Can this be labeled by topic too?\n this.scoringPenalties.inc({\n penalty\n }, 1);\n },\n onIhaveRcv (topicStr, ihave, idonthave) {\n const topic = this.toTopic(topicStr);\n this.ihaveRcvMsgids.inc({\n topic\n }, ihave);\n this.ihaveRcvNotSeenMsgids.inc({\n topic\n }, idonthave);\n },\n onIwantRcv (iwantByTopic, iwantDonthave) {\n for (const [topicStr, iwant] of iwantByTopic){\n const topic = this.toTopic(topicStr);\n this.iwantRcvMsgids.inc({\n topic\n }, iwant);\n }\n this.iwantRcvDonthaveMsgids.inc(iwantDonthave);\n },\n onForwardMsg (topicStr, tosendCount) {\n const topic = this.toTopic(topicStr);\n this.msgForwardCount.inc({\n topic\n }, 1);\n this.msgForwardPeers.inc({\n topic\n }, tosendCount);\n },\n onPublishMsg (topicStr, tosendGroupCount, tosendCount, dataLen, ms) {\n const topic = this.toTopic(topicStr);\n this.msgPublishCount.inc({\n topic\n }, 1);\n this.msgPublishBytes.inc({\n topic\n }, tosendCount * dataLen);\n this.msgPublishPeersByTopic.inc({\n topic\n }, tosendCount);\n this.directPeersPublishedTotal.inc({\n topic\n }, tosendGroupCount.direct);\n this.floodsubPeersPublishedTotal.inc({\n topic\n }, tosendGroupCount.floodsub);\n this.meshPeersPublishedTotal.inc({\n topic\n }, tosendGroupCount.mesh);\n this.fanoutPeersPublishedTotal.inc({\n topic\n }, tosendGroupCount.fanout);\n this.msgPublishTime.observe({\n topic\n }, ms / 1000);\n },\n onMsgRecvPreValidation (topicStr) {\n const topic = this.toTopic(topicStr);\n this.msgReceivedPreValidation.inc({\n topic\n }, 1);\n },\n onMsgRecvError (topicStr) {\n const topic = this.toTopic(topicStr);\n this.msgReceivedError.inc({\n topic\n }, 1);\n },\n onPrevalidationResult (topicStr, status) {\n const topic = this.toTopic(topicStr);\n switch(status){\n case _types_js__WEBPACK_IMPORTED_MODULE_1__.MessageStatus.duplicate:\n this.prevalidationDuplicateTotal.inc({\n topic\n });\n break;\n case _types_js__WEBPACK_IMPORTED_MODULE_1__.MessageStatus.invalid:\n this.prevalidationInvalidTotal.inc({\n topic\n });\n break;\n case _types_js__WEBPACK_IMPORTED_MODULE_1__.MessageStatus.valid:\n this.prevalidationValidTotal.inc({\n topic\n });\n break;\n default:\n this.prevalidationUnknownTotal.inc({\n topic\n });\n break;\n }\n },\n onMsgRecvInvalid (topicStr, reason) {\n const topic = this.toTopic(topicStr);\n const error = reason.reason === _types_js__WEBPACK_IMPORTED_MODULE_1__.RejectReason.Error ? reason.error : reason.reason;\n this.msgReceivedInvalid.inc({\n error\n }, 1);\n this.msgReceivedInvalidByTopic.inc({\n topic\n }, 1);\n },\n onDuplicateMsgDelivery (topicStr, deliveryDelayMs, isLateDelivery) {\n const topic = this.toTopic(topicStr);\n this.duplicateMsgDeliveryDelay.observe({\n topic\n }, deliveryDelayMs / 1000);\n if (isLateDelivery) {\n this.duplicateMsgLateDelivery.inc({\n topic\n }, 1);\n }\n },\n onPublishDuplicateMsg (topicStr) {\n const topic = this.toTopic(topicStr);\n this.duplicateMsgIgnored.inc({\n topic\n }, 1);\n },\n onPeerReadStreamError () {\n this.peerReadStreamError.inc(1);\n },\n onRpcRecvError () {\n this.rpcRecvError.inc(1);\n },\n onRpcDataError () {\n this.rpcDataError.inc(1);\n },\n onRpcRecv (rpc, rpcBytes) {\n this.rpcRecvBytes.inc(rpcBytes);\n this.rpcRecvCount.inc(1);\n if (rpc.subscriptions != null) this.rpcRecvSubscription.inc(rpc.subscriptions.length);\n if (rpc.messages != null) this.rpcRecvMessage.inc(rpc.messages.length);\n if (rpc.control != null) {\n this.rpcRecvControl.inc(1);\n if (rpc.control.ihave != null) this.rpcRecvIHave.inc(rpc.control.ihave.length);\n if (rpc.control.iwant != null) this.rpcRecvIWant.inc(rpc.control.iwant.length);\n if (rpc.control.graft != null) this.rpcRecvGraft.inc(rpc.control.graft.length);\n if (rpc.control.prune != null) this.rpcRecvPrune.inc(rpc.control.prune.length);\n }\n },\n onRpcSent (rpc, rpcBytes) {\n this.rpcSentBytes.inc(rpcBytes);\n this.rpcSentCount.inc(1);\n if (rpc.subscriptions != null) this.rpcSentSubscription.inc(rpc.subscriptions.length);\n if (rpc.messages != null) this.rpcSentMessage.inc(rpc.messages.length);\n if (rpc.control != null) {\n const ihave = rpc.control.ihave?.length ?? 0;\n const iwant = rpc.control.iwant?.length ?? 0;\n const graft = rpc.control.graft?.length ?? 0;\n const prune = rpc.control.prune?.length ?? 0;\n if (ihave > 0) this.rpcSentIHave.inc(ihave);\n if (iwant > 0) this.rpcSentIWant.inc(iwant);\n if (graft > 0) this.rpcSentGraft.inc(graft);\n if (prune > 0) this.rpcSentPrune.inc(prune);\n if (ihave > 0 || iwant > 0 || graft > 0 || prune > 0) this.rpcSentControl.inc(1);\n }\n },\n registerScores (scores, scoreThresholds) {\n let graylist = 0;\n let publish = 0;\n let gossip = 0;\n let mesh = 0;\n for (const score of scores){\n if (score >= scoreThresholds.graylistThreshold) graylist++;\n if (score >= scoreThresholds.publishThreshold) publish++;\n if (score >= scoreThresholds.gossipThreshold) gossip++;\n if (score >= 0) mesh++;\n }\n this.peersByScoreThreshold.set({\n threshold: ScoreThreshold.graylist\n }, graylist);\n this.peersByScoreThreshold.set({\n threshold: ScoreThreshold.publish\n }, publish);\n this.peersByScoreThreshold.set({\n threshold: ScoreThreshold.gossip\n }, gossip);\n this.peersByScoreThreshold.set({\n threshold: ScoreThreshold.mesh\n }, mesh);\n // Register full score too\n this.score.set(scores);\n },\n registerScoreWeights (sw) {\n for (const [topic, wsTopic] of sw.byTopic){\n this.scoreWeights.set({\n topic,\n p: \"p1\"\n }, wsTopic.p1w);\n this.scoreWeights.set({\n topic,\n p: \"p2\"\n }, wsTopic.p2w);\n this.scoreWeights.set({\n topic,\n p: \"p3\"\n }, wsTopic.p3w);\n this.scoreWeights.set({\n topic,\n p: \"p3b\"\n }, wsTopic.p3bw);\n this.scoreWeights.set({\n topic,\n p: \"p4\"\n }, wsTopic.p4w);\n }\n this.scoreWeights.set({\n p: \"p5\"\n }, sw.p5w);\n this.scoreWeights.set({\n p: \"p6\"\n }, sw.p6w);\n this.scoreWeights.set({\n p: \"p7\"\n }, sw.p7w);\n },\n registerScorePerMesh (mesh, scoreByPeer) {\n const peersPerTopicLabel = new Map();\n mesh.forEach((peers, topicStr)=>{\n // Aggregate by known topicLabel or throw to 'unknown'. This prevent too high cardinality\n const topicLabel = this.topicStrToLabel.get(topicStr) ?? \"unknown\";\n let peersInMesh = peersPerTopicLabel.get(topicLabel);\n if (peersInMesh == null) {\n peersInMesh = new Set();\n peersPerTopicLabel.set(topicLabel, peersInMesh);\n }\n peers.forEach((p)=>peersInMesh?.add(p));\n });\n for (const [topic, peers] of peersPerTopicLabel){\n const meshScores = [];\n peers.forEach((peer)=>{\n meshScores.push(scoreByPeer.get(peer) ?? 0);\n });\n this.scorePerMesh.set({\n topic\n }, meshScores);\n }\n }\n };\n} //# sourceMappingURL=metrics.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL21ldHJpY3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQXlEO0FBQ0E7QUFDbEQsSUFBSUcsY0FBYztBQUN4QixVQUFVQSxhQUFhO0lBQ3BCQSxhQUFhLENBQUMsVUFBVSxHQUFHO0lBQzNCQSxhQUFhLENBQUMsVUFBVSxHQUFHO0FBQy9CLEdBQUdBLGlCQUFrQkEsQ0FBQUEsZ0JBQWdCLENBQUM7QUFDL0IsSUFBSUMsZ0JBQWdCO0FBQzFCLFVBQVVBLGVBQWU7SUFDdEIsNkJBQTZCLEdBQzdCQSxlQUFlLENBQUMsU0FBUyxHQUFHO0lBQzVCLG9DQUFvQyxHQUNwQ0EsZUFBZSxDQUFDLFNBQVMsR0FBRztJQUM1QixxQkFBcUIsR0FDckJBLGVBQWUsQ0FBQyxhQUFhLEdBQUc7SUFDaEMsZ0VBQWdFLEdBQ2hFQSxlQUFlLENBQUMsV0FBVyxHQUFHO0lBQzlCLDJDQUEyQyxHQUMzQ0EsZUFBZSxDQUFDLFlBQVksR0FBRztJQUMvQiw4REFBOEQsR0FDOURBLGVBQWUsQ0FBQyxnQkFBZ0IsR0FBRztBQUN2QyxHQUFHQSxtQkFBb0JBLENBQUFBLGtCQUFrQixDQUFDO0FBQzFDLGlEQUFpRDtBQUMxQyxJQUFJQyxZQUFZO0FBQ3RCLFVBQVVBLFdBQVc7SUFDbEIsc0JBQXNCO0lBQ3RCQSxXQUFXLENBQUMsS0FBSyxHQUFHO0lBQ3BCLHlCQUF5QjtJQUN6QkEsV0FBVyxDQUFDLFdBQVcsR0FBRztJQUMxQixzQkFBc0I7SUFDdEJBLFdBQVcsQ0FBQyxRQUFRLEdBQUc7SUFDdkIsbUJBQW1CO0lBQ25CQSxXQUFXLENBQUMsU0FBUyxHQUFHO0FBQzVCLEdBQUdBLGVBQWdCQSxDQUFBQSxjQUFjLENBQUM7QUFDbEMsc0RBQXNEO0FBQy9DLElBQUlDLGFBQWE7QUFDdkIsVUFBVUEsWUFBWTtJQUNuQixvREFBb0Q7SUFDcERBLFlBQVksQ0FBQyxlQUFlLEdBQUc7SUFD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QkFDdkM7Z0JBQ0FGLE1BQU1ELE9BQU8sQ0FBQyxDQUFDYixJQUFNZ0IsYUFBYUUsSUFBSWxCO1lBQzFDO1lBQ0EsS0FBSyxNQUFNLENBQUNyRixPQUFPbUcsTUFBTSxJQUFJSCxtQkFBb0I7Z0JBQzdDLE1BQU1RLGFBQWEsRUFBRTtnQkFDckJMLE1BQU1ELE9BQU8sQ0FBQyxDQUFDTztvQkFDWEQsV0FBV0UsSUFBSSxDQUFDWCxZQUFZdEcsR0FBRyxDQUFDZ0gsU0FBUztnQkFDN0M7Z0JBQ0EsSUFBSSxDQUFDMUksWUFBWSxDQUFDNEIsR0FBRyxDQUFDO29CQUFFSztnQkFBTSxHQUFHd0c7WUFDckM7UUFDSjtJQUNKO0FBQ0osRUFDQSxtQ0FBbUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvbWV0cmljcy5qcz80N2UzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvcGljVmFsaWRhdG9yUmVzdWx0IH0gZnJvbSAnQGxpYnAycC9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXR1cywgUmVqZWN0UmVhc29uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgdmFyIE1lc3NhZ2VTb3VyY2U7XG4oZnVuY3Rpb24gKE1lc3NhZ2VTb3VyY2UpIHtcbiAgICBNZXNzYWdlU291cmNlW1wiZm9yd2FyZFwiXSA9IFwiZm9yd2FyZFwiO1xuICAgIE1lc3NhZ2VTb3VyY2VbXCJwdWJsaXNoXCJdID0gXCJwdWJsaXNoXCI7XG59KShNZXNzYWdlU291cmNlIHx8IChNZXNzYWdlU291cmNlID0ge30pKTtcbmV4cG9ydCB2YXIgSW5jbHVzaW9uUmVhc29uO1xuKGZ1bmN0aW9uIChJbmNsdXNpb25SZWFzb24pIHtcbiAgICAvKiogUGVlciB3YXMgYSBmYW5hb3V0IHBlZXIuICovXG4gICAgSW5jbHVzaW9uUmVhc29uW1wiRmFub3V0XCJdID0gXCJmYW5vdXRcIjtcbiAgICAvKiogSW5jbHVkZWQgZnJvbSByYW5kb20gc2VsZWN0aW9uLiAqL1xuICAgIEluY2x1c2lvblJlYXNvbltcIlJhbmRvbVwiXSA9IFwicmFuZG9tXCI7XG4gICAgLyoqIFBlZXIgc3Vic2NyaWJlZC4gKi9cbiAgICBJbmNsdXNpb25SZWFzb25bXCJTdWJzY3JpYmVkXCJdID0gXCJzdWJzY3JpYmVkXCI7XG4gICAgLyoqIE9uIGhlYXJ0YmVhdCwgcGVlciB3YXMgaW5jbHVkZWQgdG8gZmlsbCB0aGUgb3V0Ym91bmQgcXVvdGEuICovXG4gICAgSW5jbHVzaW9uUmVhc29uW1wiT3V0Ym91bmRcIl0gPSBcIm91dGJvdW5kXCI7XG4gICAgLyoqIE9uIGhlYXJ0YmVhdCwgbm90IGVub3VnaCBwZWVycyBpbiBtZXNoICovXG4gICAgSW5jbHVzaW9uUmVhc29uW1wiTm90RW5vdWdoXCJdID0gXCJub3RfZW5vdWdoXCI7XG4gICAgLyoqIE9uIGhlYXJ0YmVhdCBvcHBvcnR1bmlzdGljIGdyYWZ0aW5nIGR1ZSB0byBsb3cgbWVzaCBzY29yZSAqL1xuICAgIEluY2x1c2lvblJlYXNvbltcIk9wcG9ydHVuaXN0aWNcIl0gPSBcIm9wcG9ydHVuaXN0aWNcIjtcbn0pKEluY2x1c2lvblJlYXNvbiB8fCAoSW5jbHVzaW9uUmVhc29uID0ge30pKTtcbi8vLyBSZWFzb25zIHdoeSBhIHBlZXIgd2FzIHJlbW92ZWQgZnJvbSB0aGUgbWVzaC5cbmV4cG9ydCB2YXIgQ2h1cm5SZWFzb247XG4oZnVuY3Rpb24gKENodXJuUmVhc29uKSB7XG4gICAgLy8vIFBlZXIgZGlzY29ubmVjdGVkLlxuICAgIENodXJuUmVhc29uW1wiRGNcIl0gPSBcImRpc2Nvbm5lY3RlZFwiO1xuICAgIC8vLyBQZWVyIGhhZCBhIGJhZCBzY29yZS5cbiAgICBDaHVyblJlYXNvbltcIkJhZFNjb3JlXCJdID0gXCJiYWRfc2NvcmVcIjtcbiAgICAvLy8gUGVlciBzZW50IGEgUFJVTkUuXG4gICAgQ2h1cm5SZWFzb25bXCJQcnVuZVwiXSA9IFwicHJ1bmVcIjtcbiAgICAvLy8gVG9vIG1hbnkgcGVlcnMuXG4gICAgQ2h1cm5SZWFzb25bXCJFeGNlc3NcIl0gPSBcImV4Y2Vzc1wiO1xufSkoQ2h1cm5SZWFzb24gfHwgKENodXJuUmVhc29uID0ge30pKTtcbi8vLyBLaW5kcyBvZiByZWFzb25zIGEgcGVlcidzIHNjb3JlIGhhcyBiZWVuIHBlbmFsaXplZFxuZXhwb3J0IHZhciBTY29yZVBlbmFsdHk7XG4oZnVuY3Rpb24gKFNjb3JlUGVuYWx0eSkge1xuICAgIC8vLyBBIHBlZXIgZ3JhZnRlZCBiZWZvcmUgd2FpdGluZyB0aGUgYmFjay1vZmYgdGltZS5cbiAgICBTY29yZVBlbmFsdHlbXCJHcmFmdEJhY2tvZmZcIl0gPSBcImdyYWZ0X2JhY2tvZmZcIjtcbiAgICAvLy8gQSBQZWVyIGRpZCBub3QgcmVzcG9uZCB0byBhbiBJV0FOVCByZXF1ZXN0IGluIHRpbWUuXG4gICAgU2NvcmVQZW5hbHR5W1wiQnJva2VuUHJvbWlzZVwiXSA9IFwiYnJva2VuX3Byb21pc2VcIjtcbiAgICAvLy8gQSBQZWVyIGRpZCBub3Qgc2VuZCBlbm91Z2ggbWVzc2FnZXMgYXMgZXhwZWN0ZWQuXG4gICAgU2NvcmVQZW5hbHR5W1wiTWVzc2FnZURlZmljaXRcIl0gPSBcIm1lc3NhZ2VfZGVmaWNpdFwiO1xuICAgIC8vLyBUb28gbWFueSBwZWVycyB1bmRlciBvbmUgSVAgYWRkcmVzcy5cbiAgICBTY29yZVBlbmFsdHlbXCJJUENvbG9jYXRpb25cIl0gPSBcIklQX2NvbG9jYXRpb25cIjtcbn0pKFNjb3JlUGVuYWx0eSB8fCAoU2NvcmVQZW5hbHR5ID0ge30pKTtcbmV4cG9ydCB2YXIgSUhhdmVJZ25vcmVSZWFzb247XG4oZnVuY3Rpb24gKElIYXZlSWdub3JlUmVhc29uKSB7XG4gICAgSUhhdmVJZ25vcmVSZWFzb25bXCJMb3dTY29yZVwiXSA9IFwibG93X3Njb3JlXCI7XG4gICAgSUhhdmVJZ25vcmVSZWFzb25bXCJNYXhJaGF2ZVwiXSA9IFwibWF4X2loYXZlXCI7XG4gICAgSUhhdmVJZ25vcmVSZWFzb25bXCJNYXhJYXNrZWRcIl0gPSBcIm1heF9pYXNrZWRcIjtcbn0pKElIYXZlSWdub3JlUmVhc29uIHx8IChJSGF2ZUlnbm9yZVJlYXNvbiA9IHt9KSk7XG5leHBvcnQgdmFyIFNjb3JlVGhyZXNob2xkO1xuKGZ1bmN0aW9uIChTY29yZVRocmVzaG9sZCkge1xuICAgIFNjb3JlVGhyZXNob2xkW1wiZ3JheWxpc3RcIl0gPSBcImdyYXlsaXN0XCI7XG4gICAgU2NvcmVUaHJlc2hvbGRbXCJwdWJsaXNoXCJdID0gXCJwdWJsaXNoXCI7XG4gICAgU2NvcmVUaHJlc2hvbGRbXCJnb3NzaXBcIl0gPSBcImdvc3NpcFwiO1xuICAgIFNjb3JlVGhyZXNob2xkW1wibWVzaFwiXSA9IFwibWVzaFwiO1xufSkoU2NvcmVUaHJlc2hvbGQgfHwgKFNjb3JlVGhyZXNob2xkID0ge30pKTtcbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIG1ldHJpY3MgdXNlZCB0aHJvdWdob3V0IHRoZSBHb3NzaXBzdWIgYmVoYXZpb3VyLlxuICogTk9URTogZXhjZXB0IGZvciBzcGVjaWFsIHJlYXNvbnMsIGRvIG5vdCBhZGQgbW9yZSB0aGFuIDEgbGFiZWwgZm9yIGZyZXF1ZW50IG1ldHJpY3MsXG4gKiB0aGVyZSdzIGEgcGVyZm9ybWFuY2UgcGVuYWx0eSBhcyBvZiBKdW5lIDIwMjMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGVcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRyaWNzKHJlZ2lzdGVyLCB0b3BpY1N0clRvTGFiZWwsIG9wdHMpIHtcbiAgICAvLyBVc2luZyBmdW5jdGlvbiBzdHlsZSBpbnN0ZWFkIG9mIGNsYXNzIHRvIHByZXZlbnQgaGF2aW5nIHRvIHJlLWRlY2xhcmUgYWxsIE1ldHJpY3NQcm9tZXRoZXVzIHR5cGVzLlxuICAgIHJldHVybiB7XG4gICAgICAgIC8qIE1ldHJpY3MgZm9yIHN0YXRpYyBjb25maWcgKi9cbiAgICAgICAgcHJvdG9jb2xzRW5hYmxlZDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9wcm90b2NvbCcsXG4gICAgICAgICAgICBoZWxwOiAnU3RhdHVzIG9mIGVuYWJsZWQgcHJvdG9jb2xzJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsncHJvdG9jb2wnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyogTWV0cmljcyBwZXIga25vd24gdG9waWMgKi9cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXR1cyBvZiBvdXIgc3Vic2NyaXB0aW9uIHRvIHRoaXMgdG9waWMuIFRoaXMgbWV0cmljIGFsbG93cyBhbmFseXppbmcgb3RoZXIgdG9waWMgbWV0cmljc1xuICAgICAgICAgKiBmaWx0ZXJlZCBieSBvdXIgY3VycmVudCBzdWJzY3JpcHRpb24gc3RhdHVzLlxuICAgICAgICAgKiA9IHJ1c3QtbGlicDJwIGB0b3BpY19zdWJzY3JpcHRpb25fc3RhdHVzYCAqL1xuICAgICAgICB0b3BpY1N1YnNjcmlwdGlvblN0YXR1czogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl90b3BpY19zdWJzY3JpcHRpb25fc3RhdHVzJyxcbiAgICAgICAgICAgIGhlbHA6ICdTdGF0dXMgb2Ygb3VyIHN1YnNjcmlwdGlvbiB0byB0aGlzIHRvcGljJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWNTdHInXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIE51bWJlciBvZiBwZWVycyBzdWJzY3JpYmVkIHRvIGVhY2ggdG9waWMuIFRoaXMgYWxsb3dzIHVzIHRvIGFuYWx5emUgYSB0b3BpYydzIGJlaGF2aW91clxuICAgICAgICAgKiByZWdhcmRsZXNzIG9mIG91ciBzdWJzY3JpcHRpb24gc3RhdHVzLiAqL1xuICAgICAgICB0b3BpY1BlZXJzQ291bnQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfdG9waWNfcGVlcl9jb3VudCcsXG4gICAgICAgICAgICBoZWxwOiAnTnVtYmVyIG9mIHBlZXJzIHN1YnNjcmliZWQgdG8gZWFjaCB0b3BpYycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljU3RyJ11cbiAgICAgICAgfSksXG4gICAgICAgIC8qIE1ldHJpY3MgcmVnYXJkaW5nIG1lc2ggc3RhdGUgKi9cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiBwZWVycyBpbiBvdXIgbWVzaC4gVGhpcyBtZXRyaWMgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCB0aGUgY291bnQgb2YgcGVlcnMgZm9yIGFcbiAgICAgICAgICogdG9waWMgaW4gdGhlIG1lc2ggcmVnYXJkbGVzcyBvZiBpbmNsdXNpb24gYW5kIGNodXJuIGV2ZW50cy5cbiAgICAgICAgICogPSBydXN0LWxpYnAycCBgbWVzaF9wZWVyX2NvdW50c2AgKi9cbiAgICAgICAgbWVzaFBlZXJDb3VudHM6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfbWVzaF9wZWVyX2NvdW50JyxcbiAgICAgICAgICAgIGhlbHA6ICdOdW1iZXIgb2YgcGVlcnMgaW4gb3VyIG1lc2gnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpY1N0ciddXG4gICAgICAgIH0pLFxuICAgICAgICAvKipcbiAgICAgICAgICogTnVtYmVyIG9mIHRpbWVzIHdlIGluY2x1ZGUgcGVlcnMgaW4gYSB0b3BpYyBtZXNoIGZvciBkaWZmZXJlbnQgcmVhc29ucy5cbiAgICAgICAgICogPSBydXN0LWxpYnAycCBgbWVzaF9wZWVyX2luY2x1c2lvbl9ldmVudHNgICovXG4gICAgICAgIG1lc2hQZWVySW5jbHVzaW9uRXZlbnRzRmFub3V0OiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21lc2hfcGVlcl9pbmNsdXNpb25fZXZlbnRzX2Zhbm91dF90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnTnVtYmVyIG9mIHRpbWVzIHdlIGluY2x1ZGUgcGVlcnMgaW4gYSB0b3BpYyBtZXNoIGZvciBmYW5vdXQgcmVhc29ucycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIG1lc2hQZWVySW5jbHVzaW9uRXZlbnRzUmFuZG9tOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21lc2hfcGVlcl9pbmNsdXNpb25fZXZlbnRzX3JhbmRvbV90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnTnVtYmVyIG9mIHRpbWVzIHdlIGluY2x1ZGUgcGVlcnMgaW4gYSB0b3BpYyBtZXNoIGZvciByYW5kb20gcmVhc29ucycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIG1lc2hQZWVySW5jbHVzaW9uRXZlbnRzU3Vic2NyaWJlZDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9tZXNoX3BlZXJfaW5jbHVzaW9uX2V2ZW50c19zdWJzY3JpYmVkX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdOdW1iZXIgb2YgdGltZXMgd2UgaW5jbHVkZSBwZWVycyBpbiBhIHRvcGljIG1lc2ggZm9yIHN1YnNjcmliZWQgcmVhc29ucycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIG1lc2hQZWVySW5jbHVzaW9uRXZlbnRzT3V0Ym91bmQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfbWVzaF9wZWVyX2luY2x1c2lvbl9ldmVudHNfb3V0Ym91bmRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ051bWJlciBvZiB0aW1lcyB3ZSBpbmNsdWRlIHBlZXJzIGluIGEgdG9waWMgbWVzaCBmb3Igb3V0Ym91bmQgcmVhc29ucycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIG1lc2hQZWVySW5jbHVzaW9uRXZlbnRzTm90RW5vdWdoOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21lc2hfcGVlcl9pbmNsdXNpb25fZXZlbnRzX25vdF9lbm91Z2hfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ051bWJlciBvZiB0aW1lcyB3ZSBpbmNsdWRlIHBlZXJzIGluIGEgdG9waWMgbWVzaCBmb3Igbm90X2Vub3VnaCByZWFzb25zJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgbWVzaFBlZXJJbmNsdXNpb25FdmVudHNPcHBvcnR1bmlzdGljOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21lc2hfcGVlcl9pbmNsdXNpb25fZXZlbnRzX29wcG9ydHVuaXN0aWNfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ051bWJlciBvZiB0aW1lcyB3ZSBpbmNsdWRlIHBlZXJzIGluIGEgdG9waWMgbWVzaCBmb3Igb3Bwb3J0dW5pc3RpYyByZWFzb25zJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgbWVzaFBlZXJJbmNsdXNpb25FdmVudHNVbmtub3duOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21lc2hfcGVlcl9pbmNsdXNpb25fZXZlbnRzX3Vua25vd25fdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ051bWJlciBvZiB0aW1lcyB3ZSBpbmNsdWRlIHBlZXJzIGluIGEgdG9waWMgbWVzaCBmb3IgdW5rbm93biByZWFzb25zJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE51bWJlciBvZiB0aW1lcyB3ZSByZW1vdmUgcGVlcnMgaW4gYSB0b3BpYyBtZXNoIGZvciBkaWZmZXJlbnQgcmVhc29ucy5cbiAgICAgICAgICogPSBydXN0LWxpYnAycCBgbWVzaF9wZWVyX2NodXJuX2V2ZW50c2AgKi9cbiAgICAgICAgbWVzaFBlZXJDaHVybkV2ZW50c0Rpc2Nvbm5lY3RlZDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9wZWVyX2NodXJuX2V2ZW50c19kaXNjb25uZWN0ZWRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ051bWJlciBvZiB0aW1lcyB3ZSByZW1vdmUgcGVlcnMgaW4gYSB0b3BpYyBtZXNoIGZvciBkaXNjb25uZWN0ZWQgcmVhc29ucycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIG1lc2hQZWVyQ2h1cm5FdmVudHNCYWRTY29yZTogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9wZWVyX2NodXJuX2V2ZW50c19iYWRfc2NvcmVfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ051bWJlciBvZiB0aW1lcyB3ZSByZW1vdmUgcGVlcnMgaW4gYSB0b3BpYyBtZXNoIGZvciBiYWRfc2NvcmUgcmVhc29ucycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIG1lc2hQZWVyQ2h1cm5FdmVudHNQcnVuZTogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9wZWVyX2NodXJuX2V2ZW50c19wcnVuZV90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnTnVtYmVyIG9mIHRpbWVzIHdlIHJlbW92ZSBwZWVycyBpbiBhIHRvcGljIG1lc2ggZm9yIHBydW5lIHJlYXNvbnMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICBtZXNoUGVlckNodXJuRXZlbnRzRXhjZXNzOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX3BlZXJfY2h1cm5fZXZlbnRzX2V4Y2Vzc190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnTnVtYmVyIG9mIHRpbWVzIHdlIHJlbW92ZSBwZWVycyBpbiBhIHRvcGljIG1lc2ggZm9yIGV4Y2VzcyByZWFzb25zJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgbWVzaFBlZXJDaHVybkV2ZW50c1Vua25vd246IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfcGVlcl9jaHVybl9ldmVudHNfdW5rbm93bl90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnTnVtYmVyIG9mIHRpbWVzIHdlIHJlbW92ZSBwZWVycyBpbiBhIHRvcGljIG1lc2ggZm9yIHVua25vd24gcmVhc29ucycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIC8qIEdlbmVyYWwgTWV0cmljcyAqL1xuICAgICAgICAvKipcbiAgICAgICAgICogR29zc2lwc3ViIHN1cHBvcnRzIGZsb29kc3ViLCBnb3NzaXBzdWIgdjEuMCBhbmQgZ29zc2lwc3ViIHYxLjEuIFBlZXJzIGFyZSBjbGFzc2lmaWVkIGJhc2VkXG4gICAgICAgICAqIG9uIHdoaWNoIHByb3RvY29sIHRoZXkgc3VwcG9ydC4gVGhpcyBtZXRyaWMga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBwZWVycyB0aGF0IGFyZVxuICAgICAgICAgKiBjb25uZWN0ZWQgb2YgZWFjaCB0eXBlLiAqL1xuICAgICAgICBwZWVyc1BlclByb3RvY29sOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX3BlZXJzX3Blcl9wcm90b2NvbF9jb3VudCcsXG4gICAgICAgICAgICBoZWxwOiAnUGVlcnMgY29ubmVjdGVkIGZvciBlYWNoIHRvcGljJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsncHJvdG9jb2wnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRoZSB0aW1lIGl0IHRha2VzIHRvIGNvbXBsZXRlIG9uZSBpdGVyYXRpb24gb2YgdGhlIGhlYXJ0YmVhdC4gKi9cbiAgICAgICAgaGVhcnRiZWF0RHVyYXRpb246IHJlZ2lzdGVyLmhpc3RvZ3JhbSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2hlYXJ0YmVhdF9kdXJhdGlvbl9zZWNvbmRzJyxcbiAgICAgICAgICAgIGhlbHA6ICdUaGUgdGltZSBpdCB0YWtlcyB0byBjb21wbGV0ZSBvbmUgaXRlcmF0aW9uIG9mIHRoZSBoZWFydGJlYXQnLFxuICAgICAgICAgICAgLy8gU2hvdWxkIHRha2UgPDEwbXMsIG92ZXIgMXMgaXQncyBhIGh1Z2UgaXNzdWUgdGhhdCBuZWVkcyBkZWJ1Z2dpbmcsIHNpbmNlIGEgaGVhcnRiZWF0IHdpbGwgYmUgY2FuY2VsbGVkXG4gICAgICAgICAgICBidWNrZXRzOiBbMC4wMSwgMC4xLCAxXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIEhlYXJ0YmVhdCBydW4gdG9vayBsb25nZXIgdGhhbiBoZWFydGJlYXQgaW50ZXJ2YWwgc28gbmV4dCBpcyBza2lwcGVkICovXG4gICAgICAgIGhlYXJ0YmVhdFNraXBwZWQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfaGVhcnRiZWF0X3NraXBwZWQnLFxuICAgICAgICAgICAgaGVscDogJ0hlYXJ0YmVhdCBydW4gdG9vayBsb25nZXIgdGhhbiBoZWFydGJlYXQgaW50ZXJ2YWwgc28gbmV4dCBpcyBza2lwcGVkJ1xuICAgICAgICB9KSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1lc3NhZ2UgdmFsaWRhdGlvbiByZXN1bHRzIGZvciBlYWNoIHRvcGljLlxuICAgICAgICAgKiBJbnZhbGlkID09IFJlamVjdD9cbiAgICAgICAgICogPSBydXN0LWxpYnAycCBgaW52YWxpZF9tZXNzYWdlc2AsIGBhY2NlcHRlZF9tZXNzYWdlc2AsIGBpZ25vcmVkX21lc3NhZ2VzYCwgYHJlamVjdGVkX21lc3NhZ2VzYCAqL1xuICAgICAgICBhY2NlcHRlZE1lc3NhZ2VzVG90YWw6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfYWNjZXB0ZWRfbWVzc2FnZXNfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGFjY2VwdGVkIG1lc3NhZ2VzIGZvciBlYWNoIHRvcGljJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgaWdub3JlZE1lc3NhZ2VzVG90YWw6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfaWdub3JlZF9tZXNzYWdlc190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgaWdub3JlZCBtZXNzYWdlcyBmb3IgZWFjaCB0b3BpYycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIHJlamVjdGVkTWVzc2FnZXNUb3RhbDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9yZWplY3RlZF9tZXNzYWdlc190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgcmVqZWN0ZWQgbWVzc2FnZXMgZm9yIGVhY2ggdG9waWMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICB1bmtub3duVmFsaWRhdGlvblJlc3VsdHNUb3RhbDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl91bmtub3duX3ZhbGlkYXRpb25fcmVzdWx0c190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgdW5rbm93biB2YWxpZGF0aW9uIHJlc3VsdHMgZm9yIGVhY2ggdG9waWMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKipcbiAgICAgICAgICogV2hlbiB0aGUgdXNlciB2YWxpZGF0ZXMgYSBtZXNzYWdlLCBpdCB0cmllcyB0byByZSBwcm9wYWdhdGUgaXQgdG8gaXRzIG1lc2ggcGVlcnMuIElmIHRoZVxuICAgICAgICAgKiBtZXNzYWdlIGV4cGlyZXMgZnJvbSB0aGUgbWVtY2FjaGUgYmVmb3JlIGl0IGNhbiBiZSB2YWxpZGF0ZWQsIHdlIGNvdW50IHRoaXMgYSBjYWNoZSBtaXNzXG4gICAgICAgICAqIGFuZCBpdCBpcyBhbiBpbmRpY2F0b3IgdGhhdCB0aGUgbWVtY2FjaGUgc2l6ZSBzaG91bGQgYmUgaW5jcmVhc2VkLlxuICAgICAgICAgKiA9IHJ1c3QtbGlicDJwIGBtY2FjaGVfbWlzc2VzYCAqL1xuICAgICAgICBhc3luY1ZhbGlkYXRpb25NY2FjaGVIaXQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfYXN5bmNfdmFsaWRhdGlvbl9tY2FjaGVfaGl0X3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdBc3luYyB2YWxpZGF0aW9uIHJlc3VsdCByZXBvcnRlZCBieSB0aGUgdXNlciBsYXllcicsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ2hpdCddXG4gICAgICAgIH0pLFxuICAgICAgICBhc3luY1ZhbGlkYXRpb25EZWxheUZyb21GaXJzdFNlZW5TZWM6IHJlZ2lzdGVyLmhpc3RvZ3JhbSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2FzeW5jX3ZhbGlkYXRpb25fZGVsYXlfZnJvbV9maXJzdF9zZWVuJyxcbiAgICAgICAgICAgIGhlbHA6ICdBc3luYyB2YWxpZGF0aW9uIHJlcG9ydCBkZWxheSBmcm9tIGZpcnN0IHNlZW4gaW4gc2Vjb25kJyxcbiAgICAgICAgICAgIGJ1Y2tldHM6IFswLjAxLCAwLjAzLCAwLjEsIDAuMywgMSwgMywgMTBdXG4gICAgICAgIH0pLFxuICAgICAgICBhc3luY1ZhbGlkYXRpb25Vbmtub3duRmlyc3RTZWVuOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2FzeW5jX3ZhbGlkYXRpb25fdW5rbm93bl9maXJzdF9zZWVuX2NvdW50X3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdBc3luYyB2YWxpZGF0aW9uIHJlcG9ydCB1bmtub3duIGZpcnN0IHNlZW4gdmFsdWUgZm9yIG1lc3NhZ2UnXG4gICAgICAgIH0pLFxuICAgICAgICAvLyBwZWVyIHN0cmVhbVxuICAgICAgICBwZWVyUmVhZFN0cmVhbUVycm9yOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX3BlZXJfcmVhZF9zdHJlYW1fZXJyX2NvdW50X3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdQZWVyIHJlYWQgc3RyZWFtIGVycm9yJ1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gUlBDIG91dGdvaW5nLiBUcmFjayBieXRlIGxlbmd0aCArIGRhdGEgc3RydWN0dXJlIHNpemVzXG4gICAgICAgIHJwY1JlY3ZCeXRlczogcmVnaXN0ZXIuZ2F1Z2UoeyBuYW1lOiAnZ29zc2lwc3ViX3JwY19yZWN2X2J5dGVzX3RvdGFsJywgaGVscDogJ1JQQyByZWN2JyB9KSxcbiAgICAgICAgcnBjUmVjdkNvdW50OiByZWdpc3Rlci5nYXVnZSh7IG5hbWU6ICdnb3NzaXBzdWJfcnBjX3JlY3ZfY291bnRfdG90YWwnLCBoZWxwOiAnUlBDIHJlY3YnIH0pLFxuICAgICAgICBycGNSZWN2U3Vic2NyaXB0aW9uOiByZWdpc3Rlci5nYXVnZSh7IG5hbWU6ICdnb3NzaXBzdWJfcnBjX3JlY3Zfc3Vic2NyaXB0aW9uX3RvdGFsJywgaGVscDogJ1JQQyByZWN2JyB9KSxcbiAgICAgICAgcnBjUmVjdk1lc3NhZ2U6IHJlZ2lzdGVyLmdhdWdlKHsgbmFtZTogJ2dvc3NpcHN1Yl9ycGNfcmVjdl9tZXNzYWdlX3RvdGFsJywgaGVscDogJ1JQQyByZWN2JyB9KSxcbiAgICAgICAgcnBjUmVjdkNvbnRyb2w6IHJlZ2lzdGVyLmdhdWdlKHsgbmFtZTogJ2dvc3NpcHN1Yl9ycGNfcmVjdl9jb250cm9sX3RvdGFsJywgaGVscDogJ1JQQyByZWN2JyB9KSxcbiAgICAgICAgcnBjUmVjdklIYXZlOiByZWdpc3Rlci5nYXVnZSh7IG5hbWU6ICdnb3NzaXBzdWJfcnBjX3JlY3ZfaWhhdmVfdG90YWwnLCBoZWxwOiAnUlBDIHJlY3YnIH0pLFxuICAgICAgICBycGNSZWN2SVdhbnQ6IHJlZ2lzdGVyLmdhdWdlKHsgbmFtZTogJ2dvc3NpcHN1Yl9ycGNfcmVjdl9pd2FudF90b3RhbCcsIGhlbHA6ICdSUEMgcmVjdicgfSksXG4gICAgICAgIHJwY1JlY3ZHcmFmdDogcmVnaXN0ZXIuZ2F1Z2UoeyBuYW1lOiAnZ29zc2lwc3ViX3JwY19yZWN2X2dyYWZ0X3RvdGFsJywgaGVscDogJ1JQQyByZWN2JyB9KSxcbiAgICAgICAgcnBjUmVjdlBydW5lOiByZWdpc3Rlci5nYXVnZSh7IG5hbWU6ICdnb3NzaXBzdWJfcnBjX3JlY3ZfcHJ1bmVfdG90YWwnLCBoZWxwOiAnUlBDIHJlY3YnIH0pLFxuICAgICAgICBycGNEYXRhRXJyb3I6IHJlZ2lzdGVyLmdhdWdlKHsgbmFtZTogJ2dvc3NpcHN1Yl9ycGNfZGF0YV9lcnJfY291bnRfdG90YWwnLCBoZWxwOiAnUlBDIGRhdGEgZXJyb3InIH0pLFxuICAgICAgICBycGNSZWN2RXJyb3I6IHJlZ2lzdGVyLmdhdWdlKHsgbmFtZTogJ2dvc3NpcHN1Yl9ycGNfcmVjdl9lcnJfY291bnRfdG90YWwnLCBoZWxwOiAnUlBDIHJlY3YgZXJyb3InIH0pLFxuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgUlBDIGRyb3BwZWQgYmVjYXVzZSBhY2NlcHRGcm9tKCkgPT0gZmFsc2UgKi9cbiAgICAgICAgcnBjUmVjdk5vdEFjY2VwdGVkOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX3JwY19yY3Zfbm90X2FjY2VwdGVkX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBSUEMgZHJvcHBlZCBiZWNhdXNlIGFjY2VwdEZyb20oKSA9PSBmYWxzZSdcbiAgICAgICAgfSksXG4gICAgICAgIC8vIFJQQyBpbmNvbWluZy4gVHJhY2sgYnl0ZSBsZW5ndGggKyBkYXRhIHN0cnVjdHVyZSBzaXplc1xuICAgICAgICBycGNTZW50Qnl0ZXM6IHJlZ2lzdGVyLmdhdWdlKHsgbmFtZTogJ2dvc3NpcHN1Yl9ycGNfc2VudF9ieXRlc190b3RhbCcsIGhlbHA6ICdSUEMgc2VudCcgfSksXG4gICAgICAgIHJwY1NlbnRDb3VudDogcmVnaXN0ZXIuZ2F1Z2UoeyBuYW1lOiAnZ29zc2lwc3ViX3JwY19zZW50X2NvdW50X3RvdGFsJywgaGVscDogJ1JQQyBzZW50JyB9KSxcbiAgICAgICAgcnBjU2VudFN1YnNjcmlwdGlvbjogcmVnaXN0ZXIuZ2F1Z2UoeyBuYW1lOiAnZ29zc2lwc3ViX3JwY19zZW50X3N1YnNjcmlwdGlvbl90b3RhbCcsIGhlbHA6ICdSUEMgc2VudCcgfSksXG4gICAgICAgIHJwY1NlbnRNZXNzYWdlOiByZWdpc3Rlci5nYXVnZSh7IG5hbWU6ICdnb3NzaXBzdWJfcnBjX3NlbnRfbWVzc2FnZV90b3RhbCcsIGhlbHA6ICdSUEMgc2VudCcgfSksXG4gICAgICAgIHJwY1NlbnRDb250cm9sOiByZWdpc3Rlci5nYXVnZSh7IG5hbWU6ICdnb3NzaXBzdWJfcnBjX3NlbnRfY29udHJvbF90b3RhbCcsIGhlbHA6ICdSUEMgc2VudCcgfSksXG4gICAgICAgIHJwY1NlbnRJSGF2ZTogcmVnaXN0ZXIuZ2F1Z2UoeyBuYW1lOiAnZ29zc2lwc3ViX3JwY19zZW50X2loYXZlX3RvdGFsJywgaGVscDogJ1JQQyBzZW50JyB9KSxcbiAgICAgICAgcnBjU2VudElXYW50OiByZWdpc3Rlci5nYXVnZSh7IG5hbWU6ICdnb3NzaXBzdWJfcnBjX3NlbnRfaXdhbnRfdG90YWwnLCBoZWxwOiAnUlBDIHNlbnQnIH0pLFxuICAgICAgICBycGNTZW50R3JhZnQ6IHJlZ2lzdGVyLmdhdWdlKHsgbmFtZTogJ2dvc3NpcHN1Yl9ycGNfc2VudF9ncmFmdF90b3RhbCcsIGhlbHA6ICdSUEMgc2VudCcgfSksXG4gICAgICAgIHJwY1NlbnRQcnVuZTogcmVnaXN0ZXIuZ2F1Z2UoeyBuYW1lOiAnZ29zc2lwc3ViX3JwY19zZW50X3BydW5lX3RvdGFsJywgaGVscDogJ1JQQyBzZW50JyB9KSxcbiAgICAgICAgLy8gcHVibGlzaCBtZXNzYWdlLiBUcmFjayBwZWVycyBzZW50IHRvIGFuZCBieXRlc1xuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgbXNnIHB1Ymxpc2hlZCBieSB0b3BpYyAqL1xuICAgICAgICBtc2dQdWJsaXNoQ291bnQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfbXNnX3B1Ymxpc2hfY291bnRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIG1zZyBwdWJsaXNoZWQgYnkgdG9waWMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgcGVlcnMgdGhhdCB3ZSBwdWJsaXNoIGEgbXNnIHRvICovXG4gICAgICAgIG1zZ1B1Ymxpc2hQZWVyc0J5VG9waWM6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfbXNnX3B1Ymxpc2hfcGVlcnNfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIHBlZXJzIHRoYXQgd2UgcHVibGlzaCBhIG1zZyB0bycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIC8qKiBUb3RhbCBjb3VudCBvZiBwZWVycyAoYnkgZ3JvdXApIHRoYXQgd2UgcHVibGlzaCBhIG1zZyB0byAqL1xuICAgICAgICBkaXJlY3RQZWVyc1B1Ymxpc2hlZFRvdGFsOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2RpcmVjdF9wZWVyc19wdWJsaXNoZWRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGRpcmVjdCBwZWVycyB0aGF0IHdlIHB1Ymxpc2ggYSBtc2cgdG8nLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICBmbG9vZHN1YlBlZXJzUHVibGlzaGVkVG90YWw6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfZmxvb2RzdWJfcGVlcnNfcHVibGlzaGVkX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBmbG9vZHN1YiBwZWVycyB0aGF0IHdlIHB1Ymxpc2ggYSBtc2cgdG8nLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICBtZXNoUGVlcnNQdWJsaXNoZWRUb3RhbDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9tZXNoX3BlZXJzX3B1Ymxpc2hlZF90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgbWVzaCBwZWVycyB0aGF0IHdlIHB1Ymxpc2ggYSBtc2cgdG8nLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICBmYW5vdXRQZWVyc1B1Ymxpc2hlZFRvdGFsOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2Zhbm91dF9wZWVyc19wdWJsaXNoZWRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGZhbm91dCBwZWVycyB0aGF0IHdlIHB1Ymxpc2ggYSBtc2cgdG8nLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgbXNnIHB1Ymxpc2ggZGF0YS5sZW5ndGggYnl0ZXMgKi9cbiAgICAgICAgbXNnUHVibGlzaEJ5dGVzOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21zZ19wdWJsaXNoX2J5dGVzX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBtc2cgcHVibGlzaCBkYXRhLmxlbmd0aCBieXRlcycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIC8qKiBUb3RhbCB0aW1lIGluIHNlY29uZHMgdG8gcHVibGlzaCBhIG1lc3NhZ2UgKi9cbiAgICAgICAgbXNnUHVibGlzaFRpbWU6IHJlZ2lzdGVyLmhpc3RvZ3JhbSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21zZ19wdWJsaXNoX3NlY29uZHMnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIHRpbWUgaW4gc2Vjb25kcyB0byBwdWJsaXNoIGEgbWVzc2FnZScsXG4gICAgICAgICAgICBidWNrZXRzOiBbMC4wMDEsIDAuMDAyLCAwLjAwNSwgMC4wMSwgMC4xLCAwLjUsIDFdLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgbXNnIGZvcndhcmRlZCBieSB0b3BpYyAqL1xuICAgICAgICBtc2dGb3J3YXJkQ291bnQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfbXNnX2ZvcndhcmRfY291bnRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIG1zZyBmb3J3YXJkZWQgYnkgdG9waWMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgcGVlcnMgdGhhdCB3ZSBmb3J3YXJkIGEgbXNnIHRvICovXG4gICAgICAgIG1zZ0ZvcndhcmRQZWVyczogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9tc2dfZm9yd2FyZF9wZWVyc190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgcGVlcnMgdGhhdCB3ZSBmb3J3YXJkIGEgbXNnIHRvJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRvdGFsIGNvdW50IG9mIHJlY3YgbXNncyBiZWZvcmUgYW55IHZhbGlkYXRpb24gKi9cbiAgICAgICAgbXNnUmVjZWl2ZWRQcmVWYWxpZGF0aW9uOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21zZ19yZWNlaXZlZF9wcmV2YWxpZGF0aW9uX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiByZWN2IG1zZ3MgYmVmb3JlIGFueSB2YWxpZGF0aW9uJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRvdGFsIGNvdW50IG9mIHJlY3YgbXNncyBlcnJvciAqL1xuICAgICAgICBtc2dSZWNlaXZlZEVycm9yOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21zZ19yZWNlaXZlZF9lcnJvcl90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgcmVjdiBtc2dzIGVycm9yJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRyYWNrcyBkaXN0cmlidXRpb24gb2YgcmVjdiBtc2dzIGJ5IGR1cGxpY2F0ZSwgaW52YWxpZCwgdmFsaWQgKi9cbiAgICAgICAgcHJldmFsaWRhdGlvbkludmFsaWRUb3RhbDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9wcmVfdmFsaWRhdGlvbl9pbnZhbGlkX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBpbnZhbGlkIG1lc3NhZ2VzIHJlY2VpdmVkJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgcHJldmFsaWRhdGlvblZhbGlkVG90YWw6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfcHJlX3ZhbGlkYXRpb25fdmFsaWRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIHZhbGlkIG1lc3NhZ2VzIHJlY2VpdmVkJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgcHJldmFsaWRhdGlvbkR1cGxpY2F0ZVRvdGFsOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX3ByZV92YWxpZGF0aW9uX2R1cGxpY2F0ZV90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgZHVwbGljYXRlIG1lc3NhZ2VzIHJlY2VpdmVkJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgcHJldmFsaWRhdGlvblVua25vd25Ub3RhbDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9wcmVfdmFsaWRhdGlvbl91bmtub3duX3N0YXR1c190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgdW5rbm93bl9zdGF0dXMgbWVzc2FnZXMgcmVjZWl2ZWQnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVHJhY2tzIHNwZWNpZmljIHJlYXNvbiBvZiBpbnZhbGlkICovXG4gICAgICAgIG1zZ1JlY2VpdmVkSW52YWxpZDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9tc2dfcmVjZWl2ZWRfaW52YWxpZF90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVHJhY2tzIHNwZWNpZmljIHJlYXNvbiBvZiBpbnZhbGlkJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsnZXJyb3InXVxuICAgICAgICB9KSxcbiAgICAgICAgbXNnUmVjZWl2ZWRJbnZhbGlkQnlUb3BpYzogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9tc2dfcmVjZWl2ZWRfaW52YWxpZF9ieV90b3BpY190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVHJhY2tzIHNwZWNpZmljIGludmFsaWQgbWVzc2FnZSBieSB0b3BpYycsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIC8qKiBUcmFjayBkdXBsaWNhdGUgbWVzc2FnZSBkZWxpdmVyeSB0aW1lICovXG4gICAgICAgIGR1cGxpY2F0ZU1zZ0RlbGl2ZXJ5RGVsYXk6IHJlZ2lzdGVyLmhpc3RvZ3JhbSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lzdWJfZHVwbGljYXRlX21zZ19kZWxpdmVyeV9kZWxheV9zZWNvbmRzJyxcbiAgICAgICAgICAgIGhlbHA6ICdUaW1lIHNpbmNlIHRoZSAxc3QgZHVwbGljYXRlZCBtZXNzYWdlIHZhbGlkYXRlZCcsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ10sXG4gICAgICAgICAgICBidWNrZXRzOiBbXG4gICAgICAgICAgICAgICAgMC4yNSAqIG9wdHMubWF4TWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2luZG93U2VjLFxuICAgICAgICAgICAgICAgIDAuNSAqIG9wdHMubWF4TWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2luZG93U2VjLFxuICAgICAgICAgICAgICAgIE51bWJlcihvcHRzLm1heE1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvd1NlYyksXG4gICAgICAgICAgICAgICAgMiAqIG9wdHMubWF4TWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2luZG93U2VjLFxuICAgICAgICAgICAgICAgIDQgKiBvcHRzLm1heE1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvd1NlY1xuICAgICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRvdGFsIGNvdW50IG9mIGxhdGUgbXNnIGRlbGl2ZXJ5IHRvdGFsIGJ5IHRvcGljICovXG4gICAgICAgIGR1cGxpY2F0ZU1zZ0xhdGVEZWxpdmVyeTogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3Npc3ViX2R1cGxpY2F0ZV9tc2dfbGF0ZV9kZWxpdmVyeV90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgbGF0ZSBkdXBsaWNhdGUgbWVzc2FnZSBkZWxpdmVyeSBieSB0b3BpYywgd2hpY2ggdHJpZ2dlcnMgUDMgcGVuYWx0eScsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RvcGljJ11cbiAgICAgICAgfSksXG4gICAgICAgIGR1cGxpY2F0ZU1zZ0lnbm9yZWQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXN1Yl9pZ25vcmVkX3B1Ymxpc2hlZF9kdXBsaWNhdGVfbXNnc190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgcHVibGlzaGVkIGR1cGxpY2F0ZSBtZXNzYWdlIGlnbm9yZWQgYnkgdG9waWMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiBNZXRyaWNzIHJlbGF0ZWQgdG8gc2NvcmluZyAqL1xuICAgICAgICAvKiogVG90YWwgdGltZXMgc2NvcmUoKSBpcyBjYWxsZWQgKi9cbiAgICAgICAgc2NvcmVGbkNhbGxzOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX3Njb3JlX2ZuX2NhbGxzX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCB0aW1lcyBzY29yZSgpIGlzIGNhbGxlZCdcbiAgICAgICAgfSksXG4gICAgICAgIC8qKiBUb3RhbCB0aW1lcyBzY29yZSgpIGNhbGwgYWN0dWFsbHkgY29tcHV0ZWQgY29tcHV0ZVNjb3JlKCksIG5vIGNhY2hlICovXG4gICAgICAgIHNjb3JlRm5SdW5zOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX3Njb3JlX2ZuX3J1bnNfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIHRpbWVzIHNjb3JlKCkgY2FsbCBhY3R1YWxseSBjb21wdXRlZCBjb21wdXRlU2NvcmUoKSwgbm8gY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBzY29yZUNhY2hlZERlbHRhOiByZWdpc3Rlci5oaXN0b2dyYW0oe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9zY29yZV9jYWNoZV9kZWx0YScsXG4gICAgICAgICAgICBoZWxwOiAnRGVsdGEgb2Ygc2NvcmUgYmV0d2VlbiBjYWNoZWQgdmFsdWVzIHRoYXQgZXhwaXJlZCcsXG4gICAgICAgICAgICBidWNrZXRzOiBbMTAsIDEwMCwgMTAwMF1cbiAgICAgICAgfSksXG4gICAgICAgIC8qKiBDdXJyZW50IGNvdW50IG9mIHBlZXJzIGJ5IHNjb3JlIHRocmVzaG9sZCAqL1xuICAgICAgICBwZWVyc0J5U2NvcmVUaHJlc2hvbGQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfcGVlcnNfYnlfc2NvcmVfdGhyZXNob2xkX2NvdW50JyxcbiAgICAgICAgICAgIGhlbHA6ICdDdXJyZW50IGNvdW50IG9mIHBlZXJzIGJ5IHNjb3JlIHRocmVzaG9sZCcsXG4gICAgICAgICAgICBsYWJlbE5hbWVzOiBbJ3RocmVzaG9sZCddXG4gICAgICAgIH0pLFxuICAgICAgICBzY29yZTogcmVnaXN0ZXIuYXZnTWluTWF4KHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfc2NvcmUnLFxuICAgICAgICAgICAgaGVscDogJ0F2ZyBtaW4gbWF4IG9mIGdvc3NpcCBzY29yZXMnXG4gICAgICAgIH0pLFxuICAgICAgICAvKipcbiAgICAgICAgICogU2VwYXJhdGUgc2NvcmUgd2VpZ2h0c1xuICAgICAgICAgKiBOZWVkIHRvIHVzZSAyLWxhYmVsIG1ldHJpY3MgaW4gdGhpcyBjYXNlIHRvIGRlYnVnIHRoZSBzY29yZSB3ZWlnaHRzXG4gICAgICAgICAqKi9cbiAgICAgICAgc2NvcmVXZWlnaHRzOiByZWdpc3Rlci5hdmdNaW5NYXgoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9zY29yZV93ZWlnaHRzJyxcbiAgICAgICAgICAgIGhlbHA6ICdTZXBhcmF0ZSBzY29yZSB3ZWlnaHRzJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnLCAncCddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogSGlzdG9ncmFtIG9mIHRoZSBzY29yZXMgZm9yIGVhY2ggbWVzaCB0b3BpYy4gKi9cbiAgICAgICAgLy8gVE9ETzogTm90IGltcGxlbWVudGVkXG4gICAgICAgIHNjb3JlUGVyTWVzaDogcmVnaXN0ZXIuYXZnTWluTWF4KHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfc2NvcmVfcGVyX21lc2gnLFxuICAgICAgICAgICAgaGVscDogJ0hpc3RvZ3JhbSBvZiB0aGUgc2NvcmVzIGZvciBlYWNoIG1lc2ggdG9waWMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWyd0b3BpYyddXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogQSBjb3VudGVyIG9mIHRoZSBraW5kIG9mIHBlbmFsdGllcyBiZWluZyBhcHBsaWVkIHRvIHBlZXJzLiAqL1xuICAgICAgICAvLyBUT0RPOiBOb3QgZnVsbHkgaW1wbGVtZW50ZWRcbiAgICAgICAgc2NvcmluZ1BlbmFsdGllczogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9zY29yaW5nX3BlbmFsdGllc190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnQSBjb3VudGVyIG9mIHRoZSBraW5kIG9mIHBlbmFsdGllcyBiZWluZyBhcHBsaWVkIHRvIHBlZXJzJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsncGVuYWx0eSddXG4gICAgICAgIH0pLFxuICAgICAgICBiZWhhdmlvdXJQZW5hbHR5OiByZWdpc3Rlci5oaXN0b2dyYW0oe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9wZWVyX3N0YXRfYmVoYXZpb3VyX3BlbmFsdHknLFxuICAgICAgICAgICAgaGVscDogJ0N1cnJlbnQgcGVlciBzdGF0IGJlaGF2aW91cl9wZW5hbHR5IGF0IGVhY2ggc2NyYXBlJyxcbiAgICAgICAgICAgIGJ1Y2tldHM6IFtcbiAgICAgICAgICAgICAgICAwLjI1ICogb3B0cy5iZWhhdmlvdXJQZW5hbHR5VGhyZXNob2xkLFxuICAgICAgICAgICAgICAgIDAuNSAqIG9wdHMuYmVoYXZpb3VyUGVuYWx0eVRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICBOdW1iZXIob3B0cy5iZWhhdmlvdXJQZW5hbHR5VGhyZXNob2xkKSxcbiAgICAgICAgICAgICAgICAyICogb3B0cy5iZWhhdmlvdXJQZW5hbHR5VGhyZXNob2xkLFxuICAgICAgICAgICAgICAgIDQgKiBvcHRzLmJlaGF2aW91clBlbmFsdHlUaHJlc2hvbGRcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIC0gaWFza2VkIHBlciBwZWVyIChvbiBoZWFydGJlYXQpXG4gICAgICAgIC8vIC0gd2hlbiBwcm9taXNlIGlzIHJlc29sdmVkLCB0cmFjayBtZXNzYWdlcyBmcm9tIHByb21pc2VzXG4gICAgICAgIC8qKiBUb3RhbCByZWNlaXZlZCBJSEFWRSBtZXNzYWdlcyB0aGF0IHdlIGlnbm9yZSBmb3Igc29tZSByZWFzb24gKi9cbiAgICAgICAgaWhhdmVSY3ZJZ25vcmVkOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2loYXZlX3Jjdl9pZ25vcmVkX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCByZWNlaXZlZCBJSEFWRSBtZXNzYWdlcyB0aGF0IHdlIGlnbm9yZSBmb3Igc29tZSByZWFzb24nLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWydyZWFzb24nXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRvdGFsIHJlY2VpdmVkIElIQVZFIG1lc3NhZ2VzIGJ5IHRvcGljICovXG4gICAgICAgIGloYXZlUmN2TXNnaWRzOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2loYXZlX3Jjdl9tc2dpZHNfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIHJlY2VpdmVkIElIQVZFIG1lc3NhZ2VzIGJ5IHRvcGljJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRvdGFsIG1lc3NhZ2VzIHBlciB0b3BpYyB3ZSBkb24ndCBoYXZlLiBOb3QgYWN0dWFsIHJlcXVlc3RzLlxuICAgICAgICAgKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHdlIGhhdmUgZGVjaWRlZCB0aGF0IGFuIElXQU5UIGNvbnRyb2wgbWVzc2FnZSBpcyByZXF1aXJlZCBmb3IgdGhpc1xuICAgICAgICAgKiB0b3BpYy4gQSB2ZXJ5IGhpZ2ggbWV0cmljIG1pZ2h0IGluZGljYXRlIGFuIHVuZGVycGVyZm9ybWluZyBuZXR3b3JrLlxuICAgICAgICAgKiA9IHJ1c3QtbGlicDJwIGB0b3BpY19pd2FudF9tc2dzYCAqL1xuICAgICAgICBpaGF2ZVJjdk5vdFNlZW5Nc2dpZHM6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfaWhhdmVfcmN2X25vdF9zZWVuX21zZ2lkc190b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgbWVzc2FnZXMgcGVyIHRvcGljIHdlIGRvIG5vdCBoYXZlLCBub3QgYWN0dWFsIHJlcXVlc3RzJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRvdGFsIHJlY2VpdmVkIElXQU5UIG1lc3NhZ2VzIGJ5IHRvcGljICovXG4gICAgICAgIGl3YW50UmN2TXNnaWRzOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2l3YW50X3Jjdl9tc2dpZHNfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIHJlY2VpdmVkIElXQU5UIG1lc3NhZ2VzIGJ5IHRvcGljJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsndG9waWMnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRvdGFsIHJlcXVlc3RlZCBtZXNzYWdlSURzIHRoYXQgd2UgZG9uJ3QgaGF2ZSAqL1xuICAgICAgICBpd2FudFJjdkRvbnRoYXZlTXNnaWRzOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2l3YW50X3Jjdl9kb250X2hhdmVfbXNnaWRzX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCByZXF1ZXN0ZWQgbWVzc2FnZUlEcyB0aGF0IHdlIGRvIG5vdCBoYXZlJ1xuICAgICAgICB9KSxcbiAgICAgICAgaXdhbnRQcm9taXNlU3RhcnRlZDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9pd2FudF9wcm9taXNlX3NlbnRfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIHN0YXJ0ZWQgSVdBTlQgcHJvbWlzZXMnXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgcmVzb2x2ZWQgSVdBTlQgcHJvbWlzZXMgKi9cbiAgICAgICAgaXdhbnRQcm9taXNlUmVzb2x2ZWQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfaXdhbnRfcHJvbWlzZV9yZXNvbHZlZF90b3RhbCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgcmVzb2x2ZWQgSVdBTlQgcHJvbWlzZXMnXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogVG90YWwgY291bnQgb2YgcmVzb2x2ZWQgSVdBTlQgcHJvbWlzZXMgZnJvbSBkdXBsaWNhdGUgbWVzc2FnZXMgKi9cbiAgICAgICAgaXdhbnRQcm9taXNlUmVzb2x2ZWRGcm9tRHVwbGljYXRlOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2l3YW50X3Byb21pc2VfcmVzb2x2ZWRfZnJvbV9kdXBsaWNhdGVfdG90YWwnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIHJlc29sdmVkIElXQU5UIHByb21pc2VzIGZyb20gZHVwbGljYXRlIG1lc3NhZ2VzJ1xuICAgICAgICB9KSxcbiAgICAgICAgLyoqIFRvdGFsIGNvdW50IG9mIHBlZXJzIHdlIGhhdmUgYXNrZWQgSVdBTlQgcHJvbWlzZXMgdGhhdCBhcmUgcmVzb2x2ZWQgKi9cbiAgICAgICAgaXdhbnRQcm9taXNlUmVzb2x2ZWRQZWVyczogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9pd2FudF9wcm9taXNlX3Jlc29sdmVkX3BlZXJzJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBwZWVycyB3ZSBoYXZlIGFza2VkIElXQU5UIHByb21pc2VzIHRoYXQgYXJlIHJlc29sdmVkJ1xuICAgICAgICB9KSxcbiAgICAgICAgaXdhbnRQcm9taXNlQnJva2VuOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2l3YW50X3Byb21pc2VfYnJva2VuJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBicm9rZW4gSVdBTlQgcHJvbWlzZXMnXG4gICAgICAgIH0pLFxuICAgICAgICBpd2FudE1lc3NhZ2VQcnVuZWQ6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfaXdhbnRfbWVzc2FnZV9wcnVuZWQnLFxuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIHBydW5lZCBJV0FOVCBtZXNzYWdlcydcbiAgICAgICAgfSksXG4gICAgICAgIC8qKiBIaXN0b2dyYW0gb2YgZGVsaXZlcnkgdGltZSBvZiByZXNvbHZlZCBJV0FOVCBwcm9taXNlcyAqL1xuICAgICAgICBpd2FudFByb21pc2VEZWxpdmVyeVRpbWU6IHJlZ2lzdGVyLmhpc3RvZ3JhbSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX2l3YW50X3Byb21pc2VfZGVsaXZlcnlfc2Vjb25kcycsXG4gICAgICAgICAgICBoZWxwOiAnSGlzdG9ncmFtIG9mIGRlbGl2ZXJ5IHRpbWUgb2YgcmVzb2x2ZWQgSVdBTlQgcHJvbWlzZXMnLFxuICAgICAgICAgICAgYnVja2V0czogW1xuICAgICAgICAgICAgICAgIDAuNSAqIG9wdHMuZ29zc2lwUHJvbWlzZUV4cGlyZVNlYyxcbiAgICAgICAgICAgICAgICBOdW1iZXIob3B0cy5nb3NzaXBQcm9taXNlRXhwaXJlU2VjKSxcbiAgICAgICAgICAgICAgICAyICogb3B0cy5nb3NzaXBQcm9taXNlRXhwaXJlU2VjLFxuICAgICAgICAgICAgICAgIDQgKiBvcHRzLmdvc3NpcFByb21pc2VFeHBpcmVTZWNcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIGl3YW50UHJvbWlzZVVudHJhY2tlZDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcF9pd2FudF9wcm9taXNlX3VudHJhY2tlZCcsXG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2YgdW50cmFja2VkIElXQU5UIHByb21pc2UnXG4gICAgICAgIH0pLFxuICAgICAgICAvKiogQmFja29mZiB0aW1lICovXG4gICAgICAgIGNvbm5lY3RlZFBlZXJzQmFja29mZlNlYzogcmVnaXN0ZXIuaGlzdG9ncmFtKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfY29ubmVjdGVkX3BlZXJzX2JhY2tvZmZfc2Vjb25kcycsXG4gICAgICAgICAgICBoZWxwOiAnQmFja29mZiB0aW1lIGluIHNlY29uZHMnLFxuICAgICAgICAgICAgLy8gVXNpbmcgMSBzZWNvbmRzIGFzIG1pbmltdW0gYXMgdGhhdCdzIGNsb3NlIHRvIHRoZSBoZWFydGJlYXQgZHVyYXRpb24sIG5vIG5lZWQgZm9yIG1vcmUgcmVzb2x1dGlvbi5cbiAgICAgICAgICAgIC8vIEFzIHBlciBzcGVjLCBiYWNrb2ZmIHRpbWVzIGFyZSAxMCBzZWNvbmRzIGZvciBVbnN1YnNjcmliZUJhY2tvZmYgYW5kIDYwIHNlY29uZHMgZm9yIFBydW5lQmFja29mZi5cbiAgICAgICAgICAgIC8vIEhpZ2hlciB2YWx1ZXMgb2YgNjAgc2Vjb25kcyBzaG91bGQgbm90IG9jY3VyLCBidXQgd2UgYWRkIDEyMCBzZWNvbmRzIGp1c3QgaW4gY2FzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xpYnAycC9zcGVjcy9ibG9iL21hc3Rlci9wdWJzdWIvZ29zc2lwc3ViL2dvc3NpcHN1Yi12MS4xLm1kI292ZXJ2aWV3LW9mLW5ldy1wYXJhbWV0ZXJzXG4gICAgICAgICAgICBidWNrZXRzOiBbMSwgMiwgNCwgMTAsIDIwLCA2MCwgMTIwXVxuICAgICAgICB9KSxcbiAgICAgICAgLyogRGF0YSBzdHJ1Y3R1cmUgc2l6ZXMgKi9cbiAgICAgICAgLyoqIFVuYm91bmRlZCBjYWNoZSBzaXplcyAqL1xuICAgICAgICBjYWNoZVNpemU6IHJlZ2lzdGVyLmdhdWdlKHtcbiAgICAgICAgICAgIG5hbWU6ICdnb3NzaXBzdWJfY2FjaGVfc2l6ZScsXG4gICAgICAgICAgICBoZWxwOiAnVW5ib3VuZGVkIGNhY2hlIHNpemVzJyxcbiAgICAgICAgICAgIGxhYmVsTmFtZXM6IFsnY2FjaGUnXVxuICAgICAgICB9KSxcbiAgICAgICAgLyoqIEN1cnJlbnQgbWNhY2hlIG1zZyBjb3VudCAqL1xuICAgICAgICBtY2FjaGVTaXplOiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX21jYWNoZV9zaXplJyxcbiAgICAgICAgICAgIGhlbHA6ICdDdXJyZW50IG1jYWNoZSBtc2cgY291bnQnXG4gICAgICAgIH0pLFxuICAgICAgICBtY2FjaGVOb3RWYWxpZGF0ZWRDb3VudDogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9tY2FjaGVfbm90X3ZhbGlkYXRlZF9jb3VudCcsXG4gICAgICAgICAgICBoZWxwOiAnQ3VycmVudCBtY2FjaGUgbXNnIGNvdW50IG5vdCB2YWxpZGF0ZWQnXG4gICAgICAgIH0pLFxuICAgICAgICBmYXN0TXNnSWRDYWNoZUNvbGxpc2lvbjogcmVnaXN0ZXIuZ2F1Z2Uoe1xuICAgICAgICAgICAgbmFtZTogJ2dvc3NpcHN1Yl9mYXN0bXNnaWRfY2FjaGVfY29sbGlzaW9uX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBrZXkgY29sbGlzaW9ucyBvbiBmYXN0bXNnaWQgY2FjaGUgcHV0J1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3Q29ubmVjdGlvbkNvdW50OiByZWdpc3Rlci5nYXVnZSh7XG4gICAgICAgICAgICBuYW1lOiAnZ29zc2lwc3ViX25ld19jb25uZWN0aW9uX3RvdGFsJyxcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBuZXcgY29ubmVjdGlvbiBieSBzdGF0dXMnLFxuICAgICAgICAgICAgbGFiZWxOYW1lczogWydzdGF0dXMnXVxuICAgICAgICB9KSxcbiAgICAgICAgdG9waWNTdHJUb0xhYmVsLFxuICAgICAgICB0b1RvcGljKHRvcGljU3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b3BpY1N0clRvTGFiZWwuZ2V0KHRvcGljU3RyKSA/PyB0b3BpY1N0cjtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqIFdlIGpvaW5lZCBhIHRvcGljICovXG4gICAgICAgIG9uSm9pbih0b3BpY1N0cikge1xuICAgICAgICAgICAgdGhpcy50b3BpY1N1YnNjcmlwdGlvblN0YXR1cy5zZXQoeyB0b3BpY1N0ciB9LCAxKTtcbiAgICAgICAgICAgIHRoaXMubWVzaFBlZXJDb3VudHMuc2V0KHsgdG9waWNTdHIgfSwgMCk7IC8vIFJlc2V0IGNvdW50XG4gICAgICAgIH0sXG4gICAgICAgIC8qKiBXZSBsZWZ0IGEgdG9waWMgKi9cbiAgICAgICAgb25MZWF2ZSh0b3BpY1N0cikge1xuICAgICAgICAgICAgdGhpcy50b3BpY1N1YnNjcmlwdGlvblN0YXR1cy5zZXQoeyB0b3BpY1N0ciB9LCAwKTtcbiAgICAgICAgICAgIHRoaXMubWVzaFBlZXJDb3VudHMuc2V0KHsgdG9waWNTdHIgfSwgMCk7IC8vIFJlc2V0IGNvdW50XG4gICAgICAgIH0sXG4gICAgICAgIC8qKiBSZWdpc3RlciB0aGUgaW5jbHVzaW9uIG9mIHBlZXJzIGluIG91ciBtZXNoIGR1ZSB0byBzb21lIHJlYXNvbi4gKi9cbiAgICAgICAgb25BZGRUb01lc2godG9waWNTdHIsIHJlYXNvbiwgY291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy50b1RvcGljKHRvcGljU3RyKTtcbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBJbmNsdXNpb25SZWFzb24uRmFub3V0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzRmFub3V0LmluYyh7IHRvcGljIH0sIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBJbmNsdXNpb25SZWFzb24uUmFuZG9tOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzUmFuZG9tLmluYyh7IHRvcGljIH0sIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBJbmNsdXNpb25SZWFzb24uU3Vic2NyaWJlZDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNoUGVlckluY2x1c2lvbkV2ZW50c1N1YnNjcmliZWQuaW5jKHsgdG9waWMgfSwgY291bnQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEluY2x1c2lvblJlYXNvbi5PdXRib3VuZDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNoUGVlckluY2x1c2lvbkV2ZW50c091dGJvdW5kLmluYyh7IHRvcGljIH0sIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBJbmNsdXNpb25SZWFzb24uTm90RW5vdWdoOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzTm90RW5vdWdoLmluYyh7IHRvcGljIH0sIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBJbmNsdXNpb25SZWFzb24uT3Bwb3J0dW5pc3RpYzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNoUGVlckluY2x1c2lvbkV2ZW50c09wcG9ydHVuaXN0aWMuaW5jKHsgdG9waWMgfSwgY291bnQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzVW5rbm93bi5pbmMoeyB0b3BpYyB9LCBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvKiogUmVnaXN0ZXIgdGhlIHJlbW92YWwgb2YgcGVlcnMgaW4gb3VyIG1lc2ggZHVlIHRvIHNvbWUgcmVhc29uICovXG4gICAgICAgIC8vIC0gcmVtb3ZlX3BlZXJfZnJvbV9tZXNoKClcbiAgICAgICAgLy8gLSBoZWFydGJlYXQoKSBDaHVybjo6QmFkU2NvcmVcbiAgICAgICAgLy8gLSBoZWFydGJlYXQoKSBDaHVybjo6RXhjZXNzXG4gICAgICAgIC8vIC0gb25fZGlzY29ubmVjdCgpIENodXJuOjpEc1xuICAgICAgICBvblJlbW92ZUZyb21NZXNoKHRvcGljU3RyLCByZWFzb24sIGNvdW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMudG9Ub3BpYyh0b3BpY1N0cik7XG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgQ2h1cm5SZWFzb24uRGM6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzaFBlZXJDaHVybkV2ZW50c0Rpc2Nvbm5lY3RlZC5pbmMoeyB0b3BpYyB9LCBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ2h1cm5SZWFzb24uQmFkU2NvcmU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzaFBlZXJDaHVybkV2ZW50c0JhZFNjb3JlLmluYyh7IHRvcGljIH0sIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBDaHVyblJlYXNvbi5QcnVuZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNoUGVlckNodXJuRXZlbnRzUHJ1bmUuaW5jKHsgdG9waWMgfSwgY291bnQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIENodXJuUmVhc29uLkV4Y2VzczpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNoUGVlckNodXJuRXZlbnRzRXhjZXNzLmluYyh7IHRvcGljIH0sIGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNoUGVlckNodXJuRXZlbnRzVW5rbm93bi5pbmMoeyB0b3BpYyB9LCBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlIHZhbGlkYXRpb24gcmVzdWx0IHRvIG1ldHJpY3NcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG1lc3NhZ2VSZWNvcmQgLSBudWxsIG1lYW5zIHRoZSBtZXNzYWdlJ3MgbWNhY2hlIHJlY29yZCB3YXMgbm90IGtub3duIGF0IHRoZSB0aW1lIG9mIGFjY2VwdGFuY2UgcmVwb3J0XG4gICAgICAgICAqL1xuICAgICAgICBvblJlcG9ydFZhbGlkYXRpb24obWVzc2FnZVJlY29yZCwgYWNjZXB0YW5jZSwgZmlyc3RTZWVuVGltZXN0YW1wTXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0aW9uTWNhY2hlSGl0LmluYyh7IGhpdDogbWVzc2FnZVJlY29yZCAhPSBudWxsID8gJ2hpdCcgOiAnbWlzcycgfSk7XG4gICAgICAgICAgICBpZiAobWVzc2FnZVJlY29yZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnRvVG9waWMobWVzc2FnZVJlY29yZC5tZXNzYWdlLnRvcGljKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjY2VwdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb3BpY1ZhbGlkYXRvclJlc3VsdC5BY2NlcHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2VwdGVkTWVzc2FnZXNUb3RhbC5pbmMoeyB0b3BpYyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvcGljVmFsaWRhdG9yUmVzdWx0Lklnbm9yZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlZE1lc3NhZ2VzVG90YWwuaW5jKHsgdG9waWMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb3BpY1ZhbGlkYXRvclJlc3VsdC5SZWplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdGVkTWVzc2FnZXNUb3RhbC5pbmMoeyB0b3BpYyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmtub3duVmFsaWRhdGlvblJlc3VsdHNUb3RhbC5pbmMoeyB0b3BpYyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdFNlZW5UaW1lc3RhbXBNcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRpb25EZWxheUZyb21GaXJzdFNlZW5TZWMub2JzZXJ2ZSgoRGF0ZS5ub3coKSAtIGZpcnN0U2VlblRpbWVzdGFtcE1zKSAvIDEwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRpb25Vbmtub3duRmlyc3RTZWVuLmluYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogLSBpbiBoYW5kbGVfZ3JhZnQoKSBQZW5hbHR5OjpHcmFmdEJhY2tvZmZcbiAgICAgICAgICogLSBpbiBhcHBseV9pd2FudF9wZW5hbHRpZXMoKSBQZW5hbHR5OjpCcm9rZW5Qcm9taXNlXG4gICAgICAgICAqIC0gaW4gbWV0cmljX3Njb3JlKCkgUDMgUGVuYWx0eTo6TWVzc2FnZURlZmljaXRcbiAgICAgICAgICogLSBpbiBtZXRyaWNfc2NvcmUoKSBQNiBQZW5hbHR5OjpJUENvbG9jYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIG9uU2NvcmVQZW5hbHR5KHBlbmFsdHkpIHtcbiAgICAgICAgICAgIC8vIENhbiB0aGlzIGJlIGxhYmVsZWQgYnkgdG9waWMgdG9vP1xuICAgICAgICAgICAgdGhpcy5zY29yaW5nUGVuYWx0aWVzLmluYyh7IHBlbmFsdHkgfSwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSWhhdmVSY3YodG9waWNTdHIsIGloYXZlLCBpZG9udGhhdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy50b1RvcGljKHRvcGljU3RyKTtcbiAgICAgICAgICAgIHRoaXMuaWhhdmVSY3ZNc2dpZHMuaW5jKHsgdG9waWMgfSwgaWhhdmUpO1xuICAgICAgICAgICAgdGhpcy5paGF2ZVJjdk5vdFNlZW5Nc2dpZHMuaW5jKHsgdG9waWMgfSwgaWRvbnRoYXZlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Jd2FudFJjdihpd2FudEJ5VG9waWMsIGl3YW50RG9udGhhdmUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW3RvcGljU3RyLCBpd2FudF0gb2YgaXdhbnRCeVRvcGljKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnRvVG9waWModG9waWNTdHIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXdhbnRSY3ZNc2dpZHMuaW5jKHsgdG9waWMgfSwgaXdhbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pd2FudFJjdkRvbnRoYXZlTXNnaWRzLmluYyhpd2FudERvbnRoYXZlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Gb3J3YXJkTXNnKHRvcGljU3RyLCB0b3NlbmRDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnRvVG9waWModG9waWNTdHIpO1xuICAgICAgICAgICAgdGhpcy5tc2dGb3J3YXJkQ291bnQuaW5jKHsgdG9waWMgfSwgMSk7XG4gICAgICAgICAgICB0aGlzLm1zZ0ZvcndhcmRQZWVycy5pbmMoeyB0b3BpYyB9LCB0b3NlbmRDb3VudCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUHVibGlzaE1zZyh0b3BpY1N0ciwgdG9zZW5kR3JvdXBDb3VudCwgdG9zZW5kQ291bnQsIGRhdGFMZW4sIG1zKSB7XG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMudG9Ub3BpYyh0b3BpY1N0cik7XG4gICAgICAgICAgICB0aGlzLm1zZ1B1Ymxpc2hDb3VudC5pbmMoeyB0b3BpYyB9LCAxKTtcbiAgICAgICAgICAgIHRoaXMubXNnUHVibGlzaEJ5dGVzLmluYyh7IHRvcGljIH0sIHRvc2VuZENvdW50ICogZGF0YUxlbik7XG4gICAgICAgICAgICB0aGlzLm1zZ1B1Ymxpc2hQZWVyc0J5VG9waWMuaW5jKHsgdG9waWMgfSwgdG9zZW5kQ291bnQpO1xuICAgICAgICAgICAgdGhpcy5kaXJlY3RQZWVyc1B1Ymxpc2hlZFRvdGFsLmluYyh7IHRvcGljIH0sIHRvc2VuZEdyb3VwQ291bnQuZGlyZWN0KTtcbiAgICAgICAgICAgIHRoaXMuZmxvb2RzdWJQZWVyc1B1Ymxpc2hlZFRvdGFsLmluYyh7IHRvcGljIH0sIHRvc2VuZEdyb3VwQ291bnQuZmxvb2RzdWIpO1xuICAgICAgICAgICAgdGhpcy5tZXNoUGVlcnNQdWJsaXNoZWRUb3RhbC5pbmMoeyB0b3BpYyB9LCB0b3NlbmRHcm91cENvdW50Lm1lc2gpO1xuICAgICAgICAgICAgdGhpcy5mYW5vdXRQZWVyc1B1Ymxpc2hlZFRvdGFsLmluYyh7IHRvcGljIH0sIHRvc2VuZEdyb3VwQ291bnQuZmFub3V0KTtcbiAgICAgICAgICAgIHRoaXMubXNnUHVibGlzaFRpbWUub2JzZXJ2ZSh7IHRvcGljIH0sIG1zIC8gMTAwMCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uTXNnUmVjdlByZVZhbGlkYXRpb24odG9waWNTdHIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy50b1RvcGljKHRvcGljU3RyKTtcbiAgICAgICAgICAgIHRoaXMubXNnUmVjZWl2ZWRQcmVWYWxpZGF0aW9uLmluYyh7IHRvcGljIH0sIDEpO1xuICAgICAgICB9LFxuICAgICAgICBvbk1zZ1JlY3ZFcnJvcih0b3BpY1N0cikge1xuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnRvVG9waWModG9waWNTdHIpO1xuICAgICAgICAgICAgdGhpcy5tc2dSZWNlaXZlZEVycm9yLmluYyh7IHRvcGljIH0sIDEpO1xuICAgICAgICB9LFxuICAgICAgICBvblByZXZhbGlkYXRpb25SZXN1bHQodG9waWNTdHIsIHN0YXR1cykge1xuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnRvVG9waWModG9waWNTdHIpO1xuICAgICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIE1lc3NhZ2VTdGF0dXMuZHVwbGljYXRlOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZhbGlkYXRpb25EdXBsaWNhdGVUb3RhbC5pbmMoeyB0b3BpYyB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBNZXNzYWdlU3RhdHVzLmludmFsaWQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmFsaWRhdGlvbkludmFsaWRUb3RhbC5pbmMoeyB0b3BpYyB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBNZXNzYWdlU3RhdHVzLnZhbGlkOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZhbGlkYXRpb25WYWxpZFRvdGFsLmluYyh7IHRvcGljIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZhbGlkYXRpb25Vbmtub3duVG90YWwuaW5jKHsgdG9waWMgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbk1zZ1JlY3ZJbnZhbGlkKHRvcGljU3RyLCByZWFzb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy50b1RvcGljKHRvcGljU3RyKTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVhc29uLnJlYXNvbiA9PT0gUmVqZWN0UmVhc29uLkVycm9yID8gcmVhc29uLmVycm9yIDogcmVhc29uLnJlYXNvbjtcbiAgICAgICAgICAgIHRoaXMubXNnUmVjZWl2ZWRJbnZhbGlkLmluYyh7IGVycm9yIH0sIDEpO1xuICAgICAgICAgICAgdGhpcy5tc2dSZWNlaXZlZEludmFsaWRCeVRvcGljLmluYyh7IHRvcGljIH0sIDEpO1xuICAgICAgICB9LFxuICAgICAgICBvbkR1cGxpY2F0ZU1zZ0RlbGl2ZXJ5KHRvcGljU3RyLCBkZWxpdmVyeURlbGF5TXMsIGlzTGF0ZURlbGl2ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMudG9Ub3BpYyh0b3BpY1N0cik7XG4gICAgICAgICAgICB0aGlzLmR1cGxpY2F0ZU1zZ0RlbGl2ZXJ5RGVsYXkub2JzZXJ2ZSh7IHRvcGljIH0sIGRlbGl2ZXJ5RGVsYXlNcyAvIDEwMDApO1xuICAgICAgICAgICAgaWYgKGlzTGF0ZURlbGl2ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kdXBsaWNhdGVNc2dMYXRlRGVsaXZlcnkuaW5jKHsgdG9waWMgfSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUHVibGlzaER1cGxpY2F0ZU1zZyh0b3BpY1N0cikge1xuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnRvVG9waWModG9waWNTdHIpO1xuICAgICAgICAgICAgdGhpcy5kdXBsaWNhdGVNc2dJZ25vcmVkLmluYyh7IHRvcGljIH0sIDEpO1xuICAgICAgICB9LFxuICAgICAgICBvblBlZXJSZWFkU3RyZWFtRXJyb3IoKSB7XG4gICAgICAgICAgICB0aGlzLnBlZXJSZWFkU3RyZWFtRXJyb3IuaW5jKDEpO1xuICAgICAgICB9LFxuICAgICAgICBvblJwY1JlY3ZFcnJvcigpIHtcbiAgICAgICAgICAgIHRoaXMucnBjUmVjdkVycm9yLmluYygxKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25ScGNEYXRhRXJyb3IoKSB7XG4gICAgICAgICAgICB0aGlzLnJwY0RhdGFFcnJvci5pbmMoMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnBjUmVjdihycGMsIHJwY0J5dGVzKSB7XG4gICAgICAgICAgICB0aGlzLnJwY1JlY3ZCeXRlcy5pbmMocnBjQnl0ZXMpO1xuICAgICAgICAgICAgdGhpcy5ycGNSZWN2Q291bnQuaW5jKDEpO1xuICAgICAgICAgICAgaWYgKHJwYy5zdWJzY3JpcHRpb25zICE9IG51bGwpXG4gICAgICAgICAgICAgICAgdGhpcy5ycGNSZWN2U3Vic2NyaXB0aW9uLmluYyhycGMuc3Vic2NyaXB0aW9ucy5sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKHJwYy5tZXNzYWdlcyAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHRoaXMucnBjUmVjdk1lc3NhZ2UuaW5jKHJwYy5tZXNzYWdlcy5sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKHJwYy5jb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJwY1JlY3ZDb250cm9sLmluYygxKTtcbiAgICAgICAgICAgICAgICBpZiAocnBjLmNvbnRyb2wuaWhhdmUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ycGNSZWN2SUhhdmUuaW5jKHJwYy5jb250cm9sLmloYXZlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHJwYy5jb250cm9sLml3YW50ICE9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnBjUmVjdklXYW50LmluYyhycGMuY29udHJvbC5pd2FudC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGlmIChycGMuY29udHJvbC5ncmFmdCAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJwY1JlY3ZHcmFmdC5pbmMocnBjLmNvbnRyb2wuZ3JhZnQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAocnBjLmNvbnRyb2wucHJ1bmUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ycGNSZWN2UHJ1bmUuaW5jKHJwYy5jb250cm9sLnBydW5lLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUnBjU2VudChycGMsIHJwY0J5dGVzKSB7XG4gICAgICAgICAgICB0aGlzLnJwY1NlbnRCeXRlcy5pbmMocnBjQnl0ZXMpO1xuICAgICAgICAgICAgdGhpcy5ycGNTZW50Q291bnQuaW5jKDEpO1xuICAgICAgICAgICAgaWYgKHJwYy5zdWJzY3JpcHRpb25zICE9IG51bGwpXG4gICAgICAgICAgICAgICAgdGhpcy5ycGNTZW50U3Vic2NyaXB0aW9uLmluYyhycGMuc3Vic2NyaXB0aW9ucy5sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKHJwYy5tZXNzYWdlcyAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHRoaXMucnBjU2VudE1lc3NhZ2UuaW5jKHJwYy5tZXNzYWdlcy5sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKHJwYy5jb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpaGF2ZSA9IHJwYy5jb250cm9sLmloYXZlPy5sZW5ndGggPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpd2FudCA9IHJwYy5jb250cm9sLml3YW50Py5sZW5ndGggPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBncmFmdCA9IHJwYy5jb250cm9sLmdyYWZ0Py5sZW5ndGggPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcnVuZSA9IHJwYy5jb250cm9sLnBydW5lPy5sZW5ndGggPz8gMDtcbiAgICAgICAgICAgICAgICBpZiAoaWhhdmUgPiAwKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJwY1NlbnRJSGF2ZS5pbmMoaWhhdmUpO1xuICAgICAgICAgICAgICAgIGlmIChpd2FudCA+IDApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnBjU2VudElXYW50LmluYyhpd2FudCk7XG4gICAgICAgICAgICAgICAgaWYgKGdyYWZ0ID4gMClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ycGNTZW50R3JhZnQuaW5jKGdyYWZ0KTtcbiAgICAgICAgICAgICAgICBpZiAocHJ1bmUgPiAwKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJwY1NlbnRQcnVuZS5pbmMocHJ1bmUpO1xuICAgICAgICAgICAgICAgIGlmIChpaGF2ZSA+IDAgfHwgaXdhbnQgPiAwIHx8IGdyYWZ0ID4gMCB8fCBwcnVuZSA+IDApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnBjU2VudENvbnRyb2wuaW5jKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlclNjb3JlcyhzY29yZXMsIHNjb3JlVGhyZXNob2xkcykge1xuICAgICAgICAgICAgbGV0IGdyYXlsaXN0ID0gMDtcbiAgICAgICAgICAgIGxldCBwdWJsaXNoID0gMDtcbiAgICAgICAgICAgIGxldCBnb3NzaXAgPSAwO1xuICAgICAgICAgICAgbGV0IG1lc2ggPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY29yZSBvZiBzY29yZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcmUgPj0gc2NvcmVUaHJlc2hvbGRzLmdyYXlsaXN0VGhyZXNob2xkKVxuICAgICAgICAgICAgICAgICAgICBncmF5bGlzdCsrO1xuICAgICAgICAgICAgICAgIGlmIChzY29yZSA+PSBzY29yZVRocmVzaG9sZHMucHVibGlzaFRocmVzaG9sZClcbiAgICAgICAgICAgICAgICAgICAgcHVibGlzaCsrO1xuICAgICAgICAgICAgICAgIGlmIChzY29yZSA+PSBzY29yZVRocmVzaG9sZHMuZ29zc2lwVGhyZXNob2xkKVxuICAgICAgICAgICAgICAgICAgICBnb3NzaXArKztcbiAgICAgICAgICAgICAgICBpZiAoc2NvcmUgPj0gMClcbiAgICAgICAgICAgICAgICAgICAgbWVzaCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wZWVyc0J5U2NvcmVUaHJlc2hvbGQuc2V0KHsgdGhyZXNob2xkOiBTY29yZVRocmVzaG9sZC5ncmF5bGlzdCB9LCBncmF5bGlzdCk7XG4gICAgICAgICAgICB0aGlzLnBlZXJzQnlTY29yZVRocmVzaG9sZC5zZXQoeyB0aHJlc2hvbGQ6IFNjb3JlVGhyZXNob2xkLnB1Ymxpc2ggfSwgcHVibGlzaCk7XG4gICAgICAgICAgICB0aGlzLnBlZXJzQnlTY29yZVRocmVzaG9sZC5zZXQoeyB0aHJlc2hvbGQ6IFNjb3JlVGhyZXNob2xkLmdvc3NpcCB9LCBnb3NzaXApO1xuICAgICAgICAgICAgdGhpcy5wZWVyc0J5U2NvcmVUaHJlc2hvbGQuc2V0KHsgdGhyZXNob2xkOiBTY29yZVRocmVzaG9sZC5tZXNoIH0sIG1lc2gpO1xuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZnVsbCBzY29yZSB0b29cbiAgICAgICAgICAgIHRoaXMuc2NvcmUuc2V0KHNjb3Jlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyU2NvcmVXZWlnaHRzKHN3KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFt0b3BpYywgd3NUb3BpY10gb2Ygc3cuYnlUb3BpYykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NvcmVXZWlnaHRzLnNldCh7IHRvcGljLCBwOiAncDEnIH0sIHdzVG9waWMucDF3KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjb3JlV2VpZ2h0cy5zZXQoeyB0b3BpYywgcDogJ3AyJyB9LCB3c1RvcGljLnAydyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY29yZVdlaWdodHMuc2V0KHsgdG9waWMsIHA6ICdwMycgfSwgd3NUb3BpYy5wM3cpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NvcmVXZWlnaHRzLnNldCh7IHRvcGljLCBwOiAncDNiJyB9LCB3c1RvcGljLnAzYncpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NvcmVXZWlnaHRzLnNldCh7IHRvcGljLCBwOiAncDQnIH0sIHdzVG9waWMucDR3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2NvcmVXZWlnaHRzLnNldCh7IHA6ICdwNScgfSwgc3cucDV3KTtcbiAgICAgICAgICAgIHRoaXMuc2NvcmVXZWlnaHRzLnNldCh7IHA6ICdwNicgfSwgc3cucDZ3KTtcbiAgICAgICAgICAgIHRoaXMuc2NvcmVXZWlnaHRzLnNldCh7IHA6ICdwNycgfSwgc3cucDd3KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJTY29yZVBlck1lc2gobWVzaCwgc2NvcmVCeVBlZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlZXJzUGVyVG9waWNMYWJlbCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIG1lc2guZm9yRWFjaCgocGVlcnMsIHRvcGljU3RyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQWdncmVnYXRlIGJ5IGtub3duIHRvcGljTGFiZWwgb3IgdGhyb3cgdG8gJ3Vua25vd24nLiBUaGlzIHByZXZlbnQgdG9vIGhpZ2ggY2FyZGluYWxpdHlcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BpY0xhYmVsID0gdGhpcy50b3BpY1N0clRvTGFiZWwuZ2V0KHRvcGljU3RyKSA/PyAndW5rbm93bic7XG4gICAgICAgICAgICAgICAgbGV0IHBlZXJzSW5NZXNoID0gcGVlcnNQZXJUb3BpY0xhYmVsLmdldCh0b3BpY0xhYmVsKTtcbiAgICAgICAgICAgICAgICBpZiAocGVlcnNJbk1lc2ggPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwZWVyc0luTWVzaCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgcGVlcnNQZXJUb3BpY0xhYmVsLnNldCh0b3BpY0xhYmVsLCBwZWVyc0luTWVzaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlZXJzLmZvckVhY2goKHApID0+IHBlZXJzSW5NZXNoPy5hZGQocCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFt0b3BpYywgcGVlcnNdIG9mIHBlZXJzUGVyVG9waWNMYWJlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc2hTY29yZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBwZWVycy5mb3JFYWNoKChwZWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc2hTY29yZXMucHVzaChzY29yZUJ5UGVlci5nZXQocGVlcikgPz8gMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY29yZVBlck1lc2guc2V0KHsgdG9waWMgfSwgbWVzaFNjb3Jlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0cmljcy5qcy5tYXAiXSwibmFtZXMiOlsiVG9waWNWYWxpZGF0b3JSZXN1bHQiLCJNZXNzYWdlU3RhdHVzIiwiUmVqZWN0UmVhc29uIiwiTWVzc2FnZVNvdXJjZSIsIkluY2x1c2lvblJlYXNvbiIsIkNodXJuUmVhc29uIiwiU2NvcmVQZW5hbHR5IiwiSUhhdmVJZ25vcmVSZWFzb24iLCJTY29yZVRocmVzaG9sZCIsImdldE1ldHJpY3MiLCJyZWdpc3RlciIsInRvcGljU3RyVG9MYWJlbCIsIm9wdHMiLCJwcm90b2NvbHNFbmFibGVkIiwiZ2F1Z2UiLCJuYW1lIiwiaGVscCIsImxhYmVsTmFtZXMiLCJ0b3BpY1N1YnNjcmlwdGlvblN0YXR1cyIsInRvcGljUGVlcnNDb3VudCIsIm1lc2hQZWVyQ291bnRzIiwibWVzaFBlZXJJbmNsdXNpb25FdmVudHNGYW5vdXQiLCJtZXNoUGVlckluY2x1c2lvbkV2ZW50c1JhbmRvbSIsIm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzU3Vic2NyaWJlZCIsIm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzT3V0Ym91bmQiLCJtZXNoUGVlckluY2x1c2lvbkV2ZW50c05vdEVub3VnaCIsIm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzT3Bwb3J0dW5pc3RpYyIsIm1lc2hQZWVySW5jbHVzaW9uRXZlbnRzVW5rbm93biIsIm1lc2hQZWVyQ2h1cm5FdmVudHNEaXNjb25uZWN0ZWQiLCJtZXNoUGVlckNodXJuRXZlbnRzQmFkU2NvcmUiLCJtZXNoUGVlckNodXJuRXZlbnRzUHJ1bmUiLCJtZXNoUGVlckNodXJuRXZlbnRzRXhjZXNzIiwibWVzaFBlZXJDaHVybkV2ZW50c1Vua25vd24iLCJwZWVyc1BlclByb3RvY29sIiwiaGVhcnRiZWF0RHVyYXRpb24iLCJoaXN0b2dyYW0iLCJidWNrZXRzIiwiaGVhcnRiZWF0U2tpcHBlZCIsImFjY2VwdGVkTWVzc2FnZXNUb3RhbCIsImlnbm9yZWRNZXNzYWdlc1RvdGFsIiwicmVqZWN0ZWRNZXNzYWdlc1RvdGFsIiwidW5rbm93blZhbGlkYXRpb25SZXN1bHRzVG90YWwiLCJhc3luY1ZhbGlkYXRpb25NY2FjaGVIaXQiLCJhc3luY1ZhbGlkYXRpb25EZWxheUZyb21GaXJzdFNlZW5TZWMiLCJhc3luY1ZhbGlkYXRpb25Vbmtub3duRmlyc3RTZWVuIiwicGVlclJlYWRTdHJlYW1FcnJvciIsInJwY1JlY3ZCeXRlcyIsInJwY1JlY3ZDb3VudCIsInJwY1JlY3ZTdWJzY3JpcHRpb24iLCJycGNSZWN2TWVzc2FnZSIsInJwY1JlY3ZDb250cm9sIiwicnBjUmVjdklIYXZlIiwicnBjUmVjdklXYW50IiwicnBjUmVjdkdyYWZ0IiwicnBjUmVjdlBydW5lIiwicnBjRGF0YUVycm9yIiwicnBjUmVjdkVycm9yIiwicnBjUmVjdk5vdEFjY2VwdGVkIiwicnBjU2VudEJ5dGVzIiwicnBjU2VudENvdW50IiwicnBjU2VudFN1YnNjcmlwdGlvbiIsInJwY1NlbnRNZXNzYWdlIiwicnBjU2VudENvbnRyb2wiLCJycGNTZW50SUhhdmUiLCJycGNTZW50SVdhbnQiLCJycGNTZW50R3JhZnQiLCJycGNTZW50UHJ1bmUiLCJtc2dQdWJsaXNoQ291bnQiLCJtc2dQdWJsaXNoUGVlcnNCeVRvcGljIiwiZGlyZWN0UGVlcnNQdWJsaXNoZWRUb3RhbCIsImZsb29kc3ViUGVlcnNQdWJsaXNoZWRUb3RhbCIsIm1lc2hQZWVyc1B1Ymxpc2hlZFRvdGFsIiwiZmFub3V0UGVlcnNQdWJsaXNoZWRUb3RhbCIsIm1zZ1B1Ymxpc2hCeXRlcyIsIm1zZ1B1Ymxpc2hUaW1lIiwibXNnRm9yd2FyZENvdW50IiwibXNnRm9yd2FyZFBlZXJzIiwibXNnUmVjZWl2ZWRQcmVWYWxpZGF0aW9uIiwibXNnUmVjZWl2ZWRFcnJvciIsInByZXZhbGlkYXRpb25JbnZhbGlkVG90YWwiLCJwcmV2YWxpZGF0aW9uVmFsaWRUb3RhbCIsInByZXZhbGlkYXRpb25EdXBsaWNhdGVUb3RhbCIsInByZXZhbGlkYXRpb25Vbmtub3duVG90YWwiLCJtc2dSZWNlaXZlZEludmFsaWQiLCJtc2dSZWNlaXZlZEludmFsaWRCeVRvcGljIiwiZHVwbGljYXRlTXNnRGVsaXZlcnlEZWxheSIsIm1heE1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvd1NlYyIsIk51bWJlciIsImR1cGxpY2F0ZU1zZ0xhdGVEZWxpdmVyeSIsImR1cGxpY2F0ZU1zZ0lnbm9yZWQiLCJzY29yZUZuQ2FsbHMiLCJzY29yZUZuUnVucyIsInNjb3JlQ2FjaGVkRGVsdGEiLCJwZWVyc0J5U2NvcmVUaHJlc2hvbGQiLCJzY29yZSIsImF2Z01pbk1heCIsInNjb3JlV2VpZ2h0cyIsInNjb3JlUGVyTWVzaCIsInNjb3JpbmdQZW5hbHRpZXMiLCJiZWhhdmlvdXJQZW5hbHR5IiwiYmVoYXZpb3VyUGVuYWx0eVRocmVzaG9sZCIsImloYXZlUmN2SWdub3JlZCIsImloYXZlUmN2TXNnaWRzIiwiaWhhdmVSY3ZOb3RTZWVuTXNnaWRzIiwiaXdhbnRSY3ZNc2dpZHMiLCJpd2FudFJjdkRvbnRoYXZlTXNnaWRzIiwiaXdhbnRQcm9taXNlU3RhcnRlZCIsIml3YW50UHJvbWlzZVJlc29sdmVkIiwiaXdhbnRQcm9taXNlUmVzb2x2ZWRGcm9tRHVwbGljYXRlIiwiaXdhbnRQcm9taXNlUmVzb2x2ZWRQZWVycyIsIml3YW50UHJvbWlzZUJyb2tlbiIsIml3YW50TWVzc2FnZVBydW5lZCIsIml3YW50UHJvbWlzZURlbGl2ZXJ5VGltZSIsImdvc3NpcFByb21pc2VFeHBpcmVTZWMiLCJpd2FudFByb21pc2VVbnRyYWNrZWQiLCJjb25uZWN0ZWRQZWVyc0JhY2tvZmZTZWMiLCJjYWNoZVNpemUiLCJtY2FjaGVTaXplIiwibWNhY2hlTm90VmFsaWRhdGVkQ291bnQiLCJmYXN0TXNnSWRDYWNoZUNvbGxpc2lvbiIsIm5ld0Nvbm5lY3Rpb25Db3VudCIsInRvVG9waWMiLCJ0b3BpY1N0ciIsImdldCIsIm9uSm9pbiIsInNldCIsIm9uTGVhdmUiLCJvbkFkZFRvTWVzaCIsInJlYXNvbiIsImNvdW50IiwidG9waWMiLCJGYW5vdXQiLCJpbmMiLCJSYW5kb20iLCJTdWJzY3JpYmVkIiwiT3V0Ym91bmQiLCJOb3RFbm91Z2giLCJPcHBvcnR1bmlzdGljIiwib25SZW1vdmVGcm9tTWVzaCIsIkRjIiwiQmFkU2NvcmUiLCJQcnVuZSIsIkV4Y2VzcyIsIm9uUmVwb3J0VmFsaWRhdGlvbiIsIm1lc3NhZ2VSZWNvcmQiLCJhY2NlcHRhbmNlIiwiZmlyc3RTZWVuVGltZXN0YW1wTXMiLCJoaXQiLCJtZXNzYWdlIiwiQWNjZXB0IiwiSWdub3JlIiwiUmVqZWN0Iiwib2JzZXJ2ZSIsIkRhdGUiLCJub3ciLCJvblNjb3JlUGVuYWx0eSIsInBlbmFsdHkiLCJvbkloYXZlUmN2IiwiaWhhdmUiLCJpZG9udGhhdmUiLCJvbkl3YW50UmN2IiwiaXdhbnRCeVRvcGljIiwiaXdhbnREb250aGF2ZSIsIml3YW50Iiwib25Gb3J3YXJkTXNnIiwidG9zZW5kQ291bnQiLCJvblB1Ymxpc2hNc2ciLCJ0b3NlbmRHcm91cENvdW50IiwiZGF0YUxlbiIsIm1zIiwiZGlyZWN0IiwiZmxvb2RzdWIiLCJtZXNoIiwiZmFub3V0Iiwib25Nc2dSZWN2UHJlVmFsaWRhdGlvbiIsIm9uTXNnUmVjdkVycm9yIiwib25QcmV2YWxpZGF0aW9uUmVzdWx0Iiwic3RhdHVzIiwiZHVwbGljYXRlIiwiaW52YWxpZCIsInZhbGlkIiwib25Nc2dSZWN2SW52YWxpZCIsImVycm9yIiwiRXJyb3IiLCJvbkR1cGxpY2F0ZU1zZ0RlbGl2ZXJ5IiwiZGVsaXZlcnlEZWxheU1zIiwiaXNMYXRlRGVsaXZlcnkiLCJvblB1Ymxpc2hEdXBsaWNhdGVNc2ciLCJvblBlZXJSZWFkU3RyZWFtRXJyb3IiLCJvblJwY1JlY3ZFcnJvciIsIm9uUnBjRGF0YUVycm9yIiwib25ScGNSZWN2IiwicnBjIiwicnBjQnl0ZXMiLCJzdWJzY3JpcHRpb25zIiwibGVuZ3RoIiwibWVzc2FnZXMiLCJjb250cm9sIiwiZ3JhZnQiLCJwcnVuZSIsIm9uUnBjU2VudCIsInJlZ2lzdGVyU2NvcmVzIiwic2NvcmVzIiwic2NvcmVUaHJlc2hvbGRzIiwiZ3JheWxpc3QiLCJwdWJsaXNoIiwiZ29zc2lwIiwiZ3JheWxpc3RUaHJlc2hvbGQiLCJwdWJsaXNoVGhyZXNob2xkIiwiZ29zc2lwVGhyZXNob2xkIiwidGhyZXNob2xkIiwicmVnaXN0ZXJTY29yZVdlaWdodHMiLCJzdyIsIndzVG9waWMiLCJieVRvcGljIiwicCIsInAxdyIsInAydyIsInAzdyIsInAzYnciLCJwNHciLCJwNXciLCJwNnciLCJwN3ciLCJyZWdpc3RlclNjb3JlUGVyTWVzaCIsInNjb3JlQnlQZWVyIiwicGVlcnNQZXJUb3BpY0xhYmVsIiwiTWFwIiwiZm9yRWFjaCIsInBlZXJzIiwidG9waWNMYWJlbCIsInBlZXJzSW5NZXNoIiwiU2V0IiwiYWRkIiwibWVzaFNjb3JlcyIsInBlZXIiLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.js":
/*!**********************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.js ***!
\**********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ computeScore: () => (/* binding */ computeScore)\n/* harmony export */ });\nfunction computeScore(peer, pstats, params, peerIPs) {\n let score = 0;\n // topic stores\n Object.entries(pstats.topics).forEach(([topic, tstats])=>{\n // the topic parameters\n const topicParams = params.topics[topic];\n if (topicParams === undefined) {\n // we are not scoring this topic\n return;\n }\n let topicScore = 0;\n // P1: time in Mesh\n if (tstats.inMesh) {\n let p1 = tstats.meshTime / topicParams.timeInMeshQuantum;\n if (p1 > topicParams.timeInMeshCap) {\n p1 = topicParams.timeInMeshCap;\n }\n topicScore += p1 * topicParams.timeInMeshWeight;\n }\n // P2: first message deliveries\n let p2 = tstats.firstMessageDeliveries;\n if (p2 > topicParams.firstMessageDeliveriesCap) {\n p2 = topicParams.firstMessageDeliveriesCap;\n }\n topicScore += p2 * topicParams.firstMessageDeliveriesWeight;\n // P3: mesh message deliveries\n if (tstats.meshMessageDeliveriesActive && tstats.meshMessageDeliveries < topicParams.meshMessageDeliveriesThreshold) {\n const deficit = topicParams.meshMessageDeliveriesThreshold - tstats.meshMessageDeliveries;\n const p3 = deficit * deficit;\n topicScore += p3 * topicParams.meshMessageDeliveriesWeight;\n }\n // P3b:\n // NOTE: the weight of P3b is negative (validated in validateTopicScoreParams) so this detracts\n const p3b = tstats.meshFailurePenalty;\n topicScore += p3b * topicParams.meshFailurePenaltyWeight;\n // P4: invalid messages\n // NOTE: the weight of P4 is negative (validated in validateTopicScoreParams) so this detracts\n const p4 = tstats.invalidMessageDeliveries * tstats.invalidMessageDeliveries;\n topicScore += p4 * topicParams.invalidMessageDeliveriesWeight;\n // update score, mixing with topic weight\n score += topicScore * topicParams.topicWeight;\n });\n // apply the topic score cap, if any\n if (params.topicScoreCap > 0 && score > params.topicScoreCap) {\n score = params.topicScoreCap;\n }\n // P5: application-specific score\n const p5 = params.appSpecificScore(peer);\n score += p5 * params.appSpecificWeight;\n // P6: IP colocation factor\n pstats.knownIPs.forEach((ip)=>{\n if (params.IPColocationFactorWhitelist.has(ip)) {\n return;\n }\n // P6 has a cliff (IPColocationFactorThreshold)\n // It's only applied if at least that many peers are connected to us from that source IP addr.\n // It is quadratic, and the weight is negative (validated in validatePeerScoreParams)\n const peersInIP = peerIPs.get(ip);\n const numPeersInIP = peersInIP != null ? peersInIP.size : 0;\n if (numPeersInIP > params.IPColocationFactorThreshold) {\n const surplus = numPeersInIP - params.IPColocationFactorThreshold;\n const p6 = surplus * surplus;\n score += p6 * params.IPColocationFactorWeight;\n }\n });\n // P7: behavioural pattern penalty\n if (pstats.behaviourPenalty > params.behaviourPenaltyThreshold) {\n const excess = pstats.behaviourPenalty - params.behaviourPenaltyThreshold;\n const p7 = excess * excess;\n score += p7 * params.behaviourPenaltyWeight;\n }\n return score;\n} //# sourceMappingURL=compute-score.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL2NvbXB1dGUtc2NvcmUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPLFNBQVNBLGFBQWFDLElBQUksRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLE9BQU87SUFDdEQsSUFBSUMsUUFBUTtJQUNaLGVBQWU7SUFDZkMsT0FBT0MsT0FBTyxDQUFDTCxPQUFPTSxNQUFNLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLE9BQU9DLE9BQU87UUFDbEQsdUJBQXVCO1FBQ3ZCLE1BQU1DLGNBQWNULE9BQU9LLE1BQU0sQ0FBQ0UsTUFBTTtRQUN4QyxJQUFJRSxnQkFBZ0JDLFdBQVc7WUFDM0IsZ0NBQWdDO1lBQ2hDO1FBQ0o7UUFDQSxJQUFJQyxhQUFhO1FBQ2pCLG1CQUFtQjtRQUNuQixJQUFJSCxPQUFPSSxNQUFNLEVBQUU7WUFDZixJQUFJQyxLQUFLTCxPQUFPTSxRQUFRLEdBQUdMLFlBQVlNLGlCQUFpQjtZQUN4RCxJQUFJRixLQUFLSixZQUFZTyxhQUFhLEVBQUU7Z0JBQ2hDSCxLQUFLSixZQUFZTyxhQUFhO1lBQ2xDO1lBQ0FMLGNBQWNFLEtBQUtKLFlBQVlRLGdCQUFnQjtRQUNuRDtRQUNBLCtCQUErQjtRQUMvQixJQUFJQyxLQUFLVixPQUFPVyxzQkFBc0I7UUFDdEMsSUFBSUQsS0FBS1QsWUFBWVcseUJBQXlCLEVBQUU7WUFDNUNGLEtBQUtULFlBQVlXLHlCQUF5QjtRQUM5QztRQUNBVCxjQUFjTyxLQUFLVCxZQUFZWSw0QkFBNEI7UUFDM0QsOEJBQThCO1FBQzlCLElBQUliLE9BQU9jLDJCQUEyQixJQUNsQ2QsT0FBT2UscUJBQXFCLEdBQUdkLFlBQVllLDhCQUE4QixFQUFFO1lBQzNFLE1BQU1DLFVBQVVoQixZQUFZZSw4QkFBOEIsR0FBR2hCLE9BQU9lLHFCQUFxQjtZQUN6RixNQUFNRyxLQUFLRCxVQUFVQTtZQUNyQmQsY0FBY2UsS0FBS2pCLFlBQVlrQiwyQkFBMkI7UUFDOUQ7UUFDQSxPQUFPO1FBQ1AsK0ZBQStGO1FBQy9GLE1BQU1DLE1BQU1wQixPQUFPcUIsa0JBQWtCO1FBQ3JDbEIsY0FBY2lCLE1BQU1uQixZQUFZcUIsd0JBQXdCO1FBQ3hELHVCQUF1QjtRQUN2Qiw4RkFBOEY7UUFDOUYsTUFBTUMsS0FBS3ZCLE9BQU93Qix3QkFBd0IsR0FBR3hCLE9BQU93Qix3QkFBd0I7UUFDNUVyQixjQUFjb0IsS0FBS3RCLFlBQVl3Qiw4QkFBOEI7UUFDN0QseUNBQXlDO1FBQ3pDL0IsU0FBU1MsYUFBYUYsWUFBWXlCLFdBQVc7SUFDakQ7SUFDQSxvQ0FBb0M7SUFDcEMsSUFBSWxDLE9BQU9tQyxhQUFhLEdBQUcsS0FBS2pDLFFBQVFGLE9BQU9tQyxhQUFhLEVBQUU7UUFDMURqQyxRQUFRRixPQUFPbUMsYUFBYTtJQUNoQztJQUNBLGlDQUFpQztJQUNqQyxNQUFNQyxLQUFLcEMsT0FBT3FDLGdCQUFnQixDQUFDdkM7SUFDbkNJLFNBQVNrQyxLQUFLcEMsT0FBT3NDLGlCQUFpQjtJQUN0QywyQkFBMkI7SUFDM0J2QyxPQUFPd0MsUUFBUSxDQUFDakMsT0FBTyxDQUFDLENBQUNrQztRQUNyQixJQUFJeEMsT0FBT3lDLDJCQUEyQixDQUFDQyxHQUFHLENBQUNGLEtBQUs7WUFDNUM7UUFDSjtRQUNBLCtDQUErQztRQUMvQyw4RkFBOEY7UUFDOUYscUZBQXFGO1FBQ3JGLE1BQU1HLFlBQVkxQyxRQUFRMkMsR0FBRyxDQUFDSjtRQUM5QixNQUFNSyxlQUFlLGFBQWMsT0FBUUYsVUFBVUcsSUFBSSxHQUFHO1FBQzVELElBQUlELGVBQWU3QyxPQUFPK0MsMkJBQTJCLEVBQUU7WUFDbkQsTUFBTUMsVUFBVUgsZUFBZTdDLE9BQU8rQywyQkFBMkI7WUFDakUsTUFBTUUsS0FBS0QsVUFBVUE7WUFDckI5QyxTQUFTK0MsS0FBS2pELE9BQU9rRCx3QkFBd0I7UUFDakQ7SUFDSjtJQUNBLGtDQUFrQztJQUNsQyxJQUFJbkQsT0FBT29ELGdCQUFnQixHQUFHbkQsT0FBT29ELHlCQUF5QixFQUFFO1FBQzVELE1BQU1DLFNBQVN0RCxPQUFPb0QsZ0JBQWdCLEdBQUduRCxPQUFPb0QseUJBQXlCO1FBQ3pFLE1BQU1FLEtBQUtELFNBQVNBO1FBQ3BCbkQsU0FBU29ELEtBQUt0RCxPQUFPdUQsc0JBQXNCO0lBQy9DO0lBQ0EsT0FBT3JEO0FBQ1gsRUFDQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvc2NvcmUvY29tcHV0ZS1zY29yZS5qcz9kOTg4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NvcmUocGVlciwgcHN0YXRzLCBwYXJhbXMsIHBlZXJJUHMpIHtcbiAgICBsZXQgc2NvcmUgPSAwO1xuICAgIC8vIHRvcGljIHN0b3Jlc1xuICAgIE9iamVjdC5lbnRyaWVzKHBzdGF0cy50b3BpY3MpLmZvckVhY2goKFt0b3BpYywgdHN0YXRzXSkgPT4ge1xuICAgICAgICAvLyB0aGUgdG9waWMgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB0b3BpY1BhcmFtcyA9IHBhcmFtcy50b3BpY3NbdG9waWNdO1xuICAgICAgICBpZiAodG9waWNQYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCBzY29yaW5nIHRoaXMgdG9waWNcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG9waWNTY29yZSA9IDA7XG4gICAgICAgIC8vIFAxOiB0aW1lIGluIE1lc2hcbiAgICAgICAgaWYgKHRzdGF0cy5pbk1lc2gpIHtcbiAgICAgICAgICAgIGxldCBwMSA9IHRzdGF0cy5tZXNoVGltZSAvIHRvcGljUGFyYW1zLnRpbWVJbk1lc2hRdWFudHVtO1xuICAgICAgICAgICAgaWYgKHAxID4gdG9waWNQYXJhbXMudGltZUluTWVzaENhcCkge1xuICAgICAgICAgICAgICAgIHAxID0gdG9waWNQYXJhbXMudGltZUluTWVzaENhcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvcGljU2NvcmUgKz0gcDEgKiB0b3BpY1BhcmFtcy50aW1lSW5NZXNoV2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFAyOiBmaXJzdCBtZXNzYWdlIGRlbGl2ZXJpZXNcbiAgICAgICAgbGV0IHAyID0gdHN0YXRzLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXM7XG4gICAgICAgIGlmIChwMiA+IHRvcGljUGFyYW1zLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXNDYXApIHtcbiAgICAgICAgICAgIHAyID0gdG9waWNQYXJhbXMuZmlyc3RNZXNzYWdlRGVsaXZlcmllc0NhcDtcbiAgICAgICAgfVxuICAgICAgICB0b3BpY1Njb3JlICs9IHAyICogdG9waWNQYXJhbXMuZmlyc3RNZXNzYWdlRGVsaXZlcmllc1dlaWdodDtcbiAgICAgICAgLy8gUDM6IG1lc2ggbWVzc2FnZSBkZWxpdmVyaWVzXG4gICAgICAgIGlmICh0c3RhdHMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzQWN0aXZlICYmXG4gICAgICAgICAgICB0c3RhdHMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzIDwgdG9waWNQYXJhbXMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzVGhyZXNob2xkKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZpY2l0ID0gdG9waWNQYXJhbXMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzVGhyZXNob2xkIC0gdHN0YXRzLm1lc2hNZXNzYWdlRGVsaXZlcmllcztcbiAgICAgICAgICAgIGNvbnN0IHAzID0gZGVmaWNpdCAqIGRlZmljaXQ7XG4gICAgICAgICAgICB0b3BpY1Njb3JlICs9IHAzICogdG9waWNQYXJhbXMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFAzYjpcbiAgICAgICAgLy8gTk9URTogdGhlIHdlaWdodCBvZiBQM2IgaXMgbmVnYXRpdmUgKHZhbGlkYXRlZCBpbiB2YWxpZGF0ZVRvcGljU2NvcmVQYXJhbXMpIHNvIHRoaXMgZGV0cmFjdHNcbiAgICAgICAgY29uc3QgcDNiID0gdHN0YXRzLm1lc2hGYWlsdXJlUGVuYWx0eTtcbiAgICAgICAgdG9waWNTY29yZSArPSBwM2IgKiB0b3BpY1BhcmFtcy5tZXNoRmFpbHVyZVBlbmFsdHlXZWlnaHQ7XG4gICAgICAgIC8vIFA0OiBpbnZhbGlkIG1lc3NhZ2VzXG4gICAgICAgIC8vIE5PVEU6IHRoZSB3ZWlnaHQgb2YgUDQgaXMgbmVnYXRpdmUgKHZhbGlkYXRlZCBpbiB2YWxpZGF0ZVRvcGljU2NvcmVQYXJhbXMpIHNvIHRoaXMgZGV0cmFjdHNcbiAgICAgICAgY29uc3QgcDQgPSB0c3RhdHMuaW52YWxpZE1lc3NhZ2VEZWxpdmVyaWVzICogdHN0YXRzLmludmFsaWRNZXNzYWdlRGVsaXZlcmllcztcbiAgICAgICAgdG9waWNTY29yZSArPSBwNCAqIHRvcGljUGFyYW1zLmludmFsaWRNZXNzYWdlRGVsaXZlcmllc1dlaWdodDtcbiAgICAgICAgLy8gdXBkYXRlIHNjb3JlLCBtaXhpbmcgd2l0aCB0b3BpYyB3ZWlnaHRcbiAgICAgICAgc2NvcmUgKz0gdG9waWNTY29yZSAqIHRvcGljUGFyYW1zLnRvcGljV2VpZ2h0O1xuICAgIH0pO1xuICAgIC8vIGFwcGx5IHRoZSB0b3BpYyBzY29yZSBjYXAsIGlmIGFueVxuICAgIGlmIChwYXJhbXMudG9waWNTY29yZUNhcCA+IDAgJiYgc2NvcmUgPiBwYXJhbXMudG9waWNTY29yZUNhcCkge1xuICAgICAgICBzY29yZSA9IHBhcmFtcy50b3BpY1Njb3JlQ2FwO1xuICAgIH1cbiAgICAvLyBQNTogYXBwbGljYXRpb24tc3BlY2lmaWMgc2NvcmVcbiAgICBjb25zdCBwNSA9IHBhcmFtcy5hcHBTcGVjaWZpY1Njb3JlKHBlZXIpO1xuICAgIHNjb3JlICs9IHA1ICogcGFyYW1zLmFwcFNwZWNpZmljV2VpZ2h0O1xuICAgIC8vIFA2OiBJUCBjb2xvY2F0aW9uIGZhY3RvclxuICAgIHBzdGF0cy5rbm93bklQcy5mb3JFYWNoKChpcCkgPT4ge1xuICAgICAgICBpZiAocGFyYW1zLklQQ29sb2NhdGlvbkZhY3RvcldoaXRlbGlzdC5oYXMoaXApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gUDYgaGFzIGEgY2xpZmYgKElQQ29sb2NhdGlvbkZhY3RvclRocmVzaG9sZClcbiAgICAgICAgLy8gSXQncyBvbmx5IGFwcGxpZWQgaWYgYXQgbGVhc3QgdGhhdCBtYW55IHBlZXJzIGFyZSBjb25uZWN0ZWQgdG8gdXMgZnJvbSB0aGF0IHNvdXJjZSBJUCBhZGRyLlxuICAgICAgICAvLyBJdCBpcyBxdWFkcmF0aWMsIGFuZCB0aGUgd2VpZ2h0IGlzIG5lZ2F0aXZlICh2YWxpZGF0ZWQgaW4gdmFsaWRhdGVQZWVyU2NvcmVQYXJhbXMpXG4gICAgICAgIGNvbnN0IHBlZXJzSW5JUCA9IHBlZXJJUHMuZ2V0KGlwKTtcbiAgICAgICAgY29uc3QgbnVtUGVlcnNJbklQID0gKHBlZXJzSW5JUCAhPSBudWxsKSA/IHBlZXJzSW5JUC5zaXplIDogMDtcbiAgICAgICAgaWYgKG51bVBlZXJzSW5JUCA+IHBhcmFtcy5JUENvbG9jYXRpb25GYWN0b3JUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1cnBsdXMgPSBudW1QZWVyc0luSVAgLSBwYXJhbXMuSVBDb2xvY2F0aW9uRmFjdG9yVGhyZXNob2xkO1xuICAgICAgICAgICAgY29uc3QgcDYgPSBzdXJwbHVzICogc3VycGx1cztcbiAgICAgICAgICAgIHNjb3JlICs9IHA2ICogcGFyYW1zLklQQ29sb2NhdGlvbkZhY3RvcldlaWdodDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIFA3OiBiZWhhdmlvdXJhbCBwYXR0ZXJuIHBlbmFsdHlcbiAgICBpZiAocHN0YXRzLmJlaGF2aW91clBlbmFsdHkgPiBwYXJhbXMuYmVoYXZpb3VyUGVuYWx0eVRocmVzaG9sZCkge1xuICAgICAgICBjb25zdCBleGNlc3MgPSBwc3RhdHMuYmVoYXZpb3VyUGVuYWx0eSAtIHBhcmFtcy5iZWhhdmlvdXJQZW5hbHR5VGhyZXNob2xkO1xuICAgICAgICBjb25zdCBwNyA9IGV4Y2VzcyAqIGV4Y2VzcztcbiAgICAgICAgc2NvcmUgKz0gcDcgKiBwYXJhbXMuYmVoYXZpb3VyUGVuYWx0eVdlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3JlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcHV0ZS1zY29yZS5qcy5tYXAiXSwibmFtZXMiOlsiY29tcHV0ZVNjb3JlIiwicGVlciIsInBzdGF0cyIsInBhcmFtcyIsInBlZXJJUHMiLCJzY29yZSIsIk9iamVjdCIsImVudHJpZXMiLCJ0b3BpY3MiLCJmb3JFYWNoIiwidG9waWMiLCJ0c3RhdHMiLCJ0b3BpY1BhcmFtcyIsInVuZGVmaW5lZCIsInRvcGljU2NvcmUiLCJpbk1lc2giLCJwMSIsIm1lc2hUaW1lIiwidGltZUluTWVzaFF1YW50dW0iLCJ0aW1lSW5NZXNoQ2FwIiwidGltZUluTWVzaFdlaWdodCIsInAyIiwiZmlyc3RNZXNzYWdlRGVsaXZlcmllcyIsImZpcnN0TWVzc2FnZURlbGl2ZXJpZXNDYXAiLCJmaXJzdE1lc3NhZ2VEZWxpdmVyaWVzV2VpZ2h0IiwibWVzaE1lc3NhZ2VEZWxpdmVyaWVzQWN0aXZlIiwibWVzaE1lc3NhZ2VEZWxpdmVyaWVzIiwibWVzaE1lc3NhZ2VEZWxpdmVyaWVzVGhyZXNob2xkIiwiZGVmaWNpdCIsInAzIiwibWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2VpZ2h0IiwicDNiIiwibWVzaEZhaWx1cmVQZW5hbHR5IiwibWVzaEZhaWx1cmVQZW5hbHR5V2VpZ2h0IiwicDQiLCJpbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXMiLCJpbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQiLCJ0b3BpY1dlaWdodCIsInRvcGljU2NvcmVDYXAiLCJwNSIsImFwcFNwZWNpZmljU2NvcmUiLCJhcHBTcGVjaWZpY1dlaWdodCIsImtub3duSVBzIiwiaXAiLCJJUENvbG9jYXRpb25GYWN0b3JXaGl0ZWxpc3QiLCJoYXMiLCJwZWVyc0luSVAiLCJnZXQiLCJudW1QZWVyc0luSVAiLCJzaXplIiwiSVBDb2xvY2F0aW9uRmFjdG9yVGhyZXNob2xkIiwic3VycGx1cyIsInA2IiwiSVBDb2xvY2F0aW9uRmFjdG9yV2VpZ2h0IiwiYmVoYXZpb3VyUGVuYWx0eSIsImJlaGF2aW91clBlbmFsdHlUaHJlc2hvbGQiLCJleGNlc3MiLCJwNyIsImJlaGF2aW91clBlbmFsdHlXZWlnaHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/constants.js":
/*!******************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/constants.js ***!
\******************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ERR_INVALID_PEER_SCORE_PARAMS: () => (/* binding */ ERR_INVALID_PEER_SCORE_PARAMS),\n/* harmony export */ ERR_INVALID_PEER_SCORE_THRESHOLDS: () => (/* binding */ ERR_INVALID_PEER_SCORE_THRESHOLDS)\n/* harmony export */ });\nconst ERR_INVALID_PEER_SCORE_PARAMS = \"ERR_INVALID_PEER_SCORE_PARAMS\";\nconst ERR_INVALID_PEER_SCORE_THRESHOLDS = \"ERR_INVALID_PEER_SCORE_THRESHOLDS\"; //# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPLE1BQU1BLGdDQUFnQyxnQ0FBZ0M7QUFDdEUsTUFBTUMsb0NBQW9DLG9DQUFvQyxDQUNyRixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvc2NvcmUvY29uc3RhbnRzLmpzP2FlYjYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TID0gJ0VSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TJztcbmV4cG9ydCBjb25zdCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1RIUkVTSE9MRFMgPSAnRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9USFJFU0hPTERTJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOlsiRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMiLCJFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1RIUkVTSE9MRFMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.js":
/*!***************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.js ***!
\***************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DeliveryRecordStatus: () => (/* binding */ DeliveryRecordStatus),\n/* harmony export */ MessageDeliveries: () => (/* binding */ MessageDeliveries)\n/* harmony export */ });\n/* harmony import */ var denque__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! denque */ \"(ssr)/./node_modules/denque/index.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/constants.js\");\n\n\nvar DeliveryRecordStatus;\n(function(DeliveryRecordStatus) {\n /**\n * we don't know (yet) if the message is valid\n */ DeliveryRecordStatus[DeliveryRecordStatus[\"unknown\"] = 0] = \"unknown\";\n /**\n * we know the message is valid\n */ DeliveryRecordStatus[DeliveryRecordStatus[\"valid\"] = 1] = \"valid\";\n /**\n * we know the message is invalid\n */ DeliveryRecordStatus[DeliveryRecordStatus[\"invalid\"] = 2] = \"invalid\";\n /**\n * we were instructed by the validator to ignore the message\n */ DeliveryRecordStatus[DeliveryRecordStatus[\"ignored\"] = 3] = \"ignored\";\n})(DeliveryRecordStatus || (DeliveryRecordStatus = {}));\n/**\n * Map of canonical message ID to DeliveryRecord\n *\n * Maintains an internal queue for efficient gc of old messages\n */ class MessageDeliveries {\n constructor(){\n this.records = new Map();\n this.queue = new denque__WEBPACK_IMPORTED_MODULE_0__();\n }\n getRecord(msgIdStr) {\n return this.records.get(msgIdStr);\n }\n ensureRecord(msgIdStr) {\n let drec = this.records.get(msgIdStr);\n if (drec != null) {\n return drec;\n }\n // record doesn't exist yet\n // create record\n drec = {\n status: DeliveryRecordStatus.unknown,\n firstSeenTsMs: Date.now(),\n validated: 0,\n peers: new Set()\n };\n this.records.set(msgIdStr, drec);\n // and add msgId to the queue\n const entry = {\n msgId: msgIdStr,\n expire: Date.now() + _constants_js__WEBPACK_IMPORTED_MODULE_1__.TimeCacheDuration\n };\n this.queue.push(entry);\n return drec;\n }\n gc() {\n const now = Date.now();\n // queue is sorted by expiry time\n // remove expired messages, remove from queue until first un-expired message found\n let head = this.queue.peekFront();\n while(head != null && head.expire < now){\n this.records.delete(head.msgId);\n this.queue.shift();\n head = this.queue.peekFront();\n }\n }\n clear() {\n this.records.clear();\n this.queue.clear();\n }\n} //# sourceMappingURL=message-deliveries.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL21lc3NhZ2UtZGVsaXZlcmllcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTRCO0FBQ3dCO0FBQzdDLElBQUlFLHFCQUFxQjtBQUMvQixVQUFVQSxvQkFBb0I7SUFDM0I7O0tBRUMsR0FDREEsb0JBQW9CLENBQUNBLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUc7SUFDNUQ7O0tBRUMsR0FDREEsb0JBQW9CLENBQUNBLG9CQUFvQixDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUc7SUFDMUQ7O0tBRUMsR0FDREEsb0JBQW9CLENBQUNBLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUc7SUFDNUQ7O0tBRUMsR0FDREEsb0JBQW9CLENBQUNBLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUc7QUFDaEUsR0FBR0Esd0JBQXlCQSxDQUFBQSx1QkFBdUIsQ0FBQztBQUNwRDs7OztDQUlDLEdBQ00sTUFBTUM7SUFHVEMsYUFBYztRQUNWLElBQUksQ0FBQ0MsT0FBTyxHQUFHLElBQUlDO1FBQ25CLElBQUksQ0FBQ0MsS0FBSyxHQUFHLElBQUlQLG1DQUFNQTtJQUMzQjtJQUNBUSxVQUFVQyxRQUFRLEVBQUU7UUFDaEIsT0FBTyxJQUFJLENBQUNKLE9BQU8sQ0FBQ0ssR0FBRyxDQUFDRDtJQUM1QjtJQUNBRSxhQUFhRixRQUFRLEVBQUU7UUFDbkIsSUFBSUcsT0FBTyxJQUFJLENBQUNQLE9BQU8sQ0FBQ0ssR0FBRyxDQUFDRDtRQUM1QixJQUFJRyxRQUFRLE1BQU07WUFDZCxPQUFPQTtRQUNYO1FBQ0EsMkJBQTJCO1FBQzNCLGdCQUFnQjtRQUNoQkEsT0FBTztZQUNIQyxRQUFRWCxxQkFBcUJZLE9BQU87WUFDcENDLGVBQWVDLEtBQUtDLEdBQUc7WUFDdkJDLFdBQVc7WUFDWEMsT0FBTyxJQUFJQztRQUNmO1FBQ0EsSUFBSSxDQUFDZixPQUFPLENBQUNnQixHQUFHLENBQUNaLFVBQVVHO1FBQzNCLDZCQUE2QjtRQUM3QixNQUFNVSxRQUFRO1lBQ1ZDLE9BQU9kO1lBQ1BlLFFBQVFSLEtBQUtDLEdBQUcsS0FBS2hCLDREQUFpQkE7UUFDMUM7UUFDQSxJQUFJLENBQUNNLEtBQUssQ0FBQ2tCLElBQUksQ0FBQ0g7UUFDaEIsT0FBT1Y7SUFDWDtJQUNBYyxLQUFLO1FBQ0QsTUFBTVQsTUFBTUQsS0FBS0MsR0FBRztRQUNwQixpQ0FBaUM7UUFDakMsa0ZBQWtGO1FBQ2xGLElBQUlVLE9BQU8sSUFBSSxDQUFDcEIsS0FBSyxDQUFDcUIsU0FBUztRQUMvQixNQUFPLFFBQVMsUUFBU0QsS0FBS0gsTUFBTSxHQUFHUCxJQUFLO1lBQ3hDLElBQUksQ0FBQ1osT0FBTyxDQUFDd0IsTUFBTSxDQUFDRixLQUFLSixLQUFLO1lBQzlCLElBQUksQ0FBQ2hCLEtBQUssQ0FBQ3VCLEtBQUs7WUFDaEJILE9BQU8sSUFBSSxDQUFDcEIsS0FBSyxDQUFDcUIsU0FBUztRQUMvQjtJQUNKO0lBQ0FHLFFBQVE7UUFDSixJQUFJLENBQUMxQixPQUFPLENBQUMwQixLQUFLO1FBQ2xCLElBQUksQ0FBQ3hCLEtBQUssQ0FBQ3dCLEtBQUs7SUFDcEI7QUFDSixFQUNBLDhDQUE4QyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy9zY29yZS9tZXNzYWdlLWRlbGl2ZXJpZXMuanM/ZDVkMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVucXVlIGZyb20gJ2RlbnF1ZSc7XG5pbXBvcnQgeyBUaW1lQ2FjaGVEdXJhdGlvbiB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgdmFyIERlbGl2ZXJ5UmVjb3JkU3RhdHVzO1xuKGZ1bmN0aW9uIChEZWxpdmVyeVJlY29yZFN0YXR1cykge1xuICAgIC8qKlxuICAgICAqIHdlIGRvbid0IGtub3cgKHlldCkgaWYgdGhlIG1lc3NhZ2UgaXMgdmFsaWRcbiAgICAgKi9cbiAgICBEZWxpdmVyeVJlY29yZFN0YXR1c1tEZWxpdmVyeVJlY29yZFN0YXR1c1tcInVua25vd25cIl0gPSAwXSA9IFwidW5rbm93blwiO1xuICAgIC8qKlxuICAgICAqIHdlIGtub3cgdGhlIG1lc3NhZ2UgaXMgdmFsaWRcbiAgICAgKi9cbiAgICBEZWxpdmVyeVJlY29yZFN0YXR1c1tEZWxpdmVyeVJlY29yZFN0YXR1c1tcInZhbGlkXCJdID0gMV0gPSBcInZhbGlkXCI7XG4gICAgLyoqXG4gICAgICogd2Uga25vdyB0aGUgbWVzc2FnZSBpcyBpbnZhbGlkXG4gICAgICovXG4gICAgRGVsaXZlcnlSZWNvcmRTdGF0dXNbRGVsaXZlcnlSZWNvcmRTdGF0dXNbXCJpbnZhbGlkXCJdID0gMl0gPSBcImludmFsaWRcIjtcbiAgICAvKipcbiAgICAgKiB3ZSB3ZXJlIGluc3RydWN0ZWQgYnkgdGhlIHZhbGlkYXRvciB0byBpZ25vcmUgdGhlIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBEZWxpdmVyeVJlY29yZFN0YXR1c1tEZWxpdmVyeVJlY29yZFN0YXR1c1tcImlnbm9yZWRcIl0gPSAzXSA9IFwiaWdub3JlZFwiO1xufSkoRGVsaXZlcnlSZWNvcmRTdGF0dXMgfHwgKERlbGl2ZXJ5UmVjb3JkU3RhdHVzID0ge30pKTtcbi8qKlxuICogTWFwIG9mIGNhbm9uaWNhbCBtZXNzYWdlIElEIHRvIERlbGl2ZXJ5UmVjb3JkXG4gKlxuICogTWFpbnRhaW5zIGFuIGludGVybmFsIHF1ZXVlIGZvciBlZmZpY2llbnQgZ2Mgb2Ygb2xkIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXNzYWdlRGVsaXZlcmllcyB7XG4gICAgcmVjb3JkcztcbiAgICBxdWV1ZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLnF1ZXVlID0gbmV3IERlbnF1ZSgpO1xuICAgIH1cbiAgICBnZXRSZWNvcmQobXNnSWRTdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjb3Jkcy5nZXQobXNnSWRTdHIpO1xuICAgIH1cbiAgICBlbnN1cmVSZWNvcmQobXNnSWRTdHIpIHtcbiAgICAgICAgbGV0IGRyZWMgPSB0aGlzLnJlY29yZHMuZ2V0KG1zZ0lkU3RyKTtcbiAgICAgICAgaWYgKGRyZWMgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRyZWM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVjb3JkIGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICAgIC8vIGNyZWF0ZSByZWNvcmRcbiAgICAgICAgZHJlYyA9IHtcbiAgICAgICAgICAgIHN0YXR1czogRGVsaXZlcnlSZWNvcmRTdGF0dXMudW5rbm93bixcbiAgICAgICAgICAgIGZpcnN0U2VlblRzTXM6IERhdGUubm93KCksXG4gICAgICAgICAgICB2YWxpZGF0ZWQ6IDAsXG4gICAgICAgICAgICBwZWVyczogbmV3IFNldCgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmVjb3Jkcy5zZXQobXNnSWRTdHIsIGRyZWMpO1xuICAgICAgICAvLyBhbmQgYWRkIG1zZ0lkIHRvIHRoZSBxdWV1ZVxuICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgIG1zZ0lkOiBtc2dJZFN0cixcbiAgICAgICAgICAgIGV4cGlyZTogRGF0ZS5ub3coKSArIFRpbWVDYWNoZUR1cmF0aW9uXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucXVldWUucHVzaChlbnRyeSk7XG4gICAgICAgIHJldHVybiBkcmVjO1xuICAgIH1cbiAgICBnYygpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gcXVldWUgaXMgc29ydGVkIGJ5IGV4cGlyeSB0aW1lXG4gICAgICAgIC8vIHJlbW92ZSBleHBpcmVkIG1lc3NhZ2VzLCByZW1vdmUgZnJvbSBxdWV1ZSB1bnRpbCBmaXJzdCB1bi1leHBpcmVkIG1lc3NhZ2UgZm91bmRcbiAgICAgICAgbGV0IGhlYWQgPSB0aGlzLnF1ZXVlLnBlZWtGcm9udCgpO1xuICAgICAgICB3aGlsZSAoKGhlYWQgIT0gbnVsbCkgJiYgaGVhZC5leHBpcmUgPCBub3cpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3Jkcy5kZWxldGUoaGVhZC5tc2dJZCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBoZWFkID0gdGhpcy5xdWV1ZS5wZWVrRnJvbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucXVldWUuY2xlYXIoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXNzYWdlLWRlbGl2ZXJpZXMuanMubWFwIl0sIm5hbWVzIjpbIkRlbnF1ZSIsIlRpbWVDYWNoZUR1cmF0aW9uIiwiRGVsaXZlcnlSZWNvcmRTdGF0dXMiLCJNZXNzYWdlRGVsaXZlcmllcyIsImNvbnN0cnVjdG9yIiwicmVjb3JkcyIsIk1hcCIsInF1ZXVlIiwiZ2V0UmVjb3JkIiwibXNnSWRTdHIiLCJnZXQiLCJlbnN1cmVSZWNvcmQiLCJkcmVjIiwic3RhdHVzIiwidW5rbm93biIsImZpcnN0U2VlblRzTXMiLCJEYXRlIiwibm93IiwidmFsaWRhdGVkIiwicGVlcnMiLCJTZXQiLCJzZXQiLCJlbnRyeSIsIm1zZ0lkIiwiZXhwaXJlIiwicHVzaCIsImdjIiwiaGVhZCIsInBlZWtGcm9udCIsImRlbGV0ZSIsInNoaWZ0IiwiY2xlYXIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.js":
/*!**************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.js ***!
\**************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPeerScoreParams: () => (/* binding */ createPeerScoreParams),\n/* harmony export */ createTopicScoreParams: () => (/* binding */ createTopicScoreParams),\n/* harmony export */ defaultPeerScoreParams: () => (/* binding */ defaultPeerScoreParams),\n/* harmony export */ defaultTopicScoreParams: () => (/* binding */ defaultTopicScoreParams),\n/* harmony export */ validatePeerScoreParams: () => (/* binding */ validatePeerScoreParams),\n/* harmony export */ validateTopicScoreParams: () => (/* binding */ validateTopicScoreParams)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/constants.js\");\n\n\nconst defaultPeerScoreParams = {\n topics: {},\n topicScoreCap: 10.0,\n appSpecificScore: ()=>0.0,\n appSpecificWeight: 10.0,\n IPColocationFactorWeight: -5.0,\n IPColocationFactorThreshold: 10.0,\n IPColocationFactorWhitelist: new Set(),\n behaviourPenaltyWeight: -10.0,\n behaviourPenaltyThreshold: 0.0,\n behaviourPenaltyDecay: 0.2,\n decayInterval: 1000.0,\n decayToZero: 0.1,\n retainScore: 3600 * 1000\n};\nconst defaultTopicScoreParams = {\n topicWeight: 0.5,\n timeInMeshWeight: 1,\n timeInMeshQuantum: 1,\n timeInMeshCap: 3600,\n firstMessageDeliveriesWeight: 1,\n firstMessageDeliveriesDecay: 0.5,\n firstMessageDeliveriesCap: 2000,\n meshMessageDeliveriesWeight: -1,\n meshMessageDeliveriesDecay: 0.5,\n meshMessageDeliveriesCap: 100,\n meshMessageDeliveriesThreshold: 20,\n meshMessageDeliveriesWindow: 10,\n meshMessageDeliveriesActivation: 5000,\n meshFailurePenaltyWeight: -1,\n meshFailurePenaltyDecay: 0.5,\n invalidMessageDeliveriesWeight: -1,\n invalidMessageDeliveriesDecay: 0.3\n};\nfunction createPeerScoreParams(p = {}) {\n return {\n ...defaultPeerScoreParams,\n ...p,\n topics: p.topics != null ? Object.entries(p.topics).reduce((topics, [topic, topicScoreParams])=>{\n topics[topic] = createTopicScoreParams(topicScoreParams);\n return topics;\n }, {}) : {}\n };\n}\nfunction createTopicScoreParams(p = {}) {\n return {\n ...defaultTopicScoreParams,\n ...p\n };\n}\n// peer score parameter validation\nfunction validatePeerScoreParams(p) {\n for (const [topic, params] of Object.entries(p.topics)){\n try {\n validateTopicScoreParams(params);\n } catch (e) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(`invalid score parameters for topic ${topic}: ${e.message}`, _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n }\n // check that the topic score is 0 or something positive\n if (p.topicScoreCap < 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid topic score cap; must be positive (or 0 for no cap)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check that we have an app specific score; the weight can be anything (but expected positive)\n if (p.appSpecificScore === null || p.appSpecificScore === undefined) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"missing application specific score function\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the IP colocation factor\n if (p.IPColocationFactorWeight > 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid IPColocationFactorWeight; must be negative (or 0 to disable)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.IPColocationFactorWeight !== 0 && p.IPColocationFactorThreshold < 1) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid IPColocationFactorThreshold; must be at least 1\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the behaviour penalty\n if (p.behaviourPenaltyWeight > 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid BehaviourPenaltyWeight; must be negative (or 0 to disable)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.behaviourPenaltyWeight !== 0 && (p.behaviourPenaltyDecay <= 0 || p.behaviourPenaltyDecay >= 1)) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid BehaviourPenaltyDecay; must be between 0 and 1\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the decay parameters\n if (p.decayInterval < 1000) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid DecayInterval; must be at least 1s\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.decayToZero <= 0 || p.decayToZero >= 1) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid DecayToZero; must be between 0 and 1\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n// no need to check the score retention; a value of 0 means that we don't retain scores\n}\n// eslint-disable-next-line complexity\nfunction validateTopicScoreParams(p) {\n // make sure we have a sane topic weight\n if (p.topicWeight < 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid topic weight; must be >= 0\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P1\n if (p.timeInMeshQuantum === 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid TimeInMeshQuantum; must be non zero\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight < 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid TimeInMeshWeight; must be positive (or 0 to disable)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight !== 0 && p.timeInMeshQuantum <= 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid TimeInMeshQuantum; must be positive\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight !== 0 && p.timeInMeshCap <= 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid TimeInMeshCap; must be positive\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P2\n if (p.firstMessageDeliveriesWeight < 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invallid FirstMessageDeliveriesWeight; must be positive (or 0 to disable)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.firstMessageDeliveriesWeight !== 0 && (p.firstMessageDeliveriesDecay <= 0 || p.firstMessageDeliveriesDecay >= 1)) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid FirstMessageDeliveriesDecay; must be between 0 and 1\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.firstMessageDeliveriesWeight !== 0 && p.firstMessageDeliveriesCap <= 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid FirstMessageDeliveriesCap; must be positive\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P3\n if (p.meshMessageDeliveriesWeight > 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshMessageDeliveriesWeight; must be negative (or 0 to disable)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && (p.meshMessageDeliveriesDecay <= 0 || p.meshMessageDeliveriesDecay >= 1)) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshMessageDeliveriesDecay; must be between 0 and 1\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesCap <= 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshMessageDeliveriesCap; must be positive\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesThreshold <= 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshMessageDeliveriesThreshold; must be positive\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWindow < 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshMessageDeliveriesWindow; must be non-negative\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesActivation < 1000) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshMessageDeliveriesActivation; must be at least 1s\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P3b\n if (p.meshFailurePenaltyWeight > 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshFailurePenaltyWeight; must be negative (or 0 to disable)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshFailurePenaltyWeight !== 0 && (p.meshFailurePenaltyDecay <= 0 || p.meshFailurePenaltyDecay >= 1)) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid MeshFailurePenaltyDecay; must be between 0 and 1\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P4\n if (p.invalidMessageDeliveriesWeight > 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid InvalidMessageDeliveriesWeight; must be negative (or 0 to disable)\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.invalidMessageDeliveriesDecay <= 0 || p.invalidMessageDeliveriesDecay >= 1) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid InvalidMessageDeliveriesDecay; must be between 0 and 1\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n} //# sourceMappingURL=peer-score-params.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL3BlZXItc2NvcmUtcGFyYW1zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQThDO0FBQ2lCO0FBQ3hELE1BQU1FLHlCQUF5QjtJQUNsQ0MsUUFBUSxDQUFDO0lBQ1RDLGVBQWU7SUFDZkMsa0JBQWtCLElBQU07SUFDeEJDLG1CQUFtQjtJQUNuQkMsMEJBQTBCLENBQUM7SUFDM0JDLDZCQUE2QjtJQUM3QkMsNkJBQTZCLElBQUlDO0lBQ2pDQyx3QkFBd0IsQ0FBQztJQUN6QkMsMkJBQTJCO0lBQzNCQyx1QkFBdUI7SUFDdkJDLGVBQWU7SUFDZkMsYUFBYTtJQUNiQyxhQUFhLE9BQU87QUFDeEIsRUFBRTtBQUNLLE1BQU1DLDBCQUEwQjtJQUNuQ0MsYUFBYTtJQUNiQyxrQkFBa0I7SUFDbEJDLG1CQUFtQjtJQUNuQkMsZUFBZTtJQUNmQyw4QkFBOEI7SUFDOUJDLDZCQUE2QjtJQUM3QkMsMkJBQTJCO0lBQzNCQyw2QkFBNkIsQ0FBQztJQUM5QkMsNEJBQTRCO0lBQzVCQywwQkFBMEI7SUFDMUJDLGdDQUFnQztJQUNoQ0MsNkJBQTZCO0lBQzdCQyxpQ0FBaUM7SUFDakNDLDBCQUEwQixDQUFDO0lBQzNCQyx5QkFBeUI7SUFDekJDLGdDQUFnQyxDQUFDO0lBQ2pDQywrQkFBK0I7QUFDbkMsRUFBRTtBQUNLLFNBQVNDLHNCQUFzQkMsSUFBSSxDQUFDLENBQUM7SUFDeEMsT0FBTztRQUNILEdBQUdsQyxzQkFBc0I7UUFDekIsR0FBR2tDLENBQUM7UUFDSmpDLFFBQVEsRUFBR0EsTUFBTSxJQUFJLE9BQ2ZrQyxPQUFPQyxPQUFPLENBQUNGLEVBQUVqQyxNQUFNLEVBQUVvQyxNQUFNLENBQUMsQ0FBQ3BDLFFBQVEsQ0FBQ3FDLE9BQU9DLGlCQUFpQjtZQUNoRXRDLE1BQU0sQ0FBQ3FDLE1BQU0sR0FBR0UsdUJBQXVCRDtZQUN2QyxPQUFPdEM7UUFDWCxH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TUFBTSxJQUFJN0Isd0RBQVNBLENBQUMsNkRBQTZEQyx3RUFBNkJBO0lBQ2xIO0lBQ0EsSUFBSW1DLEVBQUVYLDJCQUEyQixLQUFLLEtBQUtXLEVBQUVOLCtCQUErQixHQUFHLE1BQU07UUFDakYsTUFBTSxJQUFJOUIsd0RBQVNBLENBQUMsZ0VBQWdFQyx3RUFBNkJBO0lBQ3JIO0lBQ0EsWUFBWTtJQUNaLElBQUltQyxFQUFFTCx3QkFBd0IsR0FBRyxHQUFHO1FBQ2hDLE1BQU0sSUFBSS9CLHdEQUFTQSxDQUFDLHdFQUF3RUMsd0VBQTZCQTtJQUM3SDtJQUNBLElBQUltQyxFQUFFTCx3QkFBd0IsS0FBSyxLQUFNSyxDQUFBQSxFQUFFSix1QkFBdUIsSUFBSSxLQUFLSSxFQUFFSix1QkFBdUIsSUFBSSxJQUFJO1FBQ3hHLE1BQU0sSUFBSWhDLHdEQUFTQSxDQUFDLDREQUE0REMsd0VBQTZCQTtJQUNqSDtJQUNBLFdBQVc7SUFDWCxJQUFJbUMsRUFBRUgsOEJBQThCLEdBQUcsR0FBRztRQUN0QyxNQUFNLElBQUlqQyx3REFBU0EsQ0FBQyw4RUFBOEVDLHdFQUE2QkE7SUFDbkk7SUFDQSxJQUFJbUMsRUFBRUYsNkJBQTZCLElBQUksS0FBS0UsRUFBRUYsNkJBQTZCLElBQUksR0FBRztRQUM5RSxNQUFNLElBQUlsQyx3REFBU0EsQ0FBQyxrRUFBa0VDLHdFQUE2QkE7SUFDdkg7QUFDSixFQUNBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy9zY29yZS9wZWVyLXNjb3JlLXBhcmFtcy5qcz8wMjI4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZGVFcnJvciB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmltcG9ydCB7IEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQZWVyU2NvcmVQYXJhbXMgPSB7XG4gICAgdG9waWNzOiB7fSxcbiAgICB0b3BpY1Njb3JlQ2FwOiAxMC4wLFxuICAgIGFwcFNwZWNpZmljU2NvcmU6ICgpID0+IDAuMCxcbiAgICBhcHBTcGVjaWZpY1dlaWdodDogMTAuMCxcbiAgICBJUENvbG9jYXRpb25GYWN0b3JXZWlnaHQ6IC01LjAsXG4gICAgSVBDb2xvY2F0aW9uRmFjdG9yVGhyZXNob2xkOiAxMC4wLFxuICAgIElQQ29sb2NhdGlvbkZhY3RvcldoaXRlbGlzdDogbmV3IFNldCgpLFxuICAgIGJlaGF2aW91clBlbmFsdHlXZWlnaHQ6IC0xMC4wLFxuICAgIGJlaGF2aW91clBlbmFsdHlUaHJlc2hvbGQ6IDAuMCxcbiAgICBiZWhhdmlvdXJQZW5hbHR5RGVjYXk6IDAuMixcbiAgICBkZWNheUludGVydmFsOiAxMDAwLjAsXG4gICAgZGVjYXlUb1plcm86IDAuMSxcbiAgICByZXRhaW5TY29yZTogMzYwMCAqIDEwMDBcbn07XG5leHBvcnQgY29uc3QgZGVmYXVsdFRvcGljU2NvcmVQYXJhbXMgPSB7XG4gICAgdG9waWNXZWlnaHQ6IDAuNSxcbiAgICB0aW1lSW5NZXNoV2VpZ2h0OiAxLFxuICAgIHRpbWVJbk1lc2hRdWFudHVtOiAxLFxuICAgIHRpbWVJbk1lc2hDYXA6IDM2MDAsXG4gICAgZmlyc3RNZXNzYWdlRGVsaXZlcmllc1dlaWdodDogMSxcbiAgICBmaXJzdE1lc3NhZ2VEZWxpdmVyaWVzRGVjYXk6IDAuNSxcbiAgICBmaXJzdE1lc3NhZ2VEZWxpdmVyaWVzQ2FwOiAyMDAwLFxuICAgIG1lc2hNZXNzYWdlRGVsaXZlcmllc1dlaWdodDogLTEsXG4gICAgbWVzaE1lc3NhZ2VEZWxpdmVyaWVzRGVjYXk6IDAuNSxcbiAgICBtZXNoTWVzc2FnZURlbGl2ZXJpZXNDYXA6IDEwMCxcbiAgICBtZXNoTWVzc2FnZURlbGl2ZXJpZXNUaHJlc2hvbGQ6IDIwLFxuICAgIG1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvdzogMTAsXG4gICAgbWVzaE1lc3NhZ2VEZWxpdmVyaWVzQWN0aXZhdGlvbjogNTAwMCxcbiAgICBtZXNoRmFpbHVyZVBlbmFsdHlXZWlnaHQ6IC0xLFxuICAgIG1lc2hGYWlsdXJlUGVuYWx0eURlY2F5OiAwLjUsXG4gICAgaW52YWxpZE1lc3NhZ2VEZWxpdmVyaWVzV2VpZ2h0OiAtMSxcbiAgICBpbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXNEZWNheTogMC4zXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBlZXJTY29yZVBhcmFtcyhwID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWZhdWx0UGVlclNjb3JlUGFyYW1zLFxuICAgICAgICAuLi5wLFxuICAgICAgICB0b3BpY3M6IChwLnRvcGljcyAhPSBudWxsKVxuICAgICAgICAgICAgPyBPYmplY3QuZW50cmllcyhwLnRvcGljcykucmVkdWNlKCh0b3BpY3MsIFt0b3BpYywgdG9waWNTY29yZVBhcmFtc10pID0+IHtcbiAgICAgICAgICAgICAgICB0b3BpY3NbdG9waWNdID0gY3JlYXRlVG9waWNTY29yZVBhcmFtcyh0b3BpY1Njb3JlUGFyYW1zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9waWNzO1xuICAgICAgICAgICAgfSwge30pXG4gICAgICAgICAgICA6IHt9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb3BpY1Njb3JlUGFyYW1zKHAgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZmF1bHRUb3BpY1Njb3JlUGFyYW1zLFxuICAgICAgICAuLi5wXG4gICAgfTtcbn1cbi8vIHBlZXIgc2NvcmUgcGFyYW1ldGVyIHZhbGlkYXRpb25cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBlZXJTY29yZVBhcmFtcyhwKSB7XG4gICAgZm9yIChjb25zdCBbdG9waWMsIHBhcmFtc10gb2YgT2JqZWN0LmVudHJpZXMocC50b3BpY3MpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWxpZGF0ZVRvcGljU2NvcmVQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcihgaW52YWxpZCBzY29yZSBwYXJhbWV0ZXJzIGZvciB0b3BpYyAke3RvcGljfTogJHtlLm1lc3NhZ2V9YCwgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIHRvcGljIHNjb3JlIGlzIDAgb3Igc29tZXRoaW5nIHBvc2l0aXZlXG4gICAgaWYgKHAudG9waWNTY29yZUNhcCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCB0b3BpYyBzY29yZSBjYXA7IG11c3QgYmUgcG9zaXRpdmUgKG9yIDAgZm9yIG5vIGNhcCknLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIC8vIGNoZWNrIHRoYXQgd2UgaGF2ZSBhbiBhcHAgc3BlY2lmaWMgc2NvcmU7IHRoZSB3ZWlnaHQgY2FuIGJlIGFueXRoaW5nIChidXQgZXhwZWN0ZWQgcG9zaXRpdmUpXG4gICAgaWYgKHAuYXBwU3BlY2lmaWNTY29yZSA9PT0gbnVsbCB8fCBwLmFwcFNwZWNpZmljU2NvcmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdtaXNzaW5nIGFwcGxpY2F0aW9uIHNwZWNpZmljIHNjb3JlIGZ1bmN0aW9uJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgIH1cbiAgICAvLyBjaGVjayB0aGUgSVAgY29sb2NhdGlvbiBmYWN0b3JcbiAgICBpZiAocC5JUENvbG9jYXRpb25GYWN0b3JXZWlnaHQgPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgSVBDb2xvY2F0aW9uRmFjdG9yV2VpZ2h0OyBtdXN0IGJlIG5lZ2F0aXZlIChvciAwIHRvIGRpc2FibGUpJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgIH1cbiAgICBpZiAocC5JUENvbG9jYXRpb25GYWN0b3JXZWlnaHQgIT09IDAgJiYgcC5JUENvbG9jYXRpb25GYWN0b3JUaHJlc2hvbGQgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgSVBDb2xvY2F0aW9uRmFjdG9yVGhyZXNob2xkOyBtdXN0IGJlIGF0IGxlYXN0IDEnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIC8vIGNoZWNrIHRoZSBiZWhhdmlvdXIgcGVuYWx0eVxuICAgIGlmIChwLmJlaGF2aW91clBlbmFsdHlXZWlnaHQgPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgQmVoYXZpb3VyUGVuYWx0eVdlaWdodDsgbXVzdCBiZSBuZWdhdGl2ZSAob3IgMCB0byBkaXNhYmxlKScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgaWYgKHAuYmVoYXZpb3VyUGVuYWx0eVdlaWdodCAhPT0gMCAmJiAocC5iZWhhdmlvdXJQZW5hbHR5RGVjYXkgPD0gMCB8fCBwLmJlaGF2aW91clBlbmFsdHlEZWNheSA+PSAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIEJlaGF2aW91clBlbmFsdHlEZWNheTsgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIC8vIGNoZWNrIHRoZSBkZWNheSBwYXJhbWV0ZXJzXG4gICAgaWYgKHAuZGVjYXlJbnRlcnZhbCA8IDEwMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBEZWNheUludGVydmFsOyBtdXN0IGJlIGF0IGxlYXN0IDFzJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgIH1cbiAgICBpZiAocC5kZWNheVRvWmVybyA8PSAwIHx8IHAuZGVjYXlUb1plcm8gPj0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIERlY2F5VG9aZXJvOyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgLy8gbm8gbmVlZCB0byBjaGVjayB0aGUgc2NvcmUgcmV0ZW50aW9uOyBhIHZhbHVlIG9mIDAgbWVhbnMgdGhhdCB3ZSBkb24ndCByZXRhaW4gc2NvcmVzXG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVG9waWNTY29yZVBhcmFtcyhwKSB7XG4gICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSBzYW5lIHRvcGljIHdlaWdodFxuICAgIGlmIChwLnRvcGljV2VpZ2h0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIHRvcGljIHdlaWdodDsgbXVzdCBiZSA+PSAwJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgIH1cbiAgICAvLyBjaGVjayBQMVxuICAgIGlmIChwLnRpbWVJbk1lc2hRdWFudHVtID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgVGltZUluTWVzaFF1YW50dW07IG11c3QgYmUgbm9uIHplcm8nLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIGlmIChwLnRpbWVJbk1lc2hXZWlnaHQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgVGltZUluTWVzaFdlaWdodDsgbXVzdCBiZSBwb3NpdGl2ZSAob3IgMCB0byBkaXNhYmxlKScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgaWYgKHAudGltZUluTWVzaFdlaWdodCAhPT0gMCAmJiBwLnRpbWVJbk1lc2hRdWFudHVtIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBUaW1lSW5NZXNoUXVhbnR1bTsgbXVzdCBiZSBwb3NpdGl2ZScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgaWYgKHAudGltZUluTWVzaFdlaWdodCAhPT0gMCAmJiBwLnRpbWVJbk1lc2hDYXAgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIFRpbWVJbk1lc2hDYXA7IG11c3QgYmUgcG9zaXRpdmUnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIC8vIGNoZWNrIFAyXG4gICAgaWYgKHAuZmlyc3RNZXNzYWdlRGVsaXZlcmllc1dlaWdodCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxsaWQgRmlyc3RNZXNzYWdlRGVsaXZlcmllc1dlaWdodDsgbXVzdCBiZSBwb3NpdGl2ZSAob3IgMCB0byBkaXNhYmxlKScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgaWYgKHAuZmlyc3RNZXNzYWdlRGVsaXZlcmllc1dlaWdodCAhPT0gMCAmJlxuICAgICAgICAocC5maXJzdE1lc3NhZ2VEZWxpdmVyaWVzRGVjYXkgPD0gMCB8fCBwLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXNEZWNheSA+PSAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIEZpcnN0TWVzc2FnZURlbGl2ZXJpZXNEZWNheTsgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIGlmIChwLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQgIT09IDAgJiYgcC5maXJzdE1lc3NhZ2VEZWxpdmVyaWVzQ2FwIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBGaXJzdE1lc3NhZ2VEZWxpdmVyaWVzQ2FwOyBtdXN0IGJlIHBvc2l0aXZlJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgIH1cbiAgICAvLyBjaGVjayBQM1xuICAgIGlmIChwLm1lc2hNZXNzYWdlRGVsaXZlcmllc1dlaWdodCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBNZXNoTWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQ7IG11c3QgYmUgbmVnYXRpdmUgKG9yIDAgdG8gZGlzYWJsZSknLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIGlmIChwLm1lc2hNZXNzYWdlRGVsaXZlcmllc1dlaWdodCAhPT0gMCAmJiAocC5tZXNoTWVzc2FnZURlbGl2ZXJpZXNEZWNheSA8PSAwIHx8IHAubWVzaE1lc3NhZ2VEZWxpdmVyaWVzRGVjYXkgPj0gMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBNZXNoTWVzc2FnZURlbGl2ZXJpZXNEZWNheTsgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIGlmIChwLm1lc2hNZXNzYWdlRGVsaXZlcmllc1dlaWdodCAhPT0gMCAmJiBwLm1lc2hNZXNzYWdlRGVsaXZlcmllc0NhcCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgTWVzaE1lc3NhZ2VEZWxpdmVyaWVzQ2FwOyBtdXN0IGJlIHBvc2l0aXZlJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgIH1cbiAgICBpZiAocC5tZXNoTWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQgIT09IDAgJiYgcC5tZXNoTWVzc2FnZURlbGl2ZXJpZXNUaHJlc2hvbGQgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIE1lc2hNZXNzYWdlRGVsaXZlcmllc1RocmVzaG9sZDsgbXVzdCBiZSBwb3NpdGl2ZScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgaWYgKHAubWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2luZG93IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIE1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvdzsgbXVzdCBiZSBub24tbmVnYXRpdmUnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1BBUkFNUyk7XG4gICAgfVxuICAgIGlmIChwLm1lc2hNZXNzYWdlRGVsaXZlcmllc1dlaWdodCAhPT0gMCAmJiBwLm1lc2hNZXNzYWdlRGVsaXZlcmllc0FjdGl2YXRpb24gPCAxMDAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgTWVzaE1lc3NhZ2VEZWxpdmVyaWVzQWN0aXZhdGlvbjsgbXVzdCBiZSBhdCBsZWFzdCAxcycsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgLy8gY2hlY2sgUDNiXG4gICAgaWYgKHAubWVzaEZhaWx1cmVQZW5hbHR5V2VpZ2h0ID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIE1lc2hGYWlsdXJlUGVuYWx0eVdlaWdodDsgbXVzdCBiZSBuZWdhdGl2ZSAob3IgMCB0byBkaXNhYmxlKScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgaWYgKHAubWVzaEZhaWx1cmVQZW5hbHR5V2VpZ2h0ICE9PSAwICYmIChwLm1lc2hGYWlsdXJlUGVuYWx0eURlY2F5IDw9IDAgfHwgcC5tZXNoRmFpbHVyZVBlbmFsdHlEZWNheSA+PSAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIE1lc2hGYWlsdXJlUGVuYWx0eURlY2F5OyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG4gICAgLy8gY2hlY2sgUDRcbiAgICBpZiAocC5pbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQgPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgSW52YWxpZE1lc3NhZ2VEZWxpdmVyaWVzV2VpZ2h0OyBtdXN0IGJlIG5lZ2F0aXZlIChvciAwIHRvIGRpc2FibGUpJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMpO1xuICAgIH1cbiAgICBpZiAocC5pbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXNEZWNheSA8PSAwIHx8IHAuaW52YWxpZE1lc3NhZ2VEZWxpdmVyaWVzRGVjYXkgPj0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIEludmFsaWRNZXNzYWdlRGVsaXZlcmllc0RlY2F5OyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMScsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfUEFSQU1TKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZWVyLXNjb3JlLXBhcmFtcy5qcy5tYXAiXSwibmFtZXMiOlsiQ29kZUVycm9yIiwiRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9QQVJBTVMiLCJkZWZhdWx0UGVlclNjb3JlUGFyYW1zIiwidG9waWNzIiwidG9waWNTY29yZUNhcCIsImFwcFNwZWNpZmljU2NvcmUiLCJhcHBTcGVjaWZpY1dlaWdodCIsIklQQ29sb2NhdGlvbkZhY3RvcldlaWdodCIsIklQQ29sb2NhdGlvbkZhY3RvclRocmVzaG9sZCIsIklQQ29sb2NhdGlvbkZhY3RvcldoaXRlbGlzdCIsIlNldCIsImJlaGF2aW91clBlbmFsdHlXZWlnaHQiLCJiZWhhdmlvdXJQZW5hbHR5VGhyZXNob2xkIiwiYmVoYXZpb3VyUGVuYWx0eURlY2F5IiwiZGVjYXlJbnRlcnZhbCIsImRlY2F5VG9aZXJvIiwicmV0YWluU2NvcmUiLCJkZWZhdWx0VG9waWNTY29yZVBhcmFtcyIsInRvcGljV2VpZ2h0IiwidGltZUluTWVzaFdlaWdodCIsInRpbWVJbk1lc2hRdWFudHVtIiwidGltZUluTWVzaENhcCIsImZpcnN0TWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQiLCJmaXJzdE1lc3NhZ2VEZWxpdmVyaWVzRGVjYXkiLCJmaXJzdE1lc3NhZ2VEZWxpdmVyaWVzQ2FwIiwibWVzaE1lc3NhZ2VEZWxpdmVyaWVzV2VpZ2h0IiwibWVzaE1lc3NhZ2VEZWxpdmVyaWVzRGVjYXkiLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNDYXAiLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNUaHJlc2hvbGQiLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNXaW5kb3ciLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNBY3RpdmF0aW9uIiwibWVzaEZhaWx1cmVQZW5hbHR5V2VpZ2h0IiwibWVzaEZhaWx1cmVQZW5hbHR5RGVjYXkiLCJpbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQiLCJpbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXNEZWNheSIsImNyZWF0ZVBlZXJTY29yZVBhcmFtcyIsInAiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwidG9waWMiLCJ0b3BpY1Njb3JlUGFyYW1zIiwiY3JlYXRlVG9waWNTY29yZVBhcmFtcyIsInZhbGlkYXRlUGVlclNjb3JlUGFyYW1zIiwicGFyYW1zIiwidmFsaWRhdGVUb3BpY1Njb3JlUGFyYW1zIiwiZSIsIm1lc3NhZ2UiLCJ1bmRlZmluZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.js":
/*!******************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.js ***!
\******************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPeerScoreThresholds: () => (/* binding */ createPeerScoreThresholds),\n/* harmony export */ defaultPeerScoreThresholds: () => (/* binding */ defaultPeerScoreThresholds),\n/* harmony export */ validatePeerScoreThresholds: () => (/* binding */ validatePeerScoreThresholds)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/constants.js\");\n\n\nconst defaultPeerScoreThresholds = {\n gossipThreshold: -10,\n publishThreshold: -50,\n graylistThreshold: -80,\n acceptPXThreshold: 10,\n opportunisticGraftThreshold: 20\n};\nfunction createPeerScoreThresholds(p = {}) {\n return {\n ...defaultPeerScoreThresholds,\n ...p\n };\n}\nfunction validatePeerScoreThresholds(p) {\n if (p.gossipThreshold > 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid gossip threshold; it must be <= 0\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.publishThreshold > 0 || p.publishThreshold > p.gossipThreshold) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid publish threshold; it must be <= 0 and <= gossip threshold\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.graylistThreshold > 0 || p.graylistThreshold > p.publishThreshold) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid graylist threshold; it must be <= 0 and <= publish threshold\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.acceptPXThreshold < 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid accept PX threshold; it must be >= 0\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.opportunisticGraftThreshold < 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"invalid opportunistic grafting threshold; it must be >= 0\", _constants_js__WEBPACK_IMPORTED_MODULE_1__.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n} //# sourceMappingURL=peer-score-thresholds.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL3BlZXItc2NvcmUtdGhyZXNob2xkcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE4QztBQUNxQjtBQUM1RCxNQUFNRSw2QkFBNkI7SUFDdENDLGlCQUFpQixDQUFDO0lBQ2xCQyxrQkFBa0IsQ0FBQztJQUNuQkMsbUJBQW1CLENBQUM7SUFDcEJDLG1CQUFtQjtJQUNuQkMsNkJBQTZCO0FBQ2pDLEVBQUU7QUFDSyxTQUFTQywwQkFBMEJDLElBQUksQ0FBQyxDQUFDO0lBQzVDLE9BQU87UUFDSCxHQUFHUCwwQkFBMEI7UUFDN0IsR0FBR08sQ0FBQztJQUNSO0FBQ0o7QUFDTyxTQUFTQyw0QkFBNEJELENBQUM7SUFDekMsSUFBSUEsRUFBRU4sZUFBZSxHQUFHLEdBQUc7UUFDdkIsTUFBTSxJQUFJSCx3REFBU0EsQ0FBQyw2Q0FBNkNDLDRFQUFpQ0E7SUFDdEc7SUFDQSxJQUFJUSxFQUFFTCxnQkFBZ0IsR0FBRyxLQUFLSyxFQUFFTCxnQkFBZ0IsR0FBR0ssRUFBRU4sZUFBZSxFQUFFO1FBQ2xFLE1BQU0sSUFBSUgsd0RBQVNBLENBQUMsc0VBQXNFQyw0RUFBaUNBO0lBQy9IO0lBQ0EsSUFBSVEsRUFBRUosaUJBQWlCLEdBQUcsS0FBS0ksRUFBRUosaUJBQWlCLEdBQUdJLEVBQUVMLGdCQUFnQixFQUFFO1FBQ3JFLE1BQU0sSUFBSUosd0RBQVNBLENBQUMsd0VBQXdFQyw0RUFBaUNBO0lBQ2pJO0lBQ0EsSUFBSVEsRUFBRUgsaUJBQWlCLEdBQUcsR0FBRztRQUN6QixNQUFNLElBQUlOLHdEQUFTQSxDQUFDLGdEQUFnREMsNEVBQWlDQTtJQUN6RztJQUNBLElBQUlRLEVBQUVGLDJCQUEyQixHQUFHLEdBQUc7UUFDbkMsTUFBTSxJQUFJUCx3REFBU0EsQ0FBQyw2REFBNkRDLDRFQUFpQ0E7SUFDdEg7QUFDSixFQUNBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy9zY29yZS9wZWVyLXNjb3JlLXRocmVzaG9sZHMuanM/ZWIyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2RlRXJyb3IgfSBmcm9tICdAbGlicDJwL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1RIUkVTSE9MRFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgY29uc3QgZGVmYXVsdFBlZXJTY29yZVRocmVzaG9sZHMgPSB7XG4gICAgZ29zc2lwVGhyZXNob2xkOiAtMTAsXG4gICAgcHVibGlzaFRocmVzaG9sZDogLTUwLFxuICAgIGdyYXlsaXN0VGhyZXNob2xkOiAtODAsXG4gICAgYWNjZXB0UFhUaHJlc2hvbGQ6IDEwLFxuICAgIG9wcG9ydHVuaXN0aWNHcmFmdFRocmVzaG9sZDogMjBcbn07XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGVlclNjb3JlVGhyZXNob2xkcyhwID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWZhdWx0UGVlclNjb3JlVGhyZXNob2xkcyxcbiAgICAgICAgLi4ucFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQZWVyU2NvcmVUaHJlc2hvbGRzKHApIHtcbiAgICBpZiAocC5nb3NzaXBUaHJlc2hvbGQgPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgZ29zc2lwIHRocmVzaG9sZDsgaXQgbXVzdCBiZSA8PSAwJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9USFJFU0hPTERTKTtcbiAgICB9XG4gICAgaWYgKHAucHVibGlzaFRocmVzaG9sZCA+IDAgfHwgcC5wdWJsaXNoVGhyZXNob2xkID4gcC5nb3NzaXBUaHJlc2hvbGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBwdWJsaXNoIHRocmVzaG9sZDsgaXQgbXVzdCBiZSA8PSAwIGFuZCA8PSBnb3NzaXAgdGhyZXNob2xkJywgRVJSX0lOVkFMSURfUEVFUl9TQ09SRV9USFJFU0hPTERTKTtcbiAgICB9XG4gICAgaWYgKHAuZ3JheWxpc3RUaHJlc2hvbGQgPiAwIHx8IHAuZ3JheWxpc3RUaHJlc2hvbGQgPiBwLnB1Ymxpc2hUaHJlc2hvbGQpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBncmF5bGlzdCB0aHJlc2hvbGQ7IGl0IG11c3QgYmUgPD0gMCBhbmQgPD0gcHVibGlzaCB0aHJlc2hvbGQnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1RIUkVTSE9MRFMpO1xuICAgIH1cbiAgICBpZiAocC5hY2NlcHRQWFRocmVzaG9sZCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignaW52YWxpZCBhY2NlcHQgUFggdGhyZXNob2xkOyBpdCBtdXN0IGJlID49IDAnLCBFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1RIUkVTSE9MRFMpO1xuICAgIH1cbiAgICBpZiAocC5vcHBvcnR1bmlzdGljR3JhZnRUaHJlc2hvbGQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQgb3Bwb3J0dW5pc3RpYyBncmFmdGluZyB0aHJlc2hvbGQ7IGl0IG11c3QgYmUgPj0gMCcsIEVSUl9JTlZBTElEX1BFRVJfU0NPUkVfVEhSRVNIT0xEUyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVlci1zY29yZS10aHJlc2hvbGRzLmpzLm1hcCJdLCJuYW1lcyI6WyJDb2RlRXJyb3IiLCJFUlJfSU5WQUxJRF9QRUVSX1NDT1JFX1RIUkVTSE9MRFMiLCJkZWZhdWx0UGVlclNjb3JlVGhyZXNob2xkcyIsImdvc3NpcFRocmVzaG9sZCIsInB1Ymxpc2hUaHJlc2hvbGQiLCJncmF5bGlzdFRocmVzaG9sZCIsImFjY2VwdFBYVGhyZXNob2xkIiwib3Bwb3J0dW5pc3RpY0dyYWZ0VGhyZXNob2xkIiwiY3JlYXRlUGVlclNjb3JlVGhyZXNob2xkcyIsInAiLCJ2YWxpZGF0ZVBlZXJTY29yZVRocmVzaG9sZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.js ***!
\*******************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PeerScore: () => (/* binding */ PeerScore)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../types.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js\");\n/* harmony import */ var _utils_set_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/set.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.js\");\n/* harmony import */ var _compute_score_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./compute-score.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.js\");\n/* harmony import */ var _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./message-deliveries.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.js\");\n/* harmony import */ var _peer_score_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./peer-score-params.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.js\");\n\n\n\n\n\nclass PeerScore {\n constructor(params, metrics, componentLogger, opts){\n /**\n * Per-peer stats for score calculation\n */ this.peerStats = new Map();\n /**\n * IP colocation tracking; maps IP => set of peers.\n */ this.peerIPs = new _utils_set_js__WEBPACK_IMPORTED_MODULE_0__.MapDef(()=>new Set());\n /**\n * Cache score up to decayInterval if topic stats are unchanged.\n */ this.scoreCache = new Map();\n /**\n * Recent message delivery timing/participants\n */ this.deliveryRecords = new _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.MessageDeliveries();\n this.params = params;\n this.metrics = metrics;\n (0,_peer_score_params_js__WEBPACK_IMPORTED_MODULE_2__.validatePeerScoreParams)(params);\n this.scoreCacheValidityMs = opts.scoreCacheValidityMs;\n this.computeScore = opts.computeScore ?? _compute_score_js__WEBPACK_IMPORTED_MODULE_3__.computeScore;\n this.log = componentLogger.forComponent(\"libp2p:gossipsub:score\");\n }\n get size() {\n return this.peerStats.size;\n }\n /**\n * Start PeerScore instance\n */ start() {\n if (this._backgroundInterval != null) {\n this.log(\"Peer score already running\");\n return;\n }\n this._backgroundInterval = setInterval(()=>{\n this.background();\n }, this.params.decayInterval);\n this.log(\"started\");\n }\n /**\n * Stop PeerScore instance\n */ stop() {\n if (this._backgroundInterval == null) {\n this.log(\"Peer score already stopped\");\n return;\n }\n clearInterval(this._backgroundInterval);\n delete this._backgroundInterval;\n this.peerIPs.clear();\n this.peerStats.clear();\n this.deliveryRecords.clear();\n this.log(\"stopped\");\n }\n /**\n * Periodic maintenance\n */ background() {\n this.refreshScores();\n this.deliveryRecords.gc();\n }\n dumpPeerScoreStats() {\n return Object.fromEntries(Array.from(this.peerStats.entries()).map(([peer, stats])=>[\n peer,\n stats\n ]));\n }\n messageFirstSeenTimestampMs(msgIdStr) {\n const drec = this.deliveryRecords.getRecord(msgIdStr);\n return drec != null ? drec.firstSeenTsMs : null;\n }\n /**\n * Decays scores, and purges score records for disconnected peers once their expiry has elapsed.\n */ refreshScores() {\n const now = Date.now();\n const decayToZero = this.params.decayToZero;\n this.peerStats.forEach((pstats, id)=>{\n if (!pstats.connected) {\n // has the retention period expired?\n if (now > pstats.expire) {\n // yes, throw it away (but clean up the IP tracking first)\n this.removeIPsForPeer(id, pstats.knownIPs);\n this.peerStats.delete(id);\n this.scoreCache.delete(id);\n }\n // we don't decay retained scores, as the peer is not active.\n // this way the peer cannot reset a negative score by simply disconnecting and reconnecting,\n // unless the retention period has elapsed.\n // similarly, a well behaved peer does not lose its score by getting disconnected.\n return;\n }\n Object.entries(pstats.topics).forEach(([topic, tstats])=>{\n const tparams = this.params.topics[topic];\n if (tparams === undefined) {\n // we are not scoring this topic\n // should be unreachable, we only add scored topics to pstats\n return;\n }\n // decay counters\n tstats.firstMessageDeliveries *= tparams.firstMessageDeliveriesDecay;\n if (tstats.firstMessageDeliveries < decayToZero) {\n tstats.firstMessageDeliveries = 0;\n }\n tstats.meshMessageDeliveries *= tparams.meshMessageDeliveriesDecay;\n if (tstats.meshMessageDeliveries < decayToZero) {\n tstats.meshMessageDeliveries = 0;\n }\n tstats.meshFailurePenalty *= tparams.meshFailurePenaltyDecay;\n if (tstats.meshFailurePenalty < decayToZero) {\n tstats.meshFailurePenalty = 0;\n }\n tstats.invalidMessageDeliveries *= tparams.invalidMessageDeliveriesDecay;\n if (tstats.invalidMessageDeliveries < decayToZero) {\n tstats.invalidMessageDeliveries = 0;\n }\n // update mesh time and activate mesh message delivery parameter if need be\n if (tstats.inMesh) {\n tstats.meshTime = now - tstats.graftTime;\n if (tstats.meshTime > tparams.meshMessageDeliveriesActivation) {\n tstats.meshMessageDeliveriesActive = true;\n }\n }\n });\n // decay P7 counter\n pstats.behaviourPenalty *= this.params.behaviourPenaltyDecay;\n if (pstats.behaviourPenalty < decayToZero) {\n pstats.behaviourPenalty = 0;\n }\n });\n }\n /**\n * Return the score for a peer\n */ score(id) {\n this.metrics?.scoreFnCalls.inc();\n const pstats = this.peerStats.get(id);\n if (pstats == null) {\n return 0;\n }\n const now = Date.now();\n const cacheEntry = this.scoreCache.get(id);\n // Found cached score within validity period\n if (cacheEntry != null && cacheEntry.cacheUntil > now) {\n return cacheEntry.score;\n }\n this.metrics?.scoreFnRuns.inc();\n const score = this.computeScore(id, pstats, this.params, this.peerIPs);\n const cacheUntil = now + this.scoreCacheValidityMs;\n if (cacheEntry != null) {\n this.metrics?.scoreCachedDelta.observe(Math.abs(score - cacheEntry.score));\n cacheEntry.score = score;\n cacheEntry.cacheUntil = cacheUntil;\n } else {\n this.scoreCache.set(id, {\n score,\n cacheUntil\n });\n }\n return score;\n }\n /**\n * Apply a behavioural penalty to a peer\n */ addPenalty(id, penalty, penaltyLabel) {\n const pstats = this.peerStats.get(id);\n if (pstats != null) {\n pstats.behaviourPenalty += penalty;\n this.metrics?.onScorePenalty(penaltyLabel);\n }\n }\n addPeer(id) {\n // create peer stats (not including topic stats for each topic to be scored)\n // topic stats will be added as needed\n const pstats = {\n connected: true,\n expire: 0,\n topics: {},\n knownIPs: new Set(),\n behaviourPenalty: 0\n };\n this.peerStats.set(id, pstats);\n }\n /** Adds a new IP to a peer, if the peer is not known the update is ignored */ addIP(id, ip) {\n const pstats = this.peerStats.get(id);\n if (pstats != null) {\n pstats.knownIPs.add(ip);\n }\n this.peerIPs.getOrDefault(ip).add(id);\n }\n /** Remove peer association with IP */ removeIP(id, ip) {\n const pstats = this.peerStats.get(id);\n if (pstats != null) {\n pstats.knownIPs.delete(ip);\n }\n const peersWithIP = this.peerIPs.get(ip);\n if (peersWithIP != null) {\n peersWithIP.delete(id);\n if (peersWithIP.size === 0) {\n this.peerIPs.delete(ip);\n }\n }\n }\n removePeer(id) {\n const pstats = this.peerStats.get(id);\n if (pstats == null) {\n return;\n }\n // decide whether to retain the score; this currently only retains non-positive scores\n // to dissuade attacks on the score function.\n if (this.score(id) > 0) {\n this.removeIPsForPeer(id, pstats.knownIPs);\n this.peerStats.delete(id);\n return;\n }\n // furthermore, when we decide to retain the score, the firstMessageDelivery counters are\n // reset to 0 and mesh delivery penalties applied.\n Object.entries(pstats.topics).forEach(([topic, tstats])=>{\n tstats.firstMessageDeliveries = 0;\n const threshold = this.params.topics[topic].meshMessageDeliveriesThreshold;\n if (tstats.inMesh && tstats.meshMessageDeliveriesActive && tstats.meshMessageDeliveries < threshold) {\n const deficit = threshold - tstats.meshMessageDeliveries;\n tstats.meshFailurePenalty += deficit * deficit;\n }\n tstats.inMesh = false;\n tstats.meshMessageDeliveriesActive = false;\n });\n pstats.connected = false;\n pstats.expire = Date.now() + this.params.retainScore;\n }\n /** Handles scoring functionality as a peer GRAFTs to a topic. */ graft(id, topic) {\n const pstats = this.peerStats.get(id);\n if (pstats != null) {\n const tstats = this.getPtopicStats(pstats, topic);\n if (tstats != null) {\n // if we are scoring the topic, update the mesh status.\n tstats.inMesh = true;\n tstats.graftTime = Date.now();\n tstats.meshTime = 0;\n tstats.meshMessageDeliveriesActive = false;\n }\n }\n }\n /** Handles scoring functionality as a peer PRUNEs from a topic. */ prune(id, topic) {\n const pstats = this.peerStats.get(id);\n if (pstats != null) {\n const tstats = this.getPtopicStats(pstats, topic);\n if (tstats != null) {\n // sticky mesh delivery rate failure penalty\n const threshold = this.params.topics[topic].meshMessageDeliveriesThreshold;\n if (tstats.meshMessageDeliveriesActive && tstats.meshMessageDeliveries < threshold) {\n const deficit = threshold - tstats.meshMessageDeliveries;\n tstats.meshFailurePenalty += deficit * deficit;\n }\n tstats.meshMessageDeliveriesActive = false;\n tstats.inMesh = false;\n // TODO: Consider clearing score cache on important penalties\n // this.scoreCache.delete(id)\n }\n }\n }\n validateMessage(msgIdStr) {\n this.deliveryRecords.ensureRecord(msgIdStr);\n }\n deliverMessage(from, msgIdStr, topic) {\n this.markFirstMessageDelivery(from, topic);\n const drec = this.deliveryRecords.ensureRecord(msgIdStr);\n const now = Date.now();\n // defensive check that this is the first delivery trace -- delivery status should be unknown\n if (drec.status !== _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.unknown) {\n this.log(\"unexpected delivery: message from %s was first seen %s ago and has delivery status %s\", from, now - drec.firstSeenTsMs, _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus[drec.status]);\n return;\n }\n // mark the message as valid and reward mesh peers that have already forwarded it to us\n drec.status = _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.valid;\n drec.validated = now;\n drec.peers.forEach((p)=>{\n // this check is to make sure a peer can't send us a message twice and get a double count\n // if it is a first delivery.\n if (p !== from.toString()) {\n this.markDuplicateMessageDelivery(p, topic);\n }\n });\n }\n /**\n * Similar to `rejectMessage` except does not require the message id or reason for an invalid message.\n */ rejectInvalidMessage(from, topic) {\n this.markInvalidMessageDelivery(from, topic);\n }\n rejectMessage(from, msgIdStr, topic, reason) {\n // eslint-disable-next-line default-case\n switch(reason){\n // these messages are not tracked, but the peer is penalized as they are invalid\n case _types_js__WEBPACK_IMPORTED_MODULE_4__.RejectReason.Error:\n this.markInvalidMessageDelivery(from, topic);\n return;\n // we ignore those messages, so do nothing.\n case _types_js__WEBPACK_IMPORTED_MODULE_4__.RejectReason.Blacklisted:\n return;\n }\n const drec = this.deliveryRecords.ensureRecord(msgIdStr);\n // defensive check that this is the first rejection -- delivery status should be unknown\n if (drec.status !== _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.unknown) {\n this.log(\"unexpected rejection: message from %s was first seen %s ago and has delivery status %d\", from, Date.now() - drec.firstSeenTsMs, _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus[drec.status]);\n return;\n }\n if (reason === _types_js__WEBPACK_IMPORTED_MODULE_4__.RejectReason.Ignore) {\n // we were explicitly instructed by the validator to ignore the message but not penalize the peer\n drec.status = _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.ignored;\n drec.peers.clear();\n return;\n }\n // mark the message as invalid and penalize peers that have already forwarded it.\n drec.status = _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.invalid;\n this.markInvalidMessageDelivery(from, topic);\n drec.peers.forEach((p)=>{\n this.markInvalidMessageDelivery(p, topic);\n });\n // release the delivery time tracking map to free some memory early\n drec.peers.clear();\n }\n duplicateMessage(from, msgIdStr, topic) {\n const drec = this.deliveryRecords.ensureRecord(msgIdStr);\n if (drec.peers.has(from)) {\n // we have already seen this duplicate\n return;\n }\n // eslint-disable-next-line default-case\n switch(drec.status){\n case _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.unknown:\n // the message is being validated; track the peer delivery and wait for\n // the Deliver/Reject/Ignore notification.\n drec.peers.add(from);\n break;\n case _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.valid:\n // mark the peer delivery time to only count a duplicate delivery once.\n drec.peers.add(from);\n this.markDuplicateMessageDelivery(from, topic, drec.validated);\n break;\n case _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.invalid:\n // we no longer track delivery time\n this.markInvalidMessageDelivery(from, topic);\n break;\n case _message_deliveries_js__WEBPACK_IMPORTED_MODULE_1__.DeliveryRecordStatus.ignored:\n break;\n }\n }\n /**\n * Increments the \"invalid message deliveries\" counter for all scored topics the message is published in.\n */ markInvalidMessageDelivery(from, topic) {\n const pstats = this.peerStats.get(from);\n if (pstats != null) {\n const tstats = this.getPtopicStats(pstats, topic);\n if (tstats != null) {\n tstats.invalidMessageDeliveries += 1;\n }\n }\n }\n /**\n * Increments the \"first message deliveries\" counter for all scored topics the message is published in,\n * as well as the \"mesh message deliveries\" counter, if the peer is in the mesh for the topic.\n * Messages already known (with the seenCache) are counted with markDuplicateMessageDelivery()\n */ markFirstMessageDelivery(from, topic) {\n const pstats = this.peerStats.get(from);\n if (pstats != null) {\n const tstats = this.getPtopicStats(pstats, topic);\n if (tstats != null) {\n let cap = this.params.topics[topic].firstMessageDeliveriesCap;\n tstats.firstMessageDeliveries = Math.min(cap, tstats.firstMessageDeliveries + 1);\n if (tstats.inMesh) {\n cap = this.params.topics[topic].meshMessageDeliveriesCap;\n tstats.meshMessageDeliveries = Math.min(cap, tstats.meshMessageDeliveries + 1);\n }\n }\n }\n }\n /**\n * Increments the \"mesh message deliveries\" counter for messages we've seen before,\n * as long the message was received within the P3 window.\n */ markDuplicateMessageDelivery(from, topic, validatedTime) {\n const pstats = this.peerStats.get(from);\n if (pstats != null) {\n const now = validatedTime !== undefined ? Date.now() : 0;\n const tstats = this.getPtopicStats(pstats, topic);\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n if (tstats != null && tstats.inMesh) {\n const tparams = this.params.topics[topic];\n // check against the mesh delivery window -- if the validated time is passed as 0, then\n // the message was received before we finished validation and thus falls within the mesh\n // delivery window.\n if (validatedTime !== undefined) {\n const deliveryDelayMs = now - validatedTime;\n const isLateDelivery = deliveryDelayMs > tparams.meshMessageDeliveriesWindow;\n this.metrics?.onDuplicateMsgDelivery(topic, deliveryDelayMs, isLateDelivery);\n if (isLateDelivery) {\n return;\n }\n }\n const cap = tparams.meshMessageDeliveriesCap;\n tstats.meshMessageDeliveries = Math.min(cap, tstats.meshMessageDeliveries + 1);\n }\n }\n }\n /**\n * Removes an IP list from the tracking list for a peer.\n */ removeIPsForPeer(id, ipsToRemove) {\n for (const ipToRemove of ipsToRemove){\n const peerSet = this.peerIPs.get(ipToRemove);\n if (peerSet != null) {\n peerSet.delete(id);\n if (peerSet.size === 0) {\n this.peerIPs.delete(ipToRemove);\n }\n }\n }\n }\n /**\n * Returns topic stats if they exist, otherwise if the supplied parameters score the\n * topic, inserts the default stats and returns a reference to those. If neither apply, returns None.\n */ getPtopicStats(pstats, topic) {\n let topicStats = pstats.topics[topic];\n if (topicStats !== undefined) {\n return topicStats;\n }\n if (this.params.topics[topic] !== undefined) {\n topicStats = {\n inMesh: false,\n graftTime: 0,\n meshTime: 0,\n firstMessageDeliveries: 0,\n meshMessageDeliveries: 0,\n meshMessageDeliveriesActive: false,\n meshFailurePenalty: 0,\n invalidMessageDeliveries: 0\n };\n pstats.topics[topic] = topicStats;\n return topicStats;\n }\n return null;\n }\n} //# sourceMappingURL=peer-score.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL3BlZXItc2NvcmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTJDO0FBQ0Y7QUFDUztBQUNnQztBQUNqQjtBQUMxRCxNQUFNTTtJQXVCVEMsWUFBWUMsTUFBTSxFQUFFQyxPQUFPLEVBQUVDLGVBQWUsRUFBRUMsSUFBSSxDQUFFO1FBcEJwRDs7S0FFQyxRQUNEQyxZQUFZLElBQUlDO1FBQ2hCOztLQUVDLFFBQ0RDLFVBQVUsSUFBSWIsaURBQU1BLENBQUMsSUFBTSxJQUFJYztRQUMvQjs7S0FFQyxRQUNEQyxhQUFhLElBQUlIO1FBQ2pCOztLQUVDLFFBQ0RJLGtCQUFrQixJQUFJZCxxRUFBaUJBO1FBTW5DLElBQUksQ0FBQ0ssTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsT0FBTyxHQUFHQTtRQUNmSiw4RUFBdUJBLENBQUNHO1FBQ3hCLElBQUksQ0FBQ1Usb0JBQW9CLEdBQUdQLEtBQUtPLG9CQUFvQjtRQUNyRCxJQUFJLENBQUNoQixZQUFZLEdBQUdTLEtBQUtULFlBQVksSUFBSUEsMkRBQVlBO1FBQ3JELElBQUksQ0FBQ2lCLEdBQUcsR0FBR1QsZ0JBQWdCVSxZQUFZLENBQUM7SUFDNUM7SUFDQSxJQUFJQyxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUNULFNBQVMsQ0FBQ1MsSUFBSTtJQUM5QjtJQUNBOztLQUVDLEdBQ0RDLFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQ0MsbUJBQW1CLElBQUksTUFBTTtZQUNsQyxJQUFJLENBQUNKLEdBQUcsQ0FBQztZQUNUO1FBQ0o7UUFDQSxJQUFJLENBQUNJLG1CQUFtQixHQUFHQyxZQUFZO1lBQVEsSUFBSSxDQUFDQyxVQUFVO1FBQUksR0FBRyxJQUFJLENBQUNqQixNQUFNLENBQUNrQixhQUFhO1FBQzlGLElBQUksQ0FBQ1AsR0FBRyxDQUFDO0lBQ2I7SUFDQTs7S0FFQyxHQUNEUSxPQUFPO1FBQ0gs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QzNFLE9BQU9LLHFCQUFxQixHQUFHc0IsS0FBSytDLEdBQUcsQ0FBQ0YsS0FBS3hFLE9BQU9LLHFCQUFxQixHQUFHO1lBQ2hGO1FBQ0o7SUFDSjtJQUNBOztLQUVDLEdBQ0RWLGlCQUFpQkgsRUFBRSxFQUFFeUYsV0FBVyxFQUFFO1FBQzlCLEtBQUssTUFBTUMsY0FBY0QsWUFBYTtZQUNsQyxNQUFNRSxVQUFVLElBQUksQ0FBQ2hJLE9BQU8sQ0FBQ2tFLEdBQUcsQ0FBQzZEO1lBQ2pDLElBQUlDLFdBQVcsTUFBTTtnQkFDakJBLFFBQVF0RixNQUFNLENBQUNMO2dCQUNmLElBQUkyRixRQUFRekgsSUFBSSxLQUFLLEdBQUc7b0JBQ3BCLElBQUksQ0FBQ1AsT0FBTyxDQUFDMEMsTUFBTSxDQUFDcUY7Z0JBQ3hCO1lBQ0o7UUFDSjtJQUNKO0lBQ0E7OztLQUdDLEdBQ0RuQyxlQUFleEQsTUFBTSxFQUFFUSxLQUFLLEVBQUU7UUFDMUIsSUFBSXFGLGFBQWE3RixPQUFPTyxNQUFNLENBQUNDLE1BQU07UUFDckMsSUFBSXFGLGVBQWVsRixXQUFXO1lBQzFCLE9BQU9rRjtRQUNYO1FBQ0EsSUFBSSxJQUFJLENBQUN2SSxNQUFNLENBQUNpRCxNQUFNLENBQUNDLE1BQU0sS0FBS0csV0FBVztZQUN6Q2tGLGFBQWE7Z0JBQ1R6RSxRQUFRO2dCQUNSRSxXQUFXO2dCQUNYRCxVQUFVO2dCQUNWVCx3QkFBd0I7Z0JBQ3hCRSx1QkFBdUI7Z0JBQ3ZCVSw2QkFBNkI7Z0JBQzdCUixvQkFBb0I7Z0JBQ3BCRSwwQkFBMEI7WUFDOUI7WUFDQWxCLE9BQU9PLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHcUY7WUFDdkIsT0FBT0E7UUFDWDtRQUNBLE9BQU87SUFDWDtBQUNKLEVBQ0Esc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL3BlZXItc2NvcmUuanM/MThlOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWplY3RSZWFzb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBNYXBEZWYgfSBmcm9tICcuLi91dGlscy9zZXQuanMnO1xuaW1wb3J0IHsgY29tcHV0ZVNjb3JlIH0gZnJvbSAnLi9jb21wdXRlLXNjb3JlLmpzJztcbmltcG9ydCB7IE1lc3NhZ2VEZWxpdmVyaWVzLCBEZWxpdmVyeVJlY29yZFN0YXR1cyB9IGZyb20gJy4vbWVzc2FnZS1kZWxpdmVyaWVzLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlUGVlclNjb3JlUGFyYW1zIH0gZnJvbSAnLi9wZWVyLXNjb3JlLXBhcmFtcy5qcyc7XG5leHBvcnQgY2xhc3MgUGVlclNjb3JlIHtcbiAgICBwYXJhbXM7XG4gICAgbWV0cmljcztcbiAgICAvKipcbiAgICAgKiBQZXItcGVlciBzdGF0cyBmb3Igc2NvcmUgY2FsY3VsYXRpb25cbiAgICAgKi9cbiAgICBwZWVyU3RhdHMgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogSVAgY29sb2NhdGlvbiB0cmFja2luZzsgbWFwcyBJUCA9PiBzZXQgb2YgcGVlcnMuXG4gICAgICovXG4gICAgcGVlcklQcyA9IG5ldyBNYXBEZWYoKCkgPT4gbmV3IFNldCgpKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBzY29yZSB1cCB0byBkZWNheUludGVydmFsIGlmIHRvcGljIHN0YXRzIGFyZSB1bmNoYW5nZWQuXG4gICAgICovXG4gICAgc2NvcmVDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBSZWNlbnQgbWVzc2FnZSBkZWxpdmVyeSB0aW1pbmcvcGFydGljaXBhbnRzXG4gICAgICovXG4gICAgZGVsaXZlcnlSZWNvcmRzID0gbmV3IE1lc3NhZ2VEZWxpdmVyaWVzKCk7XG4gICAgX2JhY2tncm91bmRJbnRlcnZhbDtcbiAgICBzY29yZUNhY2hlVmFsaWRpdHlNcztcbiAgICBjb21wdXRlU2NvcmU7XG4gICAgbG9nO1xuICAgIGNvbnN0cnVjdG9yKHBhcmFtcywgbWV0cmljcywgY29tcG9uZW50TG9nZ2VyLCBvcHRzKSB7XG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICB0aGlzLm1ldHJpY3MgPSBtZXRyaWNzO1xuICAgICAgICB2YWxpZGF0ZVBlZXJTY29yZVBhcmFtcyhwYXJhbXMpO1xuICAgICAgICB0aGlzLnNjb3JlQ2FjaGVWYWxpZGl0eU1zID0gb3B0cy5zY29yZUNhY2hlVmFsaWRpdHlNcztcbiAgICAgICAgdGhpcy5jb21wdXRlU2NvcmUgPSBvcHRzLmNvbXB1dGVTY29yZSA/PyBjb21wdXRlU2NvcmU7XG4gICAgICAgIHRoaXMubG9nID0gY29tcG9uZW50TG9nZ2VyLmZvckNvbXBvbmVudCgnbGlicDJwOmdvc3NpcHN1YjpzY29yZScpO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVlclN0YXRzLnNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IFBlZXJTY29yZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy5fYmFja2dyb3VuZEludGVydmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdQZWVyIHNjb3JlIGFscmVhZHkgcnVubmluZycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JhY2tncm91bmRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsgdGhpcy5iYWNrZ3JvdW5kKCk7IH0sIHRoaXMucGFyYW1zLmRlY2F5SW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmxvZygnc3RhcnRlZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdG9wIFBlZXJTY29yZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLl9iYWNrZ3JvdW5kSW50ZXJ2YWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5sb2coJ1BlZXIgc2NvcmUgYWxyZWFkeSBzdG9wcGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9iYWNrZ3JvdW5kSW50ZXJ2YWwpO1xuICAgICAgICBkZWxldGUgdGhpcy5fYmFja2dyb3VuZEludGVydmFsO1xuICAgICAgICB0aGlzLnBlZXJJUHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wZWVyU3RhdHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5kZWxpdmVyeVJlY29yZHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5sb2coJ3N0b3BwZWQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGVyaW9kaWMgbWFpbnRlbmFuY2VcbiAgICAgKi9cbiAgICBiYWNrZ3JvdW5kKCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hTY29yZXMoKTtcbiAgICAgICAgdGhpcy5kZWxpdmVyeVJlY29yZHMuZ2MoKTtcbiAgICB9XG4gICAgZHVtcFBlZXJTY29yZVN0YXRzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKEFycmF5LmZyb20odGhpcy5wZWVyU3RhdHMuZW50cmllcygpKS5tYXAoKFtwZWVyLCBzdGF0c10pID0+IFtwZWVyLCBzdGF0c10pKTtcbiAgICB9XG4gICAgbWVzc2FnZUZpcnN0U2VlblRpbWVzdGFtcE1zKG1zZ0lkU3RyKSB7XG4gICAgICAgIGNvbnN0IGRyZWMgPSB0aGlzLmRlbGl2ZXJ5UmVjb3Jkcy5nZXRSZWNvcmQobXNnSWRTdHIpO1xuICAgICAgICByZXR1cm4gKGRyZWMgIT0gbnVsbCkgPyBkcmVjLmZpcnN0U2VlblRzTXMgOiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNheXMgc2NvcmVzLCBhbmQgcHVyZ2VzIHNjb3JlIHJlY29yZHMgZm9yIGRpc2Nvbm5lY3RlZCBwZWVycyBvbmNlIHRoZWlyIGV4cGlyeSBoYXMgZWxhcHNlZC5cbiAgICAgKi9cbiAgICByZWZyZXNoU2NvcmVzKCkge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBkZWNheVRvWmVybyA9IHRoaXMucGFyYW1zLmRlY2F5VG9aZXJvO1xuICAgICAgICB0aGlzLnBlZXJTdGF0cy5mb3JFYWNoKChwc3RhdHMsIGlkKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBzdGF0cy5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBoYXMgdGhlIHJldGVudGlvbiBwZXJpb2QgZXhwaXJlZD9cbiAgICAgICAgICAgICAgICBpZiAobm93ID4gcHN0YXRzLmV4cGlyZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB5ZXMsIHRocm93IGl0IGF3YXkgKGJ1dCBjbGVhbiB1cCB0aGUgSVAgdHJhY2tpbmcgZmlyc3QpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSVBzRm9yUGVlcihpZCwgcHN0YXRzLmtub3duSVBzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZWVyU3RhdHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY29yZUNhY2hlLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGRlY2F5IHJldGFpbmVkIHNjb3JlcywgYXMgdGhlIHBlZXIgaXMgbm90IGFjdGl2ZS5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIHdheSB0aGUgcGVlciBjYW5ub3QgcmVzZXQgYSBuZWdhdGl2ZSBzY29yZSBieSBzaW1wbHkgZGlzY29ubmVjdGluZyBhbmQgcmVjb25uZWN0aW5nLFxuICAgICAgICAgICAgICAgIC8vIHVubGVzcyB0aGUgcmV0ZW50aW9uIHBlcmlvZCBoYXMgZWxhcHNlZC5cbiAgICAgICAgICAgICAgICAvLyBzaW1pbGFybHksIGEgd2VsbCBiZWhhdmVkIHBlZXIgZG9lcyBub3QgbG9zZSBpdHMgc2NvcmUgYnkgZ2V0dGluZyBkaXNjb25uZWN0ZWQuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocHN0YXRzLnRvcGljcykuZm9yRWFjaCgoW3RvcGljLCB0c3RhdHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBhcmFtcyA9IHRoaXMucGFyYW1zLnRvcGljc1t0b3BpY107XG4gICAgICAgICAgICAgICAgaWYgKHRwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgbm90IHNjb3JpbmcgdGhpcyB0b3BpY1xuICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGUsIHdlIG9ubHkgYWRkIHNjb3JlZCB0b3BpY3MgdG8gcHN0YXRzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZGVjYXkgY291bnRlcnNcbiAgICAgICAgICAgICAgICB0c3RhdHMuZmlyc3RNZXNzYWdlRGVsaXZlcmllcyAqPSB0cGFyYW1zLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXNEZWNheTtcbiAgICAgICAgICAgICAgICBpZiAodHN0YXRzLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXMgPCBkZWNheVRvWmVybykge1xuICAgICAgICAgICAgICAgICAgICB0c3RhdHMuZmlyc3RNZXNzYWdlRGVsaXZlcmllcyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXMgKj0gdHBhcmFtcy5tZXNoTWVzc2FnZURlbGl2ZXJpZXNEZWNheTtcbiAgICAgICAgICAgICAgICBpZiAodHN0YXRzLm1lc2hNZXNzYWdlRGVsaXZlcmllcyA8IGRlY2F5VG9aZXJvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0c3RhdHMubWVzaEZhaWx1cmVQZW5hbHR5ICo9IHRwYXJhbXMubWVzaEZhaWx1cmVQZW5hbHR5RGVjYXk7XG4gICAgICAgICAgICAgICAgaWYgKHRzdGF0cy5tZXNoRmFpbHVyZVBlbmFsdHkgPCBkZWNheVRvWmVybykge1xuICAgICAgICAgICAgICAgICAgICB0c3RhdHMubWVzaEZhaWx1cmVQZW5hbHR5ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHN0YXRzLmludmFsaWRNZXNzYWdlRGVsaXZlcmllcyAqPSB0cGFyYW1zLmludmFsaWRNZXNzYWdlRGVsaXZlcmllc0RlY2F5O1xuICAgICAgICAgICAgICAgIGlmICh0c3RhdHMuaW52YWxpZE1lc3NhZ2VEZWxpdmVyaWVzIDwgZGVjYXlUb1plcm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdHN0YXRzLmludmFsaWRNZXNzYWdlRGVsaXZlcmllcyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBtZXNoIHRpbWUgYW5kIGFjdGl2YXRlIG1lc2ggbWVzc2FnZSBkZWxpdmVyeSBwYXJhbWV0ZXIgaWYgbmVlZCBiZVxuICAgICAgICAgICAgICAgIGlmICh0c3RhdHMuaW5NZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRzdGF0cy5tZXNoVGltZSA9IG5vdyAtIHRzdGF0cy5ncmFmdFRpbWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0c3RhdHMubWVzaFRpbWUgPiB0cGFyYW1zLm1lc2hNZXNzYWdlRGVsaXZlcmllc0FjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBkZWNheSBQNyBjb3VudGVyXG4gICAgICAgICAgICBwc3RhdHMuYmVoYXZpb3VyUGVuYWx0eSAqPSB0aGlzLnBhcmFtcy5iZWhhdmlvdXJQZW5hbHR5RGVjYXk7XG4gICAgICAgICAgICBpZiAocHN0YXRzLmJlaGF2aW91clBlbmFsdHkgPCBkZWNheVRvWmVybykge1xuICAgICAgICAgICAgICAgIHBzdGF0cy5iZWhhdmlvdXJQZW5hbHR5ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgc2NvcmUgZm9yIGEgcGVlclxuICAgICAqL1xuICAgIHNjb3JlKGlkKSB7XG4gICAgICAgIHRoaXMubWV0cmljcz8uc2NvcmVGbkNhbGxzLmluYygpO1xuICAgICAgICBjb25zdCBwc3RhdHMgPSB0aGlzLnBlZXJTdGF0cy5nZXQoaWQpO1xuICAgICAgICBpZiAocHN0YXRzID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLnNjb3JlQ2FjaGUuZ2V0KGlkKTtcbiAgICAgICAgLy8gRm91bmQgY2FjaGVkIHNjb3JlIHdpdGhpbiB2YWxpZGl0eSBwZXJpb2RcbiAgICAgICAgaWYgKChjYWNoZUVudHJ5ICE9IG51bGwpICYmIGNhY2hlRW50cnkuY2FjaGVVbnRpbCA+IG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlRW50cnkuc2NvcmU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRyaWNzPy5zY29yZUZuUnVucy5pbmMoKTtcbiAgICAgICAgY29uc3Qgc2NvcmUgPSB0aGlzLmNvbXB1dGVTY29yZShpZCwgcHN0YXRzLCB0aGlzLnBhcmFtcywgdGhpcy5wZWVySVBzKTtcbiAgICAgICAgY29uc3QgY2FjaGVVbnRpbCA9IG5vdyArIHRoaXMuc2NvcmVDYWNoZVZhbGlkaXR5TXM7XG4gICAgICAgIGlmIChjYWNoZUVudHJ5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWV0cmljcz8uc2NvcmVDYWNoZWREZWx0YS5vYnNlcnZlKE1hdGguYWJzKHNjb3JlIC0gY2FjaGVFbnRyeS5zY29yZSkpO1xuICAgICAgICAgICAgY2FjaGVFbnRyeS5zY29yZSA9IHNjb3JlO1xuICAgICAgICAgICAgY2FjaGVFbnRyeS5jYWNoZVVudGlsID0gY2FjaGVVbnRpbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2NvcmVDYWNoZS5zZXQoaWQsIHsgc2NvcmUsIGNhY2hlVW50aWwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjb3JlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHBseSBhIGJlaGF2aW91cmFsIHBlbmFsdHkgdG8gYSBwZWVyXG4gICAgICovXG4gICAgYWRkUGVuYWx0eShpZCwgcGVuYWx0eSwgcGVuYWx0eUxhYmVsKSB7XG4gICAgICAgIGNvbnN0IHBzdGF0cyA9IHRoaXMucGVlclN0YXRzLmdldChpZCk7XG4gICAgICAgIGlmIChwc3RhdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgcHN0YXRzLmJlaGF2aW91clBlbmFsdHkgKz0gcGVuYWx0eTtcbiAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25TY29yZVBlbmFsdHkocGVuYWx0eUxhYmVsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRQZWVyKGlkKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBwZWVyIHN0YXRzIChub3QgaW5jbHVkaW5nIHRvcGljIHN0YXRzIGZvciBlYWNoIHRvcGljIHRvIGJlIHNjb3JlZClcbiAgICAgICAgLy8gdG9waWMgc3RhdHMgd2lsbCBiZSBhZGRlZCBhcyBuZWVkZWRcbiAgICAgICAgY29uc3QgcHN0YXRzID0ge1xuICAgICAgICAgICAgY29ubmVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgZXhwaXJlOiAwLFxuICAgICAgICAgICAgdG9waWNzOiB7fSxcbiAgICAgICAgICAgIGtub3duSVBzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBiZWhhdmlvdXJQZW5hbHR5OiAwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGVlclN0YXRzLnNldChpZCwgcHN0YXRzKTtcbiAgICB9XG4gICAgLyoqIEFkZHMgYSBuZXcgSVAgdG8gYSBwZWVyLCBpZiB0aGUgcGVlciBpcyBub3Qga25vd24gdGhlIHVwZGF0ZSBpcyBpZ25vcmVkICovXG4gICAgYWRkSVAoaWQsIGlwKSB7XG4gICAgICAgIGNvbnN0IHBzdGF0cyA9IHRoaXMucGVlclN0YXRzLmdldChpZCk7XG4gICAgICAgIGlmIChwc3RhdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgcHN0YXRzLmtub3duSVBzLmFkZChpcCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZWVySVBzLmdldE9yRGVmYXVsdChpcCkuYWRkKGlkKTtcbiAgICB9XG4gICAgLyoqIFJlbW92ZSBwZWVyIGFzc29jaWF0aW9uIHdpdGggSVAgKi9cbiAgICByZW1vdmVJUChpZCwgaXApIHtcbiAgICAgICAgY29uc3QgcHN0YXRzID0gdGhpcy5wZWVyU3RhdHMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKHBzdGF0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICBwc3RhdHMua25vd25JUHMuZGVsZXRlKGlwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwZWVyc1dpdGhJUCA9IHRoaXMucGVlcklQcy5nZXQoaXApO1xuICAgICAgICBpZiAocGVlcnNXaXRoSVAgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGVlcnNXaXRoSVAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIGlmIChwZWVyc1dpdGhJUC5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZWVySVBzLmRlbGV0ZShpcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlUGVlcihpZCkge1xuICAgICAgICBjb25zdCBwc3RhdHMgPSB0aGlzLnBlZXJTdGF0cy5nZXQoaWQpO1xuICAgICAgICBpZiAocHN0YXRzID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWNpZGUgd2hldGhlciB0byByZXRhaW4gdGhlIHNjb3JlOyB0aGlzIGN1cnJlbnRseSBvbmx5IHJldGFpbnMgbm9uLXBvc2l0aXZlIHNjb3Jlc1xuICAgICAgICAvLyB0byBkaXNzdWFkZSBhdHRhY2tzIG9uIHRoZSBzY29yZSBmdW5jdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuc2NvcmUoaWQpID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVJUHNGb3JQZWVyKGlkLCBwc3RhdHMua25vd25JUHMpO1xuICAgICAgICAgICAgdGhpcy5wZWVyU3RhdHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBmdXJ0aGVybW9yZSwgd2hlbiB3ZSBkZWNpZGUgdG8gcmV0YWluIHRoZSBzY29yZSwgdGhlIGZpcnN0TWVzc2FnZURlbGl2ZXJ5IGNvdW50ZXJzIGFyZVxuICAgICAgICAvLyByZXNldCB0byAwIGFuZCBtZXNoIGRlbGl2ZXJ5IHBlbmFsdGllcyBhcHBsaWVkLlxuICAgICAgICBPYmplY3QuZW50cmllcyhwc3RhdHMudG9waWNzKS5mb3JFYWNoKChbdG9waWMsIHRzdGF0c10pID0+IHtcbiAgICAgICAgICAgIHRzdGF0cy5maXJzdE1lc3NhZ2VEZWxpdmVyaWVzID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMucGFyYW1zLnRvcGljc1t0b3BpY10ubWVzaE1lc3NhZ2VEZWxpdmVyaWVzVGhyZXNob2xkO1xuICAgICAgICAgICAgaWYgKHRzdGF0cy5pbk1lc2ggJiYgdHN0YXRzLm1lc2hNZXNzYWdlRGVsaXZlcmllc0FjdGl2ZSAmJiB0c3RhdHMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzIDwgdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmaWNpdCA9IHRocmVzaG9sZCAtIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXM7XG4gICAgICAgICAgICAgICAgdHN0YXRzLm1lc2hGYWlsdXJlUGVuYWx0eSArPSBkZWZpY2l0ICogZGVmaWNpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRzdGF0cy5pbk1lc2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBzdGF0cy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcHN0YXRzLmV4cGlyZSA9IERhdGUubm93KCkgKyB0aGlzLnBhcmFtcy5yZXRhaW5TY29yZTtcbiAgICB9XG4gICAgLyoqIEhhbmRsZXMgc2NvcmluZyBmdW5jdGlvbmFsaXR5IGFzIGEgcGVlciBHUkFGVHMgdG8gYSB0b3BpYy4gKi9cbiAgICBncmFmdChpZCwgdG9waWMpIHtcbiAgICAgICAgY29uc3QgcHN0YXRzID0gdGhpcy5wZWVyU3RhdHMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKHBzdGF0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0c3RhdHMgPSB0aGlzLmdldFB0b3BpY1N0YXRzKHBzdGF0cywgdG9waWMpO1xuICAgICAgICAgICAgaWYgKHRzdGF0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIHNjb3JpbmcgdGhlIHRvcGljLCB1cGRhdGUgdGhlIG1lc2ggc3RhdHVzLlxuICAgICAgICAgICAgICAgIHRzdGF0cy5pbk1lc2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRzdGF0cy5ncmFmdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIHRzdGF0cy5tZXNoVGltZSA9IDA7XG4gICAgICAgICAgICAgICAgdHN0YXRzLm1lc2hNZXNzYWdlRGVsaXZlcmllc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBIYW5kbGVzIHNjb3JpbmcgZnVuY3Rpb25hbGl0eSBhcyBhIHBlZXIgUFJVTkVzIGZyb20gYSB0b3BpYy4gKi9cbiAgICBwcnVuZShpZCwgdG9waWMpIHtcbiAgICAgICAgY29uc3QgcHN0YXRzID0gdGhpcy5wZWVyU3RhdHMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKHBzdGF0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0c3RhdHMgPSB0aGlzLmdldFB0b3BpY1N0YXRzKHBzdGF0cywgdG9waWMpO1xuICAgICAgICAgICAgaWYgKHRzdGF0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RpY2t5IG1lc2ggZGVsaXZlcnkgcmF0ZSBmYWlsdXJlIHBlbmFsdHlcbiAgICAgICAgICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLnBhcmFtcy50b3BpY3NbdG9waWNdLm1lc2hNZXNzYWdlRGVsaXZlcmllc1RocmVzaG9sZDtcbiAgICAgICAgICAgICAgICBpZiAodHN0YXRzLm1lc2hNZXNzYWdlRGVsaXZlcmllc0FjdGl2ZSAmJiB0c3RhdHMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzIDwgdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmljaXQgPSB0aHJlc2hvbGQgLSB0c3RhdHMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzO1xuICAgICAgICAgICAgICAgICAgICB0c3RhdHMubWVzaEZhaWx1cmVQZW5hbHR5ICs9IGRlZmljaXQgKiBkZWZpY2l0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0c3RhdHMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdHN0YXRzLmluTWVzaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNsZWFyaW5nIHNjb3JlIGNhY2hlIG9uIGltcG9ydGFudCBwZW5hbHRpZXNcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNjb3JlQ2FjaGUuZGVsZXRlKGlkKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlTWVzc2FnZShtc2dJZFN0cikge1xuICAgICAgICB0aGlzLmRlbGl2ZXJ5UmVjb3Jkcy5lbnN1cmVSZWNvcmQobXNnSWRTdHIpO1xuICAgIH1cbiAgICBkZWxpdmVyTWVzc2FnZShmcm9tLCBtc2dJZFN0ciwgdG9waWMpIHtcbiAgICAgICAgdGhpcy5tYXJrRmlyc3RNZXNzYWdlRGVsaXZlcnkoZnJvbSwgdG9waWMpO1xuICAgICAgICBjb25zdCBkcmVjID0gdGhpcy5kZWxpdmVyeVJlY29yZHMuZW5zdXJlUmVjb3JkKG1zZ0lkU3RyKTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gZGVmZW5zaXZlIGNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgZGVsaXZlcnkgdHJhY2UgLS0gZGVsaXZlcnkgc3RhdHVzIHNob3VsZCBiZSB1bmtub3duXG4gICAgICAgIGlmIChkcmVjLnN0YXR1cyAhPT0gRGVsaXZlcnlSZWNvcmRTdGF0dXMudW5rbm93bikge1xuICAgICAgICAgICAgdGhpcy5sb2coJ3VuZXhwZWN0ZWQgZGVsaXZlcnk6IG1lc3NhZ2UgZnJvbSAlcyB3YXMgZmlyc3Qgc2VlbiAlcyBhZ28gYW5kIGhhcyBkZWxpdmVyeSBzdGF0dXMgJXMnLCBmcm9tLCBub3cgLSBkcmVjLmZpcnN0U2VlblRzTXMsIERlbGl2ZXJ5UmVjb3JkU3RhdHVzW2RyZWMuc3RhdHVzXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFyayB0aGUgbWVzc2FnZSBhcyB2YWxpZCBhbmQgcmV3YXJkIG1lc2ggcGVlcnMgdGhhdCBoYXZlIGFscmVhZHkgZm9yd2FyZGVkIGl0IHRvIHVzXG4gICAgICAgIGRyZWMuc3RhdHVzID0gRGVsaXZlcnlSZWNvcmRTdGF0dXMudmFsaWQ7XG4gICAgICAgIGRyZWMudmFsaWRhdGVkID0gbm93O1xuICAgICAgICBkcmVjLnBlZXJzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMgY2hlY2sgaXMgdG8gbWFrZSBzdXJlIGEgcGVlciBjYW4ndCBzZW5kIHVzIGEgbWVzc2FnZSB0d2ljZSBhbmQgZ2V0IGEgZG91YmxlIGNvdW50XG4gICAgICAgICAgICAvLyBpZiBpdCBpcyBhIGZpcnN0IGRlbGl2ZXJ5LlxuICAgICAgICAgICAgaWYgKHAgIT09IGZyb20udG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya0R1cGxpY2F0ZU1lc3NhZ2VEZWxpdmVyeShwLCB0b3BpYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1pbGFyIHRvIGByZWplY3RNZXNzYWdlYCBleGNlcHQgZG9lcyBub3QgcmVxdWlyZSB0aGUgbWVzc2FnZSBpZCBvciByZWFzb24gZm9yIGFuIGludmFsaWQgbWVzc2FnZS5cbiAgICAgKi9cbiAgICByZWplY3RJbnZhbGlkTWVzc2FnZShmcm9tLCB0b3BpYykge1xuICAgICAgICB0aGlzLm1hcmtJbnZhbGlkTWVzc2FnZURlbGl2ZXJ5KGZyb20sIHRvcGljKTtcbiAgICB9XG4gICAgcmVqZWN0TWVzc2FnZShmcm9tLCBtc2dJZFN0ciwgdG9waWMsIHJlYXNvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVmYXVsdC1jYXNlXG4gICAgICAgIHN3aXRjaCAocmVhc29uKSB7XG4gICAgICAgICAgICAvLyB0aGVzZSBtZXNzYWdlcyBhcmUgbm90IHRyYWNrZWQsIGJ1dCB0aGUgcGVlciBpcyBwZW5hbGl6ZWQgYXMgdGhleSBhcmUgaW52YWxpZFxuICAgICAgICAgICAgY2FzZSBSZWplY3RSZWFzb24uRXJyb3I6XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrSW52YWxpZE1lc3NhZ2VEZWxpdmVyeShmcm9tLCB0b3BpYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gd2UgaWdub3JlIHRob3NlIG1lc3NhZ2VzLCBzbyBkbyBub3RoaW5nLlxuICAgICAgICAgICAgY2FzZSBSZWplY3RSZWFzb24uQmxhY2tsaXN0ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gdGhlIHJlc3QgYXJlIGhhbmRsZWQgYWZ0ZXIgcmVjb3JkIGNyZWF0aW9uXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHJlYyA9IHRoaXMuZGVsaXZlcnlSZWNvcmRzLmVuc3VyZVJlY29yZChtc2dJZFN0cik7XG4gICAgICAgIC8vIGRlZmVuc2l2ZSBjaGVjayB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IHJlamVjdGlvbiAtLSBkZWxpdmVyeSBzdGF0dXMgc2hvdWxkIGJlIHVua25vd25cbiAgICAgICAgaWYgKGRyZWMuc3RhdHVzICE9PSBEZWxpdmVyeVJlY29yZFN0YXR1cy51bmtub3duKSB7XG4gICAgICAgICAgICB0aGlzLmxvZygndW5leHBlY3RlZCByZWplY3Rpb246IG1lc3NhZ2UgZnJvbSAlcyB3YXMgZmlyc3Qgc2VlbiAlcyBhZ28gYW5kIGhhcyBkZWxpdmVyeSBzdGF0dXMgJWQnLCBmcm9tLCBEYXRlLm5vdygpIC0gZHJlYy5maXJzdFNlZW5Uc01zLCBEZWxpdmVyeVJlY29yZFN0YXR1c1tkcmVjLnN0YXR1c10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWFzb24gPT09IFJlamVjdFJlYXNvbi5JZ25vcmUpIHtcbiAgICAgICAgICAgIC8vIHdlIHdlcmUgZXhwbGljaXRseSBpbnN0cnVjdGVkIGJ5IHRoZSB2YWxpZGF0b3IgdG8gaWdub3JlIHRoZSBtZXNzYWdlIGJ1dCBub3QgcGVuYWxpemUgdGhlIHBlZXJcbiAgICAgICAgICAgIGRyZWMuc3RhdHVzID0gRGVsaXZlcnlSZWNvcmRTdGF0dXMuaWdub3JlZDtcbiAgICAgICAgICAgIGRyZWMucGVlcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYXJrIHRoZSBtZXNzYWdlIGFzIGludmFsaWQgYW5kIHBlbmFsaXplIHBlZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGZvcndhcmRlZCBpdC5cbiAgICAgICAgZHJlYy5zdGF0dXMgPSBEZWxpdmVyeVJlY29yZFN0YXR1cy5pbnZhbGlkO1xuICAgICAgICB0aGlzLm1hcmtJbnZhbGlkTWVzc2FnZURlbGl2ZXJ5KGZyb20sIHRvcGljKTtcbiAgICAgICAgZHJlYy5wZWVycy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcmtJbnZhbGlkTWVzc2FnZURlbGl2ZXJ5KHAsIHRvcGljKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlbGVhc2UgdGhlIGRlbGl2ZXJ5IHRpbWUgdHJhY2tpbmcgbWFwIHRvIGZyZWUgc29tZSBtZW1vcnkgZWFybHlcbiAgICAgICAgZHJlYy5wZWVycy5jbGVhcigpO1xuICAgIH1cbiAgICBkdXBsaWNhdGVNZXNzYWdlKGZyb20sIG1zZ0lkU3RyLCB0b3BpYykge1xuICAgICAgICBjb25zdCBkcmVjID0gdGhpcy5kZWxpdmVyeVJlY29yZHMuZW5zdXJlUmVjb3JkKG1zZ0lkU3RyKTtcbiAgICAgICAgaWYgKGRyZWMucGVlcnMuaGFzKGZyb20pKSB7XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgc2VlbiB0aGlzIGR1cGxpY2F0ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICAgICAgc3dpdGNoIChkcmVjLnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBEZWxpdmVyeVJlY29yZFN0YXR1cy51bmtub3duOlxuICAgICAgICAgICAgICAgIC8vIHRoZSBtZXNzYWdlIGlzIGJlaW5nIHZhbGlkYXRlZDsgdHJhY2sgdGhlIHBlZXIgZGVsaXZlcnkgYW5kIHdhaXQgZm9yXG4gICAgICAgICAgICAgICAgLy8gdGhlIERlbGl2ZXIvUmVqZWN0L0lnbm9yZSBub3RpZmljYXRpb24uXG4gICAgICAgICAgICAgICAgZHJlYy5wZWVycy5hZGQoZnJvbSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlbGl2ZXJ5UmVjb3JkU3RhdHVzLnZhbGlkOlxuICAgICAgICAgICAgICAgIC8vIG1hcmsgdGhlIHBlZXIgZGVsaXZlcnkgdGltZSB0byBvbmx5IGNvdW50IGEgZHVwbGljYXRlIGRlbGl2ZXJ5IG9uY2UuXG4gICAgICAgICAgICAgICAgZHJlYy5wZWVycy5hZGQoZnJvbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrRHVwbGljYXRlTWVzc2FnZURlbGl2ZXJ5KGZyb20sIHRvcGljLCBkcmVjLnZhbGlkYXRlZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlbGl2ZXJ5UmVjb3JkU3RhdHVzLmludmFsaWQ6XG4gICAgICAgICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIHRyYWNrIGRlbGl2ZXJ5IHRpbWVcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtJbnZhbGlkTWVzc2FnZURlbGl2ZXJ5KGZyb20sIHRvcGljKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVsaXZlcnlSZWNvcmRTdGF0dXMuaWdub3JlZDpcbiAgICAgICAgICAgICAgICAvLyB0aGUgbWVzc2FnZSB3YXMgaWdub3JlZDsgZG8gbm90aGluZyAod2UgZG9uJ3Qga25vdyBpZiBpdCB3YXMgdmFsaWQpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50cyB0aGUgXCJpbnZhbGlkIG1lc3NhZ2UgZGVsaXZlcmllc1wiIGNvdW50ZXIgZm9yIGFsbCBzY29yZWQgdG9waWNzIHRoZSBtZXNzYWdlIGlzIHB1Ymxpc2hlZCBpbi5cbiAgICAgKi9cbiAgICBtYXJrSW52YWxpZE1lc3NhZ2VEZWxpdmVyeShmcm9tLCB0b3BpYykge1xuICAgICAgICBjb25zdCBwc3RhdHMgPSB0aGlzLnBlZXJTdGF0cy5nZXQoZnJvbSk7XG4gICAgICAgIGlmIChwc3RhdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdHN0YXRzID0gdGhpcy5nZXRQdG9waWNTdGF0cyhwc3RhdHMsIHRvcGljKTtcbiAgICAgICAgICAgIGlmICh0c3RhdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRzdGF0cy5pbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXMgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIHRoZSBcImZpcnN0IG1lc3NhZ2UgZGVsaXZlcmllc1wiIGNvdW50ZXIgZm9yIGFsbCBzY29yZWQgdG9waWNzIHRoZSBtZXNzYWdlIGlzIHB1Ymxpc2hlZCBpbixcbiAgICAgKiBhcyB3ZWxsIGFzIHRoZSBcIm1lc2ggbWVzc2FnZSBkZWxpdmVyaWVzXCIgY291bnRlciwgaWYgdGhlIHBlZXIgaXMgaW4gdGhlIG1lc2ggZm9yIHRoZSB0b3BpYy5cbiAgICAgKiBNZXNzYWdlcyBhbHJlYWR5IGtub3duICh3aXRoIHRoZSBzZWVuQ2FjaGUpIGFyZSBjb3VudGVkIHdpdGggbWFya0R1cGxpY2F0ZU1lc3NhZ2VEZWxpdmVyeSgpXG4gICAgICovXG4gICAgbWFya0ZpcnN0TWVzc2FnZURlbGl2ZXJ5KGZyb20sIHRvcGljKSB7XG4gICAgICAgIGNvbnN0IHBzdGF0cyA9IHRoaXMucGVlclN0YXRzLmdldChmcm9tKTtcbiAgICAgICAgaWYgKHBzdGF0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0c3RhdHMgPSB0aGlzLmdldFB0b3BpY1N0YXRzKHBzdGF0cywgdG9waWMpO1xuICAgICAgICAgICAgaWYgKHRzdGF0cyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNhcCA9IHRoaXMucGFyYW1zLnRvcGljc1t0b3BpY10uZmlyc3RNZXNzYWdlRGVsaXZlcmllc0NhcDtcbiAgICAgICAgICAgICAgICB0c3RhdHMuZmlyc3RNZXNzYWdlRGVsaXZlcmllcyA9IE1hdGgubWluKGNhcCwgdHN0YXRzLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXMgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAodHN0YXRzLmluTWVzaCkge1xuICAgICAgICAgICAgICAgICAgICBjYXAgPSB0aGlzLnBhcmFtcy50b3BpY3NbdG9waWNdLm1lc2hNZXNzYWdlRGVsaXZlcmllc0NhcDtcbiAgICAgICAgICAgICAgICAgICAgdHN0YXRzLm1lc2hNZXNzYWdlRGVsaXZlcmllcyA9IE1hdGgubWluKGNhcCwgdHN0YXRzLm1lc2hNZXNzYWdlRGVsaXZlcmllcyArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIHRoZSBcIm1lc2ggbWVzc2FnZSBkZWxpdmVyaWVzXCIgY291bnRlciBmb3IgbWVzc2FnZXMgd2UndmUgc2VlbiBiZWZvcmUsXG4gICAgICogYXMgbG9uZyB0aGUgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgd2l0aGluIHRoZSBQMyB3aW5kb3cuXG4gICAgICovXG4gICAgbWFya0R1cGxpY2F0ZU1lc3NhZ2VEZWxpdmVyeShmcm9tLCB0b3BpYywgdmFsaWRhdGVkVGltZSkge1xuICAgICAgICBjb25zdCBwc3RhdHMgPSB0aGlzLnBlZXJTdGF0cy5nZXQoZnJvbSk7XG4gICAgICAgIGlmIChwc3RhdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gdmFsaWRhdGVkVGltZSAhPT0gdW5kZWZpbmVkID8gRGF0ZS5ub3coKSA6IDA7XG4gICAgICAgICAgICBjb25zdCB0c3RhdHMgPSB0aGlzLmdldFB0b3BpY1N0YXRzKHBzdGF0cywgdG9waWMpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItb3B0aW9uYWwtY2hhaW5cbiAgICAgICAgICAgIGlmICh0c3RhdHMgIT0gbnVsbCAmJiB0c3RhdHMuaW5NZXNoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBhcmFtcyA9IHRoaXMucGFyYW1zLnRvcGljc1t0b3BpY107XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgYWdhaW5zdCB0aGUgbWVzaCBkZWxpdmVyeSB3aW5kb3cgLS0gaWYgdGhlIHZhbGlkYXRlZCB0aW1lIGlzIHBhc3NlZCBhcyAwLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhlIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGJlZm9yZSB3ZSBmaW5pc2hlZCB2YWxpZGF0aW9uIGFuZCB0aHVzIGZhbGxzIHdpdGhpbiB0aGUgbWVzaFxuICAgICAgICAgICAgICAgIC8vIGRlbGl2ZXJ5IHdpbmRvdy5cbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVkVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGl2ZXJ5RGVsYXlNcyA9IG5vdyAtIHZhbGlkYXRlZFRpbWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGF0ZURlbGl2ZXJ5ID0gZGVsaXZlcnlEZWxheU1zID4gdHBhcmFtcy5tZXNoTWVzc2FnZURlbGl2ZXJpZXNXaW5kb3c7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWV0cmljcz8ub25EdXBsaWNhdGVNc2dEZWxpdmVyeSh0b3BpYywgZGVsaXZlcnlEZWxheU1zLCBpc0xhdGVEZWxpdmVyeSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xhdGVEZWxpdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcCA9IHRwYXJhbXMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzQ2FwO1xuICAgICAgICAgICAgICAgIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXMgPSBNYXRoLm1pbihjYXAsIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXMgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFuIElQIGxpc3QgZnJvbSB0aGUgdHJhY2tpbmcgbGlzdCBmb3IgYSBwZWVyLlxuICAgICAqL1xuICAgIHJlbW92ZUlQc0ZvclBlZXIoaWQsIGlwc1RvUmVtb3ZlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXBUb1JlbW92ZSBvZiBpcHNUb1JlbW92ZSkge1xuICAgICAgICAgICAgY29uc3QgcGVlclNldCA9IHRoaXMucGVlcklQcy5nZXQoaXBUb1JlbW92ZSk7XG4gICAgICAgICAgICBpZiAocGVlclNldCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGVlclNldC5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIGlmIChwZWVyU2V0LnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZWVySVBzLmRlbGV0ZShpcFRvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0b3BpYyBzdGF0cyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgaWYgdGhlIHN1cHBsaWVkIHBhcmFtZXRlcnMgc2NvcmUgdGhlXG4gICAgICogdG9waWMsIGluc2VydHMgdGhlIGRlZmF1bHQgc3RhdHMgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhvc2UuIElmIG5laXRoZXIgYXBwbHksIHJldHVybnMgTm9uZS5cbiAgICAgKi9cbiAgICBnZXRQdG9waWNTdGF0cyhwc3RhdHMsIHRvcGljKSB7XG4gICAgICAgIGxldCB0b3BpY1N0YXRzID0gcHN0YXRzLnRvcGljc1t0b3BpY107XG4gICAgICAgIGlmICh0b3BpY1N0YXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0b3BpY1N0YXRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcmFtcy50b3BpY3NbdG9waWNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRvcGljU3RhdHMgPSB7XG4gICAgICAgICAgICAgICAgaW5NZXNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBncmFmdFRpbWU6IDAsXG4gICAgICAgICAgICAgICAgbWVzaFRpbWU6IDAsXG4gICAgICAgICAgICAgICAgZmlyc3RNZXNzYWdlRGVsaXZlcmllczogMCxcbiAgICAgICAgICAgICAgICBtZXNoTWVzc2FnZURlbGl2ZXJpZXM6IDAsXG4gICAgICAgICAgICAgICAgbWVzaE1lc3NhZ2VEZWxpdmVyaWVzQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNoRmFpbHVyZVBlbmFsdHk6IDAsXG4gICAgICAgICAgICAgICAgaW52YWxpZE1lc3NhZ2VEZWxpdmVyaWVzOiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcHN0YXRzLnRvcGljc1t0b3BpY10gPSB0b3BpY1N0YXRzO1xuICAgICAgICAgICAgcmV0dXJuIHRvcGljU3RhdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVlci1zY29yZS5qcy5tYXAiXSwibmFtZXMiOlsiUmVqZWN0UmVhc29uIiwiTWFwRGVmIiwiY29tcHV0ZVNjb3JlIiwiTWVzc2FnZURlbGl2ZXJpZXMiLCJEZWxpdmVyeVJlY29yZFN0YXR1cyIsInZhbGlkYXRlUGVlclNjb3JlUGFyYW1zIiwiUGVlclNjb3JlIiwiY29uc3RydWN0b3IiLCJwYXJhbXMiLCJtZXRyaWNzIiwiY29tcG9uZW50TG9nZ2VyIiwib3B0cyIsInBlZXJTdGF0cyIsIk1hcCIsInBlZXJJUHMiLCJTZXQiLCJzY29yZUNhY2hlIiwiZGVsaXZlcnlSZWNvcmRzIiwic2NvcmVDYWNoZVZhbGlkaXR5TXMiLCJsb2ciLCJmb3JDb21wb25lbnQiLCJzaXplIiwic3RhcnQiLCJfYmFja2dyb3VuZEludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJiYWNrZ3JvdW5kIiwiZGVjYXlJbnRlcnZhbCIsInN0b3AiLCJjbGVhckludGVydmFsIiwiY2xlYXIiLCJyZWZyZXNoU2NvcmVzIiwiZ2MiLCJkdW1wUGVlclNjb3JlU3RhdHMiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsIkFycmF5IiwiZnJvbSIsImVudHJpZXMiLCJtYXAiLCJwZWVyIiwic3RhdHMiLCJtZXNzYWdlRmlyc3RTZWVuVGltZXN0YW1wTXMiLCJtc2dJZFN0ciIsImRyZWMiLCJnZXRSZWNvcmQiLCJmaXJzdFNlZW5Uc01zIiwibm93IiwiRGF0ZSIsImRlY2F5VG9aZXJvIiwiZm9yRWFjaCIsInBzdGF0cyIsImlkIiwiY29ubmVjdGVkIiwiZXhwaXJlIiwicmVtb3ZlSVBzRm9yUGVlciIsImtub3duSVBzIiwiZGVsZXRlIiwidG9waWNzIiwidG9waWMiLCJ0c3RhdHMiLCJ0cGFyYW1zIiwidW5kZWZpbmVkIiwiZmlyc3RNZXNzYWdlRGVsaXZlcmllcyIsImZpcnN0TWVzc2FnZURlbGl2ZXJpZXNEZWNheSIsIm1lc2hNZXNzYWdlRGVsaXZlcmllcyIsIm1lc2hNZXNzYWdlRGVsaXZlcmllc0RlY2F5IiwibWVzaEZhaWx1cmVQZW5hbHR5IiwibWVzaEZhaWx1cmVQZW5hbHR5RGVjYXkiLCJpbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXMiLCJpbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXNEZWNheSIsImluTWVzaCIsIm1lc2hUaW1lIiwiZ3JhZnRUaW1lIiwibWVzaE1lc3NhZ2VEZWxpdmVyaWVzQWN0aXZhdGlvbiIsIm1lc2hNZXNzYWdlRGVsaXZlcmllc0FjdGl2ZSIsImJlaGF2aW91clBlbmFsdHkiLCJiZWhhdmlvdXJQZW5hbHR5RGVjYXkiLCJzY29yZSIsInNjb3JlRm5DYWxscyIsImluYyIsImdldCIsImNhY2hlRW50cnkiLCJjYWNoZVVudGlsIiwic2NvcmVGblJ1bnMiLCJzY29yZUNhY2hlZERlbHRhIiwib2JzZXJ2ZSIsIk1hdGgiLCJhYnMiLCJzZXQiLCJhZGRQZW5hbHR5IiwicGVuYWx0eSIsInBlbmFsdHlMYWJlbCIsIm9uU2NvcmVQZW5hbHR5IiwiYWRkUGVlciIsImFkZElQIiwiaXAiLCJhZGQiLCJnZXRPckRlZmF1bHQiLCJyZW1vdmVJUCIsInBlZXJzV2l0aElQIiwicmVtb3ZlUGVlciIsInRocmVzaG9sZCIsIm1lc2hNZXNzYWdlRGVsaXZlcmllc1RocmVzaG9sZCIsImRlZmljaXQiLCJyZXRhaW5TY29yZSIsImdyYWZ0IiwiZ2V0UHRvcGljU3RhdHMiLCJwcnVuZSIsInZhbGlkYXRlTWVzc2FnZSIsImVuc3VyZVJlY29yZCIsImRlbGl2ZXJNZXNzYWdlIiwibWFya0ZpcnN0TWVzc2FnZURlbGl2ZXJ5Iiwic3RhdHVzIiwidW5rbm93biIsInZhbGlkIiwidmFsaWRhdGVkIiwicGVlcnMiLCJwIiwidG9TdHJpbmciLCJtYXJrRHVwbGljYXRlTWVzc2FnZURlbGl2ZXJ5IiwicmVqZWN0SW52YWxpZE1lc3NhZ2UiLCJtYXJrSW52YWxpZE1lc3NhZ2VEZWxpdmVyeSIsInJlamVjdE1lc3NhZ2UiLCJyZWFzb24iLCJFcnJvciIsIkJsYWNrbGlzdGVkIiwiSWdub3JlIiwiaWdub3JlZCIsImludmFsaWQiLCJkdXBsaWNhdGVNZXNzYWdlIiwiaGFzIiwiY2FwIiwiZmlyc3RNZXNzYWdlRGVsaXZlcmllc0NhcCIsIm1pbiIsIm1lc2hNZXNzYWdlRGVsaXZlcmllc0NhcCIsInZhbGlkYXRlZFRpbWUiLCJkZWxpdmVyeURlbGF5TXMiLCJpc0xhdGVEZWxpdmVyeSIsIm1lc2hNZXNzYWdlRGVsaXZlcmllc1dpbmRvdyIsIm9uRHVwbGljYXRlTXNnRGVsaXZlcnkiLCJpcHNUb1JlbW92ZSIsImlwVG9SZW1vdmUiLCJwZWVyU2V0IiwidG9waWNTdGF0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/scoreMetrics.js":
/*!*********************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/scoreMetrics.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ computeAllPeersScoreWeights: () => (/* binding */ computeAllPeersScoreWeights),\n/* harmony export */ computeScoreWeights: () => (/* binding */ computeScoreWeights)\n/* harmony export */ });\nfunction computeScoreWeights(peer, pstats, params, peerIPs, topicStrToLabel) {\n let score = 0;\n const byTopic = new Map();\n // topic stores\n Object.entries(pstats.topics).forEach(([topic, tstats])=>{\n // the topic parameters\n // Aggregate by known topicLabel or throw to 'unknown'. This prevent too high cardinality\n const topicLabel = topicStrToLabel.get(topic) ?? \"unknown\";\n const topicParams = params.topics[topic];\n if (topicParams === undefined) {\n // we are not scoring this topic\n return;\n }\n let topicScores = byTopic.get(topicLabel);\n if (topicScores == null) {\n topicScores = {\n p1w: 0,\n p2w: 0,\n p3w: 0,\n p3bw: 0,\n p4w: 0\n };\n byTopic.set(topicLabel, topicScores);\n }\n let p1w = 0;\n let p2w = 0;\n let p3w = 0;\n let p3bw = 0;\n let p4w = 0;\n // P1: time in Mesh\n if (tstats.inMesh) {\n const p1 = Math.max(tstats.meshTime / topicParams.timeInMeshQuantum, topicParams.timeInMeshCap);\n p1w += p1 * topicParams.timeInMeshWeight;\n }\n // P2: first message deliveries\n let p2 = tstats.firstMessageDeliveries;\n if (p2 > topicParams.firstMessageDeliveriesCap) {\n p2 = topicParams.firstMessageDeliveriesCap;\n }\n p2w += p2 * topicParams.firstMessageDeliveriesWeight;\n // P3: mesh message deliveries\n if (tstats.meshMessageDeliveriesActive && tstats.meshMessageDeliveries < topicParams.meshMessageDeliveriesThreshold) {\n const deficit = topicParams.meshMessageDeliveriesThreshold - tstats.meshMessageDeliveries;\n const p3 = deficit * deficit;\n p3w += p3 * topicParams.meshMessageDeliveriesWeight;\n }\n // P3b:\n // NOTE: the weight of P3b is negative (validated in validateTopicScoreParams) so this detracts\n const p3b = tstats.meshFailurePenalty;\n p3bw += p3b * topicParams.meshFailurePenaltyWeight;\n // P4: invalid messages\n // NOTE: the weight of P4 is negative (validated in validateTopicScoreParams) so this detracts\n const p4 = tstats.invalidMessageDeliveries * tstats.invalidMessageDeliveries;\n p4w += p4 * topicParams.invalidMessageDeliveriesWeight;\n // update score, mixing with topic weight\n score += (p1w + p2w + p3w + p3bw + p4w) * topicParams.topicWeight;\n topicScores.p1w += p1w;\n topicScores.p2w += p2w;\n topicScores.p3w += p3w;\n topicScores.p3bw += p3bw;\n topicScores.p4w += p4w;\n });\n // apply the topic score cap, if any\n if (params.topicScoreCap > 0 && score > params.topicScoreCap) {\n score = params.topicScoreCap;\n // Proportionally apply cap to all individual contributions\n const capF = params.topicScoreCap / score;\n for (const ws of byTopic.values()){\n ws.p1w *= capF;\n ws.p2w *= capF;\n ws.p3w *= capF;\n ws.p3bw *= capF;\n ws.p4w *= capF;\n }\n }\n let p5w = 0;\n let p6w = 0;\n let p7w = 0;\n // P5: application-specific score\n const p5 = params.appSpecificScore(peer);\n p5w += p5 * params.appSpecificWeight;\n // P6: IP colocation factor\n pstats.knownIPs.forEach((ip)=>{\n if (params.IPColocationFactorWhitelist.has(ip)) {\n return;\n }\n // P6 has a cliff (IPColocationFactorThreshold)\n // It's only applied if at least that many peers are connected to us from that source IP addr.\n // It is quadratic, and the weight is negative (validated in validatePeerScoreParams)\n const peersInIP = peerIPs.get(ip);\n const numPeersInIP = peersInIP != null ? peersInIP.size : 0;\n if (numPeersInIP > params.IPColocationFactorThreshold) {\n const surplus = numPeersInIP - params.IPColocationFactorThreshold;\n const p6 = surplus * surplus;\n p6w += p6 * params.IPColocationFactorWeight;\n }\n });\n // P7: behavioural pattern penalty\n const p7 = pstats.behaviourPenalty * pstats.behaviourPenalty;\n p7w += p7 * params.behaviourPenaltyWeight;\n score += p5w + p6w + p7w;\n return {\n byTopic,\n p5w,\n p6w,\n p7w,\n score\n };\n}\nfunction computeAllPeersScoreWeights(peerIdStrs, peerStats, params, peerIPs, topicStrToLabel) {\n const sw = {\n byTopic: new Map(),\n p5w: [],\n p6w: [],\n p7w: [],\n score: []\n };\n for (const peerIdStr of peerIdStrs){\n const pstats = peerStats.get(peerIdStr);\n if (pstats != null) {\n const swPeer = computeScoreWeights(peerIdStr, pstats, params, peerIPs, topicStrToLabel);\n for (const [topic, swPeerTopic] of swPeer.byTopic){\n let swTopic = sw.byTopic.get(topic);\n if (swTopic == null) {\n swTopic = {\n p1w: [],\n p2w: [],\n p3w: [],\n p3bw: [],\n p4w: []\n };\n sw.byTopic.set(topic, swTopic);\n }\n swTopic.p1w.push(swPeerTopic.p1w);\n swTopic.p2w.push(swPeerTopic.p2w);\n swTopic.p3w.push(swPeerTopic.p3w);\n swTopic.p3bw.push(swPeerTopic.p3bw);\n swTopic.p4w.push(swPeerTopic.p4w);\n }\n sw.p5w.push(swPeer.p5w);\n sw.p6w.push(swPeer.p6w);\n sw.p7w.push(swPeer.p7w);\n sw.score.push(swPeer.score);\n } else {\n sw.p5w.push(0);\n sw.p6w.push(0);\n sw.p7w.push(0);\n sw.score.push(0);\n }\n }\n return sw;\n} //# sourceMappingURL=scoreMetrics.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL3Njb3JlTWV0cmljcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPLFNBQVNBLG9CQUFvQkMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxlQUFlO0lBQzlFLElBQUlDLFFBQVE7SUFDWixNQUFNQyxVQUFVLElBQUlDO0lBQ3BCLGVBQWU7SUFDZkMsT0FBT0MsT0FBTyxDQUFDUixPQUFPUyxNQUFNLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLE9BQU9DLE9BQU87UUFDbEQsdUJBQXVCO1FBQ3ZCLHlGQUF5RjtRQUN6RixNQUFNQyxhQUFhVixnQkFBZ0JXLEdBQUcsQ0FBQ0gsVUFBVTtRQUNqRCxNQUFNSSxjQUFjZCxPQUFPUSxNQUFNLENBQUNFLE1BQU07UUFDeEMsSUFBSUksZ0JBQWdCQyxXQUFXO1lBQzNCLGdDQUFnQztZQUNoQztRQUNKO1FBQ0EsSUFBSUMsY0FBY1osUUFBUVMsR0FBRyxDQUFDRDtRQUM5QixJQUFJSSxlQUFlLE1BQU07WUFDckJBLGNBQWM7Z0JBQ1ZDLEtBQUs7Z0JBQ0xDLEtBQUs7Z0JBQ0xDLEtBQUs7Z0JBQ0xDLE1BQU07Z0JBQ05DLEtBQUs7WUFDVDtZQUNBakIsUUFBUWtCLEdBQUcsQ0FBQ1YsWUFBWUk7UUFDNUI7UUFDQSxJQUFJQyxNQUFNO1FBQ1YsSUFBSUMsTUFBTTtRQUNWLElBQUlDLE1BQU07UUFDVixJQUFJQyxPQUFPO1FBQ1gsSUFBSUMsTUFBTTtRQUNWLG1CQUFtQjtRQUNuQixJQUFJVixPQUFPWSxNQUFNLEVBQUU7WUFDZixNQUFNQyxLQUFLQyxLQUFLQyxHQUFHLENBQUNmLE9BQU9nQixRQUFRLEdBQUdiLFlBQVljLGlCQUFpQixFQUFFZCxZQUFZZSxhQUFhO1lBQzlGWixPQUFPTyxLQUFLVixZQUFZZ0IsZ0JBQWdCO1FBQzVDO1FBQ0EsK0JBQStCO1FBQy9CLElBQUlD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QUd0QixHQUFHLENBQUMyQixJQUFJLENBQUNILE9BQU94QixHQUFHO1lBQ3RCc0IsR0FBR3JCLEdBQUcsQ0FBQzBCLElBQUksQ0FBQ0gsT0FBT3ZCLEdBQUc7WUFDdEJxQixHQUFHeEUsS0FBSyxDQUFDNkUsSUFBSSxDQUFDSCxPQUFPMUUsS0FBSztRQUM5QixPQUNLO1lBQ0R3RSxHQUFHdkIsR0FBRyxDQUFDNEIsSUFBSSxDQUFDO1lBQ1pMLEdBQUd0QixHQUFHLENBQUMyQixJQUFJLENBQUM7WUFDWkwsR0FBR3JCLEdBQUcsQ0FBQzBCLElBQUksQ0FBQztZQUNaTCxHQUFHeEUsS0FBSyxDQUFDNkUsSUFBSSxDQUFDO1FBQ2xCO0lBQ0o7SUFDQSxPQUFPTDtBQUNYLEVBQ0Esd0NBQXdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3Njb3JlL3Njb3JlTWV0cmljcy5qcz9mNWYyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NvcmVXZWlnaHRzKHBlZXIsIHBzdGF0cywgcGFyYW1zLCBwZWVySVBzLCB0b3BpY1N0clRvTGFiZWwpIHtcbiAgICBsZXQgc2NvcmUgPSAwO1xuICAgIGNvbnN0IGJ5VG9waWMgPSBuZXcgTWFwKCk7XG4gICAgLy8gdG9waWMgc3RvcmVzXG4gICAgT2JqZWN0LmVudHJpZXMocHN0YXRzLnRvcGljcykuZm9yRWFjaCgoW3RvcGljLCB0c3RhdHNdKSA9PiB7XG4gICAgICAgIC8vIHRoZSB0b3BpYyBwYXJhbWV0ZXJzXG4gICAgICAgIC8vIEFnZ3JlZ2F0ZSBieSBrbm93biB0b3BpY0xhYmVsIG9yIHRocm93IHRvICd1bmtub3duJy4gVGhpcyBwcmV2ZW50IHRvbyBoaWdoIGNhcmRpbmFsaXR5XG4gICAgICAgIGNvbnN0IHRvcGljTGFiZWwgPSB0b3BpY1N0clRvTGFiZWwuZ2V0KHRvcGljKSA/PyAndW5rbm93bic7XG4gICAgICAgIGNvbnN0IHRvcGljUGFyYW1zID0gcGFyYW1zLnRvcGljc1t0b3BpY107XG4gICAgICAgIGlmICh0b3BpY1BhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB3ZSBhcmUgbm90IHNjb3JpbmcgdGhpcyB0b3BpY1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b3BpY1Njb3JlcyA9IGJ5VG9waWMuZ2V0KHRvcGljTGFiZWwpO1xuICAgICAgICBpZiAodG9waWNTY29yZXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgdG9waWNTY29yZXMgPSB7XG4gICAgICAgICAgICAgICAgcDF3OiAwLFxuICAgICAgICAgICAgICAgIHAydzogMCxcbiAgICAgICAgICAgICAgICBwM3c6IDAsXG4gICAgICAgICAgICAgICAgcDNidzogMCxcbiAgICAgICAgICAgICAgICBwNHc6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBieVRvcGljLnNldCh0b3BpY0xhYmVsLCB0b3BpY1Njb3Jlcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHAxdyA9IDA7XG4gICAgICAgIGxldCBwMncgPSAwO1xuICAgICAgICBsZXQgcDN3ID0gMDtcbiAgICAgICAgbGV0IHAzYncgPSAwO1xuICAgICAgICBsZXQgcDR3ID0gMDtcbiAgICAgICAgLy8gUDE6IHRpbWUgaW4gTWVzaFxuICAgICAgICBpZiAodHN0YXRzLmluTWVzaCkge1xuICAgICAgICAgICAgY29uc3QgcDEgPSBNYXRoLm1heCh0c3RhdHMubWVzaFRpbWUgLyB0b3BpY1BhcmFtcy50aW1lSW5NZXNoUXVhbnR1bSwgdG9waWNQYXJhbXMudGltZUluTWVzaENhcCk7XG4gICAgICAgICAgICBwMXcgKz0gcDEgKiB0b3BpY1BhcmFtcy50aW1lSW5NZXNoV2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFAyOiBmaXJzdCBtZXNzYWdlIGRlbGl2ZXJpZXNcbiAgICAgICAgbGV0IHAyID0gdHN0YXRzLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXM7XG4gICAgICAgIGlmIChwMiA+IHRvcGljUGFyYW1zLmZpcnN0TWVzc2FnZURlbGl2ZXJpZXNDYXApIHtcbiAgICAgICAgICAgIHAyID0gdG9waWNQYXJhbXMuZmlyc3RNZXNzYWdlRGVsaXZlcmllc0NhcDtcbiAgICAgICAgfVxuICAgICAgICBwMncgKz0gcDIgKiB0b3BpY1BhcmFtcy5maXJzdE1lc3NhZ2VEZWxpdmVyaWVzV2VpZ2h0O1xuICAgICAgICAvLyBQMzogbWVzaCBtZXNzYWdlIGRlbGl2ZXJpZXNcbiAgICAgICAgaWYgKHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXNBY3RpdmUgJiZcbiAgICAgICAgICAgIHRzdGF0cy5tZXNoTWVzc2FnZURlbGl2ZXJpZXMgPCB0b3BpY1BhcmFtcy5tZXNoTWVzc2FnZURlbGl2ZXJpZXNUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmljaXQgPSB0b3BpY1BhcmFtcy5tZXNoTWVzc2FnZURlbGl2ZXJpZXNUaHJlc2hvbGQgLSB0c3RhdHMubWVzaE1lc3NhZ2VEZWxpdmVyaWVzO1xuICAgICAgICAgICAgY29uc3QgcDMgPSBkZWZpY2l0ICogZGVmaWNpdDtcbiAgICAgICAgICAgIHAzdyArPSBwMyAqIHRvcGljUGFyYW1zLm1lc2hNZXNzYWdlRGVsaXZlcmllc1dlaWdodDtcbiAgICAgICAgfVxuICAgICAgICAvLyBQM2I6XG4gICAgICAgIC8vIE5PVEU6IHRoZSB3ZWlnaHQgb2YgUDNiIGlzIG5lZ2F0aXZlICh2YWxpZGF0ZWQgaW4gdmFsaWRhdGVUb3BpY1Njb3JlUGFyYW1zKSBzbyB0aGlzIGRldHJhY3RzXG4gICAgICAgIGNvbnN0IHAzYiA9IHRzdGF0cy5tZXNoRmFpbHVyZVBlbmFsdHk7XG4gICAgICAgIHAzYncgKz0gcDNiICogdG9waWNQYXJhbXMubWVzaEZhaWx1cmVQZW5hbHR5V2VpZ2h0O1xuICAgICAgICAvLyBQNDogaW52YWxpZCBtZXNzYWdlc1xuICAgICAgICAvLyBOT1RFOiB0aGUgd2VpZ2h0IG9mIFA0IGlzIG5lZ2F0aXZlICh2YWxpZGF0ZWQgaW4gdmFsaWRhdGVUb3BpY1Njb3JlUGFyYW1zKSBzbyB0aGlzIGRldHJhY3RzXG4gICAgICAgIGNvbnN0IHA0ID0gdHN0YXRzLmludmFsaWRNZXNzYWdlRGVsaXZlcmllcyAqIHRzdGF0cy5pbnZhbGlkTWVzc2FnZURlbGl2ZXJpZXM7XG4gICAgICAgIHA0dyArPSBwNCAqIHRvcGljUGFyYW1zLmludmFsaWRNZXNzYWdlRGVsaXZlcmllc1dlaWdodDtcbiAgICAgICAgLy8gdXBkYXRlIHNjb3JlLCBtaXhpbmcgd2l0aCB0b3BpYyB3ZWlnaHRcbiAgICAgICAgc2NvcmUgKz0gKHAxdyArIHAydyArIHAzdyArIHAzYncgKyBwNHcpICogdG9waWNQYXJhbXMudG9waWNXZWlnaHQ7XG4gICAgICAgIHRvcGljU2NvcmVzLnAxdyArPSBwMXc7XG4gICAgICAgIHRvcGljU2NvcmVzLnAydyArPSBwMnc7XG4gICAgICAgIHRvcGljU2NvcmVzLnAzdyArPSBwM3c7XG4gICAgICAgIHRvcGljU2NvcmVzLnAzYncgKz0gcDNidztcbiAgICAgICAgdG9waWNTY29yZXMucDR3ICs9IHA0dztcbiAgICB9KTtcbiAgICAvLyBhcHBseSB0aGUgdG9waWMgc2NvcmUgY2FwLCBpZiBhbnlcbiAgICBpZiAocGFyYW1zLnRvcGljU2NvcmVDYXAgPiAwICYmIHNjb3JlID4gcGFyYW1zLnRvcGljU2NvcmVDYXApIHtcbiAgICAgICAgc2NvcmUgPSBwYXJhbXMudG9waWNTY29yZUNhcDtcbiAgICAgICAgLy8gUHJvcG9ydGlvbmFsbHkgYXBwbHkgY2FwIHRvIGFsbCBpbmRpdmlkdWFsIGNvbnRyaWJ1dGlvbnNcbiAgICAgICAgY29uc3QgY2FwRiA9IHBhcmFtcy50b3BpY1Njb3JlQ2FwIC8gc2NvcmU7XG4gICAgICAgIGZvciAoY29uc3Qgd3Mgb2YgYnlUb3BpYy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgd3MucDF3ICo9IGNhcEY7XG4gICAgICAgICAgICB3cy5wMncgKj0gY2FwRjtcbiAgICAgICAgICAgIHdzLnAzdyAqPSBjYXBGO1xuICAgICAgICAgICAgd3MucDNidyAqPSBjYXBGO1xuICAgICAgICAgICAgd3MucDR3ICo9IGNhcEY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHA1dyA9IDA7XG4gICAgbGV0IHA2dyA9IDA7XG4gICAgbGV0IHA3dyA9IDA7XG4gICAgLy8gUDU6IGFwcGxpY2F0aW9uLXNwZWNpZmljIHNjb3JlXG4gICAgY29uc3QgcDUgPSBwYXJhbXMuYXBwU3BlY2lmaWNTY29yZShwZWVyKTtcbiAgICBwNXcgKz0gcDUgKiBwYXJhbXMuYXBwU3BlY2lmaWNXZWlnaHQ7XG4gICAgLy8gUDY6IElQIGNvbG9jYXRpb24gZmFjdG9yXG4gICAgcHN0YXRzLmtub3duSVBzLmZvckVhY2goKGlwKSA9PiB7XG4gICAgICAgIGlmIChwYXJhbXMuSVBDb2xvY2F0aW9uRmFjdG9yV2hpdGVsaXN0LmhhcyhpcCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBQNiBoYXMgYSBjbGlmZiAoSVBDb2xvY2F0aW9uRmFjdG9yVGhyZXNob2xkKVxuICAgICAgICAvLyBJdCdzIG9ubHkgYXBwbGllZCBpZiBhdCBsZWFzdCB0aGF0IG1hbnkgcGVlcnMgYXJlIGNvbm5lY3RlZCB0byB1cyBmcm9tIHRoYXQgc291cmNlIElQIGFkZHIuXG4gICAgICAgIC8vIEl0IGlzIHF1YWRyYXRpYywgYW5kIHRoZSB3ZWlnaHQgaXMgbmVnYXRpdmUgKHZhbGlkYXRlZCBpbiB2YWxpZGF0ZVBlZXJTY29yZVBhcmFtcylcbiAgICAgICAgY29uc3QgcGVlcnNJbklQID0gcGVlcklQcy5nZXQoaXApO1xuICAgICAgICBjb25zdCBudW1QZWVyc0luSVAgPSAocGVlcnNJbklQICE9IG51bGwpID8gcGVlcnNJbklQLnNpemUgOiAwO1xuICAgICAgICBpZiAobnVtUGVlcnNJbklQID4gcGFyYW1zLklQQ29sb2NhdGlvbkZhY3RvclRocmVzaG9sZCkge1xuICAgICAgICAgICAgY29uc3Qgc3VycGx1cyA9IG51bVBlZXJzSW5JUCAtIHBhcmFtcy5JUENvbG9jYXRpb25GYWN0b3JUaHJlc2hvbGQ7XG4gICAgICAgICAgICBjb25zdCBwNiA9IHN1cnBsdXMgKiBzdXJwbHVzO1xuICAgICAgICAgICAgcDZ3ICs9IHA2ICogcGFyYW1zLklQQ29sb2NhdGlvbkZhY3RvcldlaWdodDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIFA3OiBiZWhhdmlvdXJhbCBwYXR0ZXJuIHBlbmFsdHlcbiAgICBjb25zdCBwNyA9IHBzdGF0cy5iZWhhdmlvdXJQZW5hbHR5ICogcHN0YXRzLmJlaGF2aW91clBlbmFsdHk7XG4gICAgcDd3ICs9IHA3ICogcGFyYW1zLmJlaGF2aW91clBlbmFsdHlXZWlnaHQ7XG4gICAgc2NvcmUgKz0gcDV3ICsgcDZ3ICsgcDd3O1xuICAgIHJldHVybiB7XG4gICAgICAgIGJ5VG9waWMsXG4gICAgICAgIHA1dyxcbiAgICAgICAgcDZ3LFxuICAgICAgICBwN3csXG4gICAgICAgIHNjb3JlXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQWxsUGVlcnNTY29yZVdlaWdodHMocGVlcklkU3RycywgcGVlclN0YXRzLCBwYXJhbXMsIHBlZXJJUHMsIHRvcGljU3RyVG9MYWJlbCkge1xuICAgIGNvbnN0IHN3ID0ge1xuICAgICAgICBieVRvcGljOiBuZXcgTWFwKCksXG4gICAgICAgIHA1dzogW10sXG4gICAgICAgIHA2dzogW10sXG4gICAgICAgIHA3dzogW10sXG4gICAgICAgIHNjb3JlOiBbXVxuICAgIH07XG4gICAgZm9yIChjb25zdCBwZWVySWRTdHIgb2YgcGVlcklkU3Rycykge1xuICAgICAgICBjb25zdCBwc3RhdHMgPSBwZWVyU3RhdHMuZ2V0KHBlZXJJZFN0cik7XG4gICAgICAgIGlmIChwc3RhdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc3dQZWVyID0gY29tcHV0ZVNjb3JlV2VpZ2h0cyhwZWVySWRTdHIsIHBzdGF0cywgcGFyYW1zLCBwZWVySVBzLCB0b3BpY1N0clRvTGFiZWwpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbdG9waWMsIHN3UGVlclRvcGljXSBvZiBzd1BlZXIuYnlUb3BpYykge1xuICAgICAgICAgICAgICAgIGxldCBzd1RvcGljID0gc3cuYnlUb3BpYy5nZXQodG9waWMpO1xuICAgICAgICAgICAgICAgIGlmIChzd1RvcGljID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dUb3BpYyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAxdzogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBwMnc6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcDN3OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAzYnc6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcDR3OiBbXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzdy5ieVRvcGljLnNldCh0b3BpYywgc3dUb3BpYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN3VG9waWMucDF3LnB1c2goc3dQZWVyVG9waWMucDF3KTtcbiAgICAgICAgICAgICAgICBzd1RvcGljLnAydy5wdXNoKHN3UGVlclRvcGljLnAydyk7XG4gICAgICAgICAgICAgICAgc3dUb3BpYy5wM3cucHVzaChzd1BlZXJUb3BpYy5wM3cpO1xuICAgICAgICAgICAgICAgIHN3VG9waWMucDNidy5wdXNoKHN3UGVlclRvcGljLnAzYncpO1xuICAgICAgICAgICAgICAgIHN3VG9waWMucDR3LnB1c2goc3dQZWVyVG9waWMucDR3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3LnA1dy5wdXNoKHN3UGVlci5wNXcpO1xuICAgICAgICAgICAgc3cucDZ3LnB1c2goc3dQZWVyLnA2dyk7XG4gICAgICAgICAgICBzdy5wN3cucHVzaChzd1BlZXIucDd3KTtcbiAgICAgICAgICAgIHN3LnNjb3JlLnB1c2goc3dQZWVyLnNjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3LnA1dy5wdXNoKDApO1xuICAgICAgICAgICAgc3cucDZ3LnB1c2goMCk7XG4gICAgICAgICAgICBzdy5wN3cucHVzaCgwKTtcbiAgICAgICAgICAgIHN3LnNjb3JlLnB1c2goMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN3O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NvcmVNZXRyaWNzLmpzLm1hcCJdLCJuYW1lcyI6WyJjb21wdXRlU2NvcmVXZWlnaHRzIiwicGVlciIsInBzdGF0cyIsInBhcmFtcyIsInBlZXJJUHMiLCJ0b3BpY1N0clRvTGFiZWwiLCJzY29yZSIsImJ5VG9waWMiLCJNYXAiLCJPYmplY3QiLCJlbnRyaWVzIiwidG9waWNzIiwiZm9yRWFjaCIsInRvcGljIiwidHN0YXRzIiwidG9waWNMYWJlbCIsImdldCIsInRvcGljUGFyYW1zIiwidW5kZWZpbmVkIiwidG9waWNTY29yZXMiLCJwMXciLCJwMnciLCJwM3ciLCJwM2J3IiwicDR3Iiwic2V0IiwiaW5NZXNoIiwicDEiLCJNYXRoIiwibWF4IiwibWVzaFRpbWUiLCJ0aW1lSW5NZXNoUXVhbnR1bSIsInRpbWVJbk1lc2hDYXAiLCJ0aW1lSW5NZXNoV2VpZ2h0IiwicDIiLCJmaXJzdE1lc3NhZ2VEZWxpdmVyaWVzIiwiZmlyc3RNZXNzYWdlRGVsaXZlcmllc0NhcCIsImZpcnN0TWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQiLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNBY3RpdmUiLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXMiLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNUaHJlc2hvbGQiLCJkZWZpY2l0IiwicDMiLCJtZXNoTWVzc2FnZURlbGl2ZXJpZXNXZWlnaHQiLCJwM2IiLCJtZXNoRmFpbHVyZVBlbmFsdHkiLCJtZXNoRmFpbHVyZVBlbmFsdHlXZWlnaHQiLCJwNCIsImludmFsaWRNZXNzYWdlRGVsaXZlcmllcyIsImludmFsaWRNZXNzYWdlRGVsaXZlcmllc1dlaWdodCIsInRvcGljV2VpZ2h0IiwidG9waWNTY29yZUNhcCIsImNhcEYiLCJ3cyIsInZhbHVlcyIsInA1dyIsInA2dyIsInA3dyIsInA1IiwiYXBwU3BlY2lmaWNTY29yZSIsImFwcFNwZWNpZmljV2VpZ2h0Iiwia25vd25JUHMiLCJpcCIsIklQQ29sb2NhdGlvbkZhY3RvcldoaXRlbGlzdCIsImhhcyIsInBlZXJzSW5JUCIsIm51bVBlZXJzSW5JUCIsInNpemUiLCJJUENvbG9jYXRpb25GYWN0b3JUaHJlc2hvbGQiLCJzdXJwbHVzIiwicDYiLCJJUENvbG9jYXRpb25GYWN0b3JXZWlnaHQiLCJwNyIsImJlaGF2aW91clBlbmFsdHkiLCJiZWhhdmlvdXJQZW5hbHR5V2VpZ2h0IiwiY29tcHV0ZUFsbFBlZXJzU2NvcmVXZWlnaHRzIiwicGVlcklkU3RycyIsInBlZXJTdGF0cyIsInN3IiwicGVlcklkU3RyIiwic3dQZWVyIiwic3dQZWVyVG9waWMiLCJzd1RvcGljIiwicHVzaCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/scoreMetrics.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.js":
/*!*********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.js ***!
\*********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ InboundStream: () => (/* binding */ InboundStream),\n/* harmony export */ OutboundStream: () => (/* binding */ OutboundStream)\n/* harmony export */ });\n/* harmony import */ var it_length_prefixed__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! it-length-prefixed */ \"(ssr)/./node_modules/it-length-prefixed/dist/src/index.js\");\n/* harmony import */ var it_pipe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! it-pipe */ \"(ssr)/./node_modules/it-pipe/dist/src/index.js\");\n/* harmony import */ var it_pushable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! it-pushable */ \"(ssr)/./node_modules/it-pushable/dist/src/index.js\");\n\n\n\nclass OutboundStream {\n constructor(rawStream, errCallback, opts){\n this.rawStream = rawStream;\n this.pushable = (0,it_pushable__WEBPACK_IMPORTED_MODULE_2__.pushable)();\n this.closeController = new AbortController();\n this.maxBufferSize = opts.maxBufferSize ?? Infinity;\n this.closeController.signal.addEventListener(\"abort\", ()=>{\n rawStream.close().catch((err)=>{\n rawStream.abort(err);\n });\n });\n (0,it_pipe__WEBPACK_IMPORTED_MODULE_1__.pipe)(this.pushable, this.rawStream).catch(errCallback);\n }\n get protocol() {\n // TODO remove this non-nullish assertion after https://github.com/libp2p/js-libp2p-interfaces/pull/265 is incorporated\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.rawStream.protocol;\n }\n push(data) {\n if (this.pushable.readableLength > this.maxBufferSize) {\n throw Error(`OutboundStream buffer full, size > ${this.maxBufferSize}`);\n }\n this.pushable.push(it_length_prefixed__WEBPACK_IMPORTED_MODULE_0__.encode.single(data));\n }\n /**\n * Same to push() but this is prefixed data so no need to encode length prefixed again\n */ pushPrefixed(data) {\n if (this.pushable.readableLength > this.maxBufferSize) {\n throw Error(`OutboundStream buffer full, size > ${this.maxBufferSize}`);\n }\n this.pushable.push(data);\n }\n async close() {\n this.closeController.abort();\n // similar to pushable.end() but clear the internal buffer\n await this.pushable.return();\n }\n}\nclass InboundStream {\n constructor(rawStream, opts = {}){\n this.rawStream = rawStream;\n this.closeController = new AbortController();\n this.closeController.signal.addEventListener(\"abort\", ()=>{\n rawStream.close().catch((err)=>{\n rawStream.abort(err);\n });\n });\n this.source = (0,it_pipe__WEBPACK_IMPORTED_MODULE_1__.pipe)(this.rawStream, (source)=>(0,it_length_prefixed__WEBPACK_IMPORTED_MODULE_0__.decode)(source, opts));\n }\n async close() {\n this.closeController.abort();\n }\n} //# sourceMappingURL=stream.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3N0cmVhbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFvRDtBQUNyQjtBQUNRO0FBQ2hDLE1BQU1JO0lBS1RDLFlBQVlDLFNBQVMsRUFBRUMsV0FBVyxFQUFFQyxJQUFJLENBQUU7UUFDdEMsSUFBSSxDQUFDRixTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0gsUUFBUSxHQUFHQSxxREFBUUE7UUFDeEIsSUFBSSxDQUFDTSxlQUFlLEdBQUcsSUFBSUM7UUFDM0IsSUFBSSxDQUFDQyxhQUFhLEdBQUdILEtBQUtHLGFBQWEsSUFBSUM7UUFDM0MsSUFBSSxDQUFDSCxlQUFlLENBQUNJLE1BQU0sQ0FBQ0MsZ0JBQWdCLENBQUMsU0FBUztZQUNsRFIsVUFBVVMsS0FBSyxHQUNWQyxLQUFLLENBQUNDLENBQUFBO2dCQUNQWCxVQUFVWSxLQUFLLENBQUNEO1lBQ3BCO1FBQ0o7UUFDQWYsNkNBQUlBLENBQUMsSUFBSSxDQUFDQyxRQUFRLEVBQUUsSUFBSSxDQUFDRyxTQUFTLEVBQUVVLEtBQUssQ0FBQ1Q7SUFDOUM7SUFDQSxJQUFJWSxXQUFXO1FBQ1gsdUhBQXVIO1FBQ3ZILG9FQUFvRTtRQUNwRSxPQUFPLElBQUksQ0FBQ2IsU0FBUyxDQUFDYSxRQUFRO0lBQ2xDO0lBQ0FDLEtBQUtDLElBQUksRUFBRTtRQUNQLElBQUksSUFBSSxDQUFDbEIsUUFBUSxDQUFDbUIsY0FBYyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxFQUFFO1lBQ25ELE1BQU1ZLE1BQU0sQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUNaLGFBQWEsQ0FBQyxDQUFDO1FBQzFFO1FBQ0EsSUFBSSxDQUFDUixRQUFRLENBQUNpQixJQUFJLENBQUNwQixzREFBTUEsQ0FBQ3dCLE1BQU0sQ0FBQ0g7SUFDckM7SUFDQTs7S0FFQyxHQUNESSxhQUFhSixJQUFJLEVBQUU7UUFDZixJQUFJLElBQUksQ0FBQ2xCLFFBQVEsQ0FBQ21CLGNBQWMsR0FBRyxJQUFJLENBQUNYLGFBQWEsRUFBRTtZQUNuRCxNQUFNWSxNQUFNLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDWixhQUFhLENBQUMsQ0FBQztRQUMxRTtRQUNBLElBQUksQ0FBQ1IsUUFBUSxDQUFDaUIsSUFBSSxDQUFDQztJQUN2QjtJQUNBLE1BQU1OLFFBQVE7UUFDVixJQUFJLENBQUNOLGVBQWUsQ0FBQ1MsS0FBSztRQUMxQiwwREFBMEQ7UUFDMUQsTUFBTSxJQUFJLENBQUNmLFFBQVEsQ0FBQ3VCLE1BQU07SUFDOUI7QUFDSjtBQUNPLE1BQU1DO0lBSVR0QixZQUFZQyxTQUFTLEVBQUVFLE9BQU8sQ0FBQyxDQUFDLENBQUU7UUFDOUIsSUFBSSxDQUFDRixTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0csZUFBZSxHQUFHLElBQUlDO1FBQzNCLElBQUksQ0FBQ0QsZUFBZSxDQUFDSSxNQUFNLENBQUNDLGdCQUFnQixDQUFDLFNBQVM7WUFDbERSLFVBQVVTLEtBQUssR0FDVkMsS0FBSyxDQUFDQyxDQUFBQTtnQkFDUFgsVUFBVVksS0FBSyxDQUFDRDtZQUNwQjtRQUNKO1FBQ0EsSUFBSSxDQUFDVyxNQUFNLEdBQUcxQiw2Q0FBSUEsQ0FBQyxJQUFJLENBQUNJLFNBQVMsRUFBRSxDQUFDc0IsU0FBVzNCLDBEQUFNQSxDQUFDMkIsUUFBUXBCO0lBQ2xFO0lBQ0EsTUFBTU8sUUFBUTtRQUNWLElBQUksQ0FBQ04sZUFBZSxDQUFDUyxLQUFLO0lBQzlCO0FBQ0osRUFDQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvc3RyZWFtLmpzP2U2N2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5jb2RlLCBkZWNvZGUgfSBmcm9tICdpdC1sZW5ndGgtcHJlZml4ZWQnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ2l0LXBpcGUnO1xuaW1wb3J0IHsgcHVzaGFibGUgfSBmcm9tICdpdC1wdXNoYWJsZSc7XG5leHBvcnQgY2xhc3MgT3V0Ym91bmRTdHJlYW0ge1xuICAgIHJhd1N0cmVhbTtcbiAgICBwdXNoYWJsZTtcbiAgICBjbG9zZUNvbnRyb2xsZXI7XG4gICAgbWF4QnVmZmVyU2l6ZTtcbiAgICBjb25zdHJ1Y3RvcihyYXdTdHJlYW0sIGVyckNhbGxiYWNrLCBvcHRzKSB7XG4gICAgICAgIHRoaXMucmF3U3RyZWFtID0gcmF3U3RyZWFtO1xuICAgICAgICB0aGlzLnB1c2hhYmxlID0gcHVzaGFibGUoKTtcbiAgICAgICAgdGhpcy5jbG9zZUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIHRoaXMubWF4QnVmZmVyU2l6ZSA9IG9wdHMubWF4QnVmZmVyU2l6ZSA/PyBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5jbG9zZUNvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuICAgICAgICAgICAgcmF3U3RyZWFtLmNsb3NlKClcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICByYXdTdHJlYW0uYWJvcnQoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcGlwZSh0aGlzLnB1c2hhYmxlLCB0aGlzLnJhd1N0cmVhbSkuY2F0Y2goZXJyQ2FsbGJhY2spO1xuICAgIH1cbiAgICBnZXQgcHJvdG9jb2woKSB7XG4gICAgICAgIC8vIFRPRE8gcmVtb3ZlIHRoaXMgbm9uLW51bGxpc2ggYXNzZXJ0aW9uIGFmdGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJwMnAvanMtbGlicDJwLWludGVyZmFjZXMvcHVsbC8yNjUgaXMgaW5jb3Jwb3JhdGVkXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLnJhd1N0cmVhbS5wcm90b2NvbDtcbiAgICB9XG4gICAgcHVzaChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLnB1c2hhYmxlLnJlYWRhYmxlTGVuZ3RoID4gdGhpcy5tYXhCdWZmZXJTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgT3V0Ym91bmRTdHJlYW0gYnVmZmVyIGZ1bGwsIHNpemUgPiAke3RoaXMubWF4QnVmZmVyU2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1c2hhYmxlLnB1c2goZW5jb2RlLnNpbmdsZShkYXRhKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNhbWUgdG8gcHVzaCgpIGJ1dCB0aGlzIGlzIHByZWZpeGVkIGRhdGEgc28gbm8gbmVlZCB0byBlbmNvZGUgbGVuZ3RoIHByZWZpeGVkIGFnYWluXG4gICAgICovXG4gICAgcHVzaFByZWZpeGVkKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMucHVzaGFibGUucmVhZGFibGVMZW5ndGggPiB0aGlzLm1heEJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBPdXRib3VuZFN0cmVhbSBidWZmZXIgZnVsbCwgc2l6ZSA+ICR7dGhpcy5tYXhCdWZmZXJTaXplfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHVzaGFibGUucHVzaChkYXRhKTtcbiAgICB9XG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIC8vIHNpbWlsYXIgdG8gcHVzaGFibGUuZW5kKCkgYnV0IGNsZWFyIHRoZSBpbnRlcm5hbCBidWZmZXJcbiAgICAgICAgYXdhaXQgdGhpcy5wdXNoYWJsZS5yZXR1cm4oKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgSW5ib3VuZFN0cmVhbSB7XG4gICAgc291cmNlO1xuICAgIHJhd1N0cmVhbTtcbiAgICBjbG9zZUNvbnRyb2xsZXI7XG4gICAgY29uc3RydWN0b3IocmF3U3RyZWFtLCBvcHRzID0ge30pIHtcbiAgICAgICAgdGhpcy5yYXdTdHJlYW0gPSByYXdTdHJlYW07XG4gICAgICAgIHRoaXMuY2xvc2VDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB0aGlzLmNsb3NlQ29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICByYXdTdHJlYW0uY2xvc2UoKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHJhd1N0cmVhbS5hYm9ydChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHBpcGUodGhpcy5yYXdTdHJlYW0sIChzb3VyY2UpID0+IGRlY29kZShzb3VyY2UsIG9wdHMpKTtcbiAgICB9XG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyZWFtLmpzLm1hcCJdLCJuYW1lcyI6WyJlbmNvZGUiLCJkZWNvZGUiLCJwaXBlIiwicHVzaGFibGUiLCJPdXRib3VuZFN0cmVhbSIsImNvbnN0cnVjdG9yIiwicmF3U3RyZWFtIiwiZXJyQ2FsbGJhY2siLCJvcHRzIiwiY2xvc2VDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwibWF4QnVmZmVyU2l6ZSIsIkluZmluaXR5Iiwic2lnbmFsIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsb3NlIiwiY2F0Y2giLCJlcnIiLCJhYm9ydCIsInByb3RvY29sIiwicHVzaCIsImRhdGEiLCJyZWFkYWJsZUxlbmd0aCIsIkVycm9yIiwic2luZ2xlIiwicHVzaFByZWZpeGVkIiwicmV0dXJuIiwiSW5ib3VuZFN0cmVhbSIsInNvdXJjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.js":
/*!*********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.js ***!
\*********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IWantTracer: () => (/* binding */ IWantTracer)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js\");\n\n/**\n * IWantTracer is an internal tracer that tracks IWANT requests in order to penalize\n * peers who don't follow up on IWANT requests after an IHAVE advertisement.\n * The tracking of promises is probabilistic to avoid using too much memory.\n *\n * Note: Do not confuse these 'promises' with JS Promise objects.\n * These 'promises' are merely expectations of a peer's behavior.\n */ class IWantTracer {\n constructor(gossipsubIWantFollowupMs, msgIdToStrFn, metrics){\n /**\n * Promises to deliver a message\n * Map per message id, per peer, promise expiration time\n */ this.promises = new Map();\n /**\n * First request time by msgId. Used for metrics to track expire times.\n * Necessary to know if peers are actually breaking promises or simply sending them a bit later\n */ this.requestMsByMsg = new Map();\n this.gossipsubIWantFollowupMs = gossipsubIWantFollowupMs;\n this.msgIdToStrFn = msgIdToStrFn;\n this.metrics = metrics;\n this.requestMsByMsgExpire = 10 * gossipsubIWantFollowupMs;\n }\n get size() {\n return this.promises.size;\n }\n get requestMsByMsgSize() {\n return this.requestMsByMsg.size;\n }\n /**\n * Track a promise to deliver a message from a list of msgIds we are requesting\n */ addPromise(from, msgIds) {\n // pick msgId randomly from the list\n const ix = Math.floor(Math.random() * msgIds.length);\n const msgId = msgIds[ix];\n const msgIdStr = this.msgIdToStrFn(msgId);\n let expireByPeer = this.promises.get(msgIdStr);\n if (expireByPeer == null) {\n expireByPeer = new Map();\n this.promises.set(msgIdStr, expireByPeer);\n }\n const now = Date.now();\n // If a promise for this message id and peer already exists we don't update the expiry\n if (!expireByPeer.has(from)) {\n expireByPeer.set(from, now + this.gossipsubIWantFollowupMs);\n if (this.metrics != null) {\n this.metrics.iwantPromiseStarted.inc(1);\n if (!this.requestMsByMsg.has(msgIdStr)) {\n this.requestMsByMsg.set(msgIdStr, now);\n }\n }\n }\n }\n /**\n * Returns the number of broken promises for each peer who didn't follow up on an IWANT request.\n *\n * This should be called not too often relative to the expire times, since it iterates over the whole data.\n */ getBrokenPromises() {\n const now = Date.now();\n const result = new Map();\n let brokenPromises = 0;\n this.promises.forEach((expireByPeer, msgId)=>{\n expireByPeer.forEach((expire, p)=>{\n // the promise has been broken\n if (expire < now) {\n // add 1 to result\n result.set(p, (result.get(p) ?? 0) + 1);\n // delete from tracked promises\n expireByPeer.delete(p);\n // for metrics\n brokenPromises++;\n }\n });\n // clean up empty promises for a msgId\n if (expireByPeer.size === 0) {\n this.promises.delete(msgId);\n }\n });\n this.metrics?.iwantPromiseBroken.inc(brokenPromises);\n return result;\n }\n /**\n * Someone delivered a message, stop tracking promises for it\n */ deliverMessage(msgIdStr, isDuplicate = false) {\n this.trackMessage(msgIdStr);\n const expireByPeer = this.promises.get(msgIdStr);\n // Expired promise, check requestMsByMsg\n if (expireByPeer != null) {\n this.promises.delete(msgIdStr);\n if (this.metrics != null) {\n this.metrics.iwantPromiseResolved.inc(1);\n if (isDuplicate) this.metrics.iwantPromiseResolvedFromDuplicate.inc(1);\n this.metrics.iwantPromiseResolvedPeers.inc(expireByPeer.size);\n }\n }\n }\n /**\n * A message got rejected, so we can stop tracking promises and let the score penalty apply from invalid message delivery,\n * unless its an obviously invalid message.\n */ rejectMessage(msgIdStr, reason) {\n this.trackMessage(msgIdStr);\n // A message got rejected, so we can stop tracking promises and let the score penalty apply.\n // With the expection of obvious invalid messages\n switch(reason){\n case _types_js__WEBPACK_IMPORTED_MODULE_0__.RejectReason.Error:\n return;\n default:\n break;\n }\n this.promises.delete(msgIdStr);\n }\n clear() {\n this.promises.clear();\n }\n prune() {\n const maxMs = Date.now() - this.requestMsByMsgExpire;\n let count = 0;\n for (const [k, v] of this.requestMsByMsg.entries()){\n if (v < maxMs) {\n // messages that stay too long in the requestMsByMsg map, delete\n this.requestMsByMsg.delete(k);\n count++;\n } else {\n break;\n }\n }\n this.metrics?.iwantMessagePruned.inc(count);\n }\n trackMessage(msgIdStr) {\n if (this.metrics != null) {\n const requestMs = this.requestMsByMsg.get(msgIdStr);\n if (requestMs !== undefined) {\n this.metrics.iwantPromiseDeliveryTime.observe((Date.now() - requestMs) / 1000);\n this.requestMsByMsg.delete(msgIdStr);\n }\n }\n }\n} //# sourceMappingURL=tracer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3RyYWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEwQztBQUMxQzs7Ozs7OztDQU9DLEdBQ00sTUFBTUM7SUFlVEMsWUFBWUMsd0JBQXdCLEVBQUVDLFlBQVksRUFBRUMsT0FBTyxDQUFFO1FBWDdEOzs7S0FHQyxRQUNEQyxXQUFXLElBQUlDO1FBQ2Y7OztLQUdDLFFBQ0RDLGlCQUFpQixJQUFJRDtRQUdqQixJQUFJLENBQUNKLHdCQUF3QixHQUFHQTtRQUNoQyxJQUFJLENBQUNDLFlBQVksR0FBR0E7UUFDcEIsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDSSxvQkFBb0IsR0FBRyxLQUFLTjtJQUNyQztJQUNBLElBQUlPLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQ0osUUFBUSxDQUFDSSxJQUFJO0lBQzdCO0lBQ0EsSUFBSUMscUJBQXFCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDSCxjQUFjLENBQUNFLElBQUk7SUFDbkM7SUFDQTs7S0FFQyxHQUNERSxXQUFXQyxJQUFJLEVBQUVDLE1BQU0sRUFBRTtRQUNyQixvQ0FBb0M7UUFDcEMsTUFBTUMsS0FBS0MsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxNQUFNLEtBQUtKLE9BQU9LLE1BQU07UUFDbkQsTUFBTUMsUUFBUU4sTUFBTSxDQUFDQyxHQUFHO1FBQ3hCLE1BQU1NLFdBQVcsSUFBSSxDQUFDakIsWUFBWSxDQUFDZ0I7UUFDbkMsSUFBSUUsZUFBZSxJQUFJLENBQUNoQixRQUFRLENBQUNpQixHQUFHLENBQUNGO1FBQ3JDLElBQUlDLGdCQUFnQixNQUFNO1lBQ3RCQSxlQUFlLElBQUlmO1lBQ25CLElBQUksQ0FBQ0QsUUFBUSxDQUFDa0IsR0FBRyxDQUFDSCxVQUFVQztRQUNoQztRQUNBLE1BQU1HLE1BQU1DLEtBQUtELEdBQUc7UUFDcEIsc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQ0gsYUFBYUss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QUksQ0FBQzdDLE9BQU8sRUFBRWlELG1CQUFtQnpCLElBQUlxQjtJQUN6QztJQUNBVixhQUFhbkIsUUFBUSxFQUFFO1FBQ25CLElBQUksSUFBSSxDQUFDaEIsT0FBTyxJQUFJLE1BQU07WUFDdEIsTUFBTWtELFlBQVksSUFBSSxDQUFDL0MsY0FBYyxDQUFDZSxHQUFHLENBQUNGO1lBQzFDLElBQUlrQyxjQUFjQyxXQUFXO2dCQUN6QixJQUFJLENBQUNuRCxPQUFPLENBQUNvRCx3QkFBd0IsQ0FBQ0MsT0FBTyxDQUFDLENBQUNoQyxLQUFLRCxHQUFHLEtBQUs4QixTQUFRLElBQUs7Z0JBQ3pFLElBQUksQ0FBQy9DLGNBQWMsQ0FBQzRCLE1BQU0sQ0FBQ2Y7WUFDL0I7UUFDSjtJQUNKO0FBQ0osRUFDQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvdHJhY2VyLmpzP2Y0ZmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVqZWN0UmVhc29uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG4vKipcbiAqIElXYW50VHJhY2VyIGlzIGFuIGludGVybmFsIHRyYWNlciB0aGF0IHRyYWNrcyBJV0FOVCByZXF1ZXN0cyBpbiBvcmRlciB0byBwZW5hbGl6ZVxuICogcGVlcnMgd2hvIGRvbid0IGZvbGxvdyB1cCBvbiBJV0FOVCByZXF1ZXN0cyBhZnRlciBhbiBJSEFWRSBhZHZlcnRpc2VtZW50LlxuICogVGhlIHRyYWNraW5nIG9mIHByb21pc2VzIGlzIHByb2JhYmlsaXN0aWMgdG8gYXZvaWQgdXNpbmcgdG9vIG11Y2ggbWVtb3J5LlxuICpcbiAqIE5vdGU6IERvIG5vdCBjb25mdXNlIHRoZXNlICdwcm9taXNlcycgd2l0aCBKUyBQcm9taXNlIG9iamVjdHMuXG4gKiBUaGVzZSAncHJvbWlzZXMnIGFyZSBtZXJlbHkgZXhwZWN0YXRpb25zIG9mIGEgcGVlcidzIGJlaGF2aW9yLlxuICovXG5leHBvcnQgY2xhc3MgSVdhbnRUcmFjZXIge1xuICAgIGdvc3NpcHN1YklXYW50Rm9sbG93dXBNcztcbiAgICBtc2dJZFRvU3RyRm47XG4gICAgbWV0cmljcztcbiAgICAvKipcbiAgICAgKiBQcm9taXNlcyB0byBkZWxpdmVyIGEgbWVzc2FnZVxuICAgICAqIE1hcCBwZXIgbWVzc2FnZSBpZCwgcGVyIHBlZXIsIHByb21pc2UgZXhwaXJhdGlvbiB0aW1lXG4gICAgICovXG4gICAgcHJvbWlzZXMgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogRmlyc3QgcmVxdWVzdCB0aW1lIGJ5IG1zZ0lkLiBVc2VkIGZvciBtZXRyaWNzIHRvIHRyYWNrIGV4cGlyZSB0aW1lcy5cbiAgICAgKiBOZWNlc3NhcnkgdG8ga25vdyBpZiBwZWVycyBhcmUgYWN0dWFsbHkgYnJlYWtpbmcgcHJvbWlzZXMgb3Igc2ltcGx5IHNlbmRpbmcgdGhlbSBhIGJpdCBsYXRlclxuICAgICAqL1xuICAgIHJlcXVlc3RNc0J5TXNnID0gbmV3IE1hcCgpO1xuICAgIHJlcXVlc3RNc0J5TXNnRXhwaXJlO1xuICAgIGNvbnN0cnVjdG9yKGdvc3NpcHN1YklXYW50Rm9sbG93dXBNcywgbXNnSWRUb1N0ckZuLCBtZXRyaWNzKSB7XG4gICAgICAgIHRoaXMuZ29zc2lwc3ViSVdhbnRGb2xsb3d1cE1zID0gZ29zc2lwc3ViSVdhbnRGb2xsb3d1cE1zO1xuICAgICAgICB0aGlzLm1zZ0lkVG9TdHJGbiA9IG1zZ0lkVG9TdHJGbjtcbiAgICAgICAgdGhpcy5tZXRyaWNzID0gbWV0cmljcztcbiAgICAgICAgdGhpcy5yZXF1ZXN0TXNCeU1zZ0V4cGlyZSA9IDEwICogZ29zc2lwc3ViSVdhbnRGb2xsb3d1cE1zO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZXMuc2l6ZTtcbiAgICB9XG4gICAgZ2V0IHJlcXVlc3RNc0J5TXNnU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdE1zQnlNc2cuc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhY2sgYSBwcm9taXNlIHRvIGRlbGl2ZXIgYSBtZXNzYWdlIGZyb20gYSBsaXN0IG9mIG1zZ0lkcyB3ZSBhcmUgcmVxdWVzdGluZ1xuICAgICAqL1xuICAgIGFkZFByb21pc2UoZnJvbSwgbXNnSWRzKSB7XG4gICAgICAgIC8vIHBpY2sgbXNnSWQgcmFuZG9tbHkgZnJvbSB0aGUgbGlzdFxuICAgICAgICBjb25zdCBpeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1zZ0lkcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBtc2dJZCA9IG1zZ0lkc1tpeF07XG4gICAgICAgIGNvbnN0IG1zZ0lkU3RyID0gdGhpcy5tc2dJZFRvU3RyRm4obXNnSWQpO1xuICAgICAgICBsZXQgZXhwaXJlQnlQZWVyID0gdGhpcy5wcm9taXNlcy5nZXQobXNnSWRTdHIpO1xuICAgICAgICBpZiAoZXhwaXJlQnlQZWVyID09IG51bGwpIHtcbiAgICAgICAgICAgIGV4cGlyZUJ5UGVlciA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMucHJvbWlzZXMuc2V0KG1zZ0lkU3RyLCBleHBpcmVCeVBlZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIC8vIElmIGEgcHJvbWlzZSBmb3IgdGhpcyBtZXNzYWdlIGlkIGFuZCBwZWVyIGFscmVhZHkgZXhpc3RzIHdlIGRvbid0IHVwZGF0ZSB0aGUgZXhwaXJ5XG4gICAgICAgIGlmICghZXhwaXJlQnlQZWVyLmhhcyhmcm9tKSkge1xuICAgICAgICAgICAgZXhwaXJlQnlQZWVyLnNldChmcm9tLCBub3cgKyB0aGlzLmdvc3NpcHN1YklXYW50Rm9sbG93dXBNcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRyaWNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3MuaXdhbnRQcm9taXNlU3RhcnRlZC5pbmMoMSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RNc0J5TXNnLmhhcyhtc2dJZFN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0TXNCeU1zZy5zZXQobXNnSWRTdHIsIG5vdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBicm9rZW4gcHJvbWlzZXMgZm9yIGVhY2ggcGVlciB3aG8gZGlkbid0IGZvbGxvdyB1cCBvbiBhbiBJV0FOVCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG5vdCB0b28gb2Z0ZW4gcmVsYXRpdmUgdG8gdGhlIGV4cGlyZSB0aW1lcywgc2luY2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgd2hvbGUgZGF0YS5cbiAgICAgKi9cbiAgICBnZXRCcm9rZW5Qcm9taXNlcygpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgICAgICBsZXQgYnJva2VuUHJvbWlzZXMgPSAwO1xuICAgICAgICB0aGlzLnByb21pc2VzLmZvckVhY2goKGV4cGlyZUJ5UGVlciwgbXNnSWQpID0+IHtcbiAgICAgICAgICAgIGV4cGlyZUJ5UGVlci5mb3JFYWNoKChleHBpcmUsIHApID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBoYXMgYmVlbiBicm9rZW5cbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJlIDwgbm93KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCAxIHRvIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KHAsIChyZXN1bHQuZ2V0KHApID8/IDApICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBmcm9tIHRyYWNrZWQgcHJvbWlzZXNcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJlQnlQZWVyLmRlbGV0ZShwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgYnJva2VuUHJvbWlzZXMrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwIGVtcHR5IHByb21pc2VzIGZvciBhIG1zZ0lkXG4gICAgICAgICAgICBpZiAoZXhwaXJlQnlQZWVyLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2VzLmRlbGV0ZShtc2dJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1ldHJpY3M/Lml3YW50UHJvbWlzZUJyb2tlbi5pbmMoYnJva2VuUHJvbWlzZXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTb21lb25lIGRlbGl2ZXJlZCBhIG1lc3NhZ2UsIHN0b3AgdHJhY2tpbmcgcHJvbWlzZXMgZm9yIGl0XG4gICAgICovXG4gICAgZGVsaXZlck1lc3NhZ2UobXNnSWRTdHIsIGlzRHVwbGljYXRlID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy50cmFja01lc3NhZ2UobXNnSWRTdHIpO1xuICAgICAgICBjb25zdCBleHBpcmVCeVBlZXIgPSB0aGlzLnByb21pc2VzLmdldChtc2dJZFN0cik7XG4gICAgICAgIC8vIEV4cGlyZWQgcHJvbWlzZSwgY2hlY2sgcmVxdWVzdE1zQnlNc2dcbiAgICAgICAgaWYgKGV4cGlyZUJ5UGVlciAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnByb21pc2VzLmRlbGV0ZShtc2dJZFN0cik7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRyaWNzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY3MuaXdhbnRQcm9taXNlUmVzb2x2ZWQuaW5jKDEpO1xuICAgICAgICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzLml3YW50UHJvbWlzZVJlc29sdmVkRnJvbUR1cGxpY2F0ZS5pbmMoMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzLml3YW50UHJvbWlzZVJlc29sdmVkUGVlcnMuaW5jKGV4cGlyZUJ5UGVlci5zaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIG1lc3NhZ2UgZ290IHJlamVjdGVkLCBzbyB3ZSBjYW4gc3RvcCB0cmFja2luZyBwcm9taXNlcyBhbmQgbGV0IHRoZSBzY29yZSBwZW5hbHR5IGFwcGx5IGZyb20gaW52YWxpZCBtZXNzYWdlIGRlbGl2ZXJ5LFxuICAgICAqIHVubGVzcyBpdHMgYW4gb2J2aW91c2x5IGludmFsaWQgbWVzc2FnZS5cbiAgICAgKi9cbiAgICByZWplY3RNZXNzYWdlKG1zZ0lkU3RyLCByZWFzb24pIHtcbiAgICAgICAgdGhpcy50cmFja01lc3NhZ2UobXNnSWRTdHIpO1xuICAgICAgICAvLyBBIG1lc3NhZ2UgZ290IHJlamVjdGVkLCBzbyB3ZSBjYW4gc3RvcCB0cmFja2luZyBwcm9taXNlcyBhbmQgbGV0IHRoZSBzY29yZSBwZW5hbHR5IGFwcGx5LlxuICAgICAgICAvLyBXaXRoIHRoZSBleHBlY3Rpb24gb2Ygb2J2aW91cyBpbnZhbGlkIG1lc3NhZ2VzXG4gICAgICAgIHN3aXRjaCAocmVhc29uKSB7XG4gICAgICAgICAgICBjYXNlIFJlamVjdFJlYXNvbi5FcnJvcjpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvbWlzZXMuZGVsZXRlKG1zZ0lkU3RyKTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMucHJvbWlzZXMuY2xlYXIoKTtcbiAgICB9XG4gICAgcHJ1bmUoKSB7XG4gICAgICAgIGNvbnN0IG1heE1zID0gRGF0ZS5ub3coKSAtIHRoaXMucmVxdWVzdE1zQnlNc2dFeHBpcmU7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMucmVxdWVzdE1zQnlNc2cuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodiA8IG1heE1zKSB7XG4gICAgICAgICAgICAgICAgLy8gbWVzc2FnZXMgdGhhdCBzdGF5IHRvbyBsb25nIGluIHRoZSByZXF1ZXN0TXNCeU1zZyBtYXAsIGRlbGV0ZVxuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdE1zQnlNc2cuZGVsZXRlKGspO1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZWNlbnQgbWVzc2FnZXMsIGtlZXAgdGhlbVxuICAgICAgICAgICAgICAgIC8vIHNvcnQgYnkgaW5zZXJ0aW9uIG9yZGVyXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRyaWNzPy5pd2FudE1lc3NhZ2VQcnVuZWQuaW5jKGNvdW50KTtcbiAgICB9XG4gICAgdHJhY2tNZXNzYWdlKG1zZ0lkU3RyKSB7XG4gICAgICAgIGlmICh0aGlzLm1ldHJpY3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdE1zID0gdGhpcy5yZXF1ZXN0TXNCeU1zZy5nZXQobXNnSWRTdHIpO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RNcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzLml3YW50UHJvbWlzZURlbGl2ZXJ5VGltZS5vYnNlcnZlKChEYXRlLm5vdygpIC0gcmVxdWVzdE1zKSAvIDEwMDApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdE1zQnlNc2cuZGVsZXRlKG1zZ0lkU3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNlci5qcy5tYXAiXSwibmFtZXMiOlsiUmVqZWN0UmVhc29uIiwiSVdhbnRUcmFjZXIiLCJjb25zdHJ1Y3RvciIsImdvc3NpcHN1YklXYW50Rm9sbG93dXBNcyIsIm1zZ0lkVG9TdHJGbiIsIm1ldHJpY3MiLCJwcm9taXNlcyIsIk1hcCIsInJlcXVlc3RNc0J5TXNnIiwicmVxdWVzdE1zQnlNc2dFeHBpcmUiLCJzaXplIiwicmVxdWVzdE1zQnlNc2dTaXplIiwiYWRkUHJvbWlzZSIsImZyb20iLCJtc2dJZHMiLCJpeCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImxlbmd0aCIsIm1zZ0lkIiwibXNnSWRTdHIiLCJleHBpcmVCeVBlZXIiLCJnZXQiLCJzZXQiLCJub3ciLCJEYXRlIiwiaGFzIiwiaXdhbnRQcm9taXNlU3RhcnRlZCIsImluYyIsImdldEJyb2tlblByb21pc2VzIiwicmVzdWx0IiwiYnJva2VuUHJvbWlzZXMiLCJmb3JFYWNoIiwiZXhwaXJlIiwicCIsImRlbGV0ZSIsIml3YW50UHJvbWlzZUJyb2tlbiIsImRlbGl2ZXJNZXNzYWdlIiwiaXNEdXBsaWNhdGUiLCJ0cmFja01lc3NhZ2UiLCJpd2FudFByb21pc2VSZXNvbHZlZCIsIml3YW50UHJvbWlzZVJlc29sdmVkRnJvbUR1cGxpY2F0ZSIsIml3YW50UHJvbWlzZVJlc29sdmVkUGVlcnMiLCJyZWplY3RNZXNzYWdlIiwicmVhc29uIiwiRXJyb3IiLCJjbGVhciIsInBydW5lIiwibWF4TXMiLCJjb3VudCIsImsiLCJ2IiwiZW50cmllcyIsIml3YW50TWVzc2FnZVBydW5lZCIsInJlcXVlc3RNcyIsInVuZGVmaW5lZCIsIml3YW50UHJvbWlzZURlbGl2ZXJ5VGltZSIsIm9ic2VydmUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js":
/*!********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js ***!
\********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MessageStatus: () => (/* binding */ MessageStatus),\n/* harmony export */ PublishConfigType: () => (/* binding */ PublishConfigType),\n/* harmony export */ RejectReason: () => (/* binding */ RejectReason),\n/* harmony export */ SignaturePolicy: () => (/* binding */ SignaturePolicy),\n/* harmony export */ ValidateError: () => (/* binding */ ValidateError),\n/* harmony export */ rejectReasonFromAcceptance: () => (/* binding */ rejectReasonFromAcceptance)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/pubsub/index.js\");\n\nvar SignaturePolicy;\n(function(SignaturePolicy) {\n /**\n * On the producing side:\n * - Build messages with the signature, key (from may be enough for certain inlineable public key types), from and seqno fields.\n *\n * On the consuming side:\n * - Enforce the fields to be present, reject otherwise.\n * - Propagate only if the fields are valid and signature can be verified, reject otherwise.\n */ SignaturePolicy[\"StrictSign\"] = \"StrictSign\";\n /**\n * On the producing side:\n * - Build messages without the signature, key, from and seqno fields.\n * - The corresponding protobuf key-value pairs are absent from the marshalled message, not just empty.\n *\n * On the consuming side:\n * - Enforce the fields to be absent, reject otherwise.\n * - Propagate only if the fields are absent, reject otherwise.\n * - A message_id function will not be able to use the above fields, and should instead rely on the data field. A commonplace strategy is to calculate a hash.\n */ SignaturePolicy[\"StrictNoSign\"] = \"StrictNoSign\";\n})(SignaturePolicy || (SignaturePolicy = {}));\nvar PublishConfigType;\n(function(PublishConfigType) {\n PublishConfigType[PublishConfigType[\"Signing\"] = 0] = \"Signing\";\n PublishConfigType[PublishConfigType[\"Anonymous\"] = 1] = \"Anonymous\";\n})(PublishConfigType || (PublishConfigType = {}));\nvar RejectReason;\n(function(RejectReason) {\n /**\n * The message failed the configured validation during decoding.\n * SelfOrigin is considered a ValidationError\n */ RejectReason[\"Error\"] = \"error\";\n /**\n * Custom validator fn reported status IGNORE.\n */ RejectReason[\"Ignore\"] = \"ignore\";\n /**\n * Custom validator fn reported status REJECT.\n */ RejectReason[\"Reject\"] = \"reject\";\n /**\n * The peer that sent the message OR the source from field is blacklisted.\n * Causes messages to be ignored, not penalized, neither do score record creation.\n */ RejectReason[\"Blacklisted\"] = \"blacklisted\";\n})(RejectReason || (RejectReason = {}));\nvar ValidateError;\n(function(ValidateError) {\n /// The message has an invalid signature,\n ValidateError[\"InvalidSignature\"] = \"invalid_signature\";\n /// The sequence number was the incorrect size\n ValidateError[\"InvalidSeqno\"] = \"invalid_seqno\";\n /// The PeerId was invalid\n ValidateError[\"InvalidPeerId\"] = \"invalid_peerid\";\n /// Signature existed when validation has been sent to\n /// [`crate::behaviour::MessageAuthenticity::Anonymous`].\n ValidateError[\"SignaturePresent\"] = \"signature_present\";\n /// Sequence number existed when validation has been sent to\n /// [`crate::behaviour::MessageAuthenticity::Anonymous`].\n ValidateError[\"SeqnoPresent\"] = \"seqno_present\";\n /// Message source existed when validation has been sent to\n /// [`crate::behaviour::MessageAuthenticity::Anonymous`].\n ValidateError[\"FromPresent\"] = \"from_present\";\n /// The data transformation failed.\n ValidateError[\"TransformFailed\"] = \"transform_failed\";\n})(ValidateError || (ValidateError = {}));\nvar MessageStatus;\n(function(MessageStatus) {\n MessageStatus[\"duplicate\"] = \"duplicate\";\n MessageStatus[\"invalid\"] = \"invalid\";\n MessageStatus[\"valid\"] = \"valid\";\n})(MessageStatus || (MessageStatus = {}));\n/**\n * Typesafe conversion of MessageAcceptance -> RejectReason. TS ensures all values covered\n */ function rejectReasonFromAcceptance(acceptance) {\n switch(acceptance){\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.TopicValidatorResult.Ignore:\n return RejectReason.Ignore;\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.TopicValidatorResult.Reject:\n return RejectReason.Reject;\n default:\n throw new Error(\"Unreachable\");\n }\n} //# sourceMappingURL=types.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3R5cGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBeUQ7QUFDbEQsSUFBSUMsZ0JBQWdCO0FBQzFCLFVBQVVBLGVBQWU7SUFDdEI7Ozs7Ozs7S0FPQyxHQUNEQSxlQUFlLENBQUMsYUFBYSxHQUFHO0lBQ2hDOzs7Ozs7Ozs7S0FTQyxHQUNEQSxlQUFlLENBQUMsZUFBZSxHQUFHO0FBQ3RDLEdBQUdBLG1CQUFvQkEsQ0FBQUEsa0JBQWtCLENBQUM7QUFDbkMsSUFBSUMsa0JBQWtCO0FBQzVCLFVBQVVBLGlCQUFpQjtJQUN4QkEsaUJBQWlCLENBQUNBLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUc7SUFDdERBLGlCQUFpQixDQUFDQSxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHO0FBQzVELEdBQUdBLHFCQUFzQkEsQ0FBQUEsb0JBQW9CLENBQUM7QUFDdkMsSUFBSUMsYUFBYTtBQUN2QixVQUFVQSxZQUFZO0lBQ25COzs7S0FHQyxHQUNEQSxZQUFZLENBQUMsUUFBUSxHQUFHO0lBQ3hCOztLQUVDLEdBQ0RBLFlBQVksQ0FBQyxTQUFTLEdBQUc7SUFDekI7O0tBRUMsR0FDREEsWUFBWSxDQUFDLFNBQVMsR0FBRztJQUN6Qjs7O0tBR0MsR0FDREEsWUFBWSxDQUFDLGNBQWMsR0FBRztBQUNsQyxHQUFHQSxnQkFBaUJBLENBQUFBLGVBQWUsQ0FBQztBQUM3QixJQUFJQyxjQUFjO0FBQ3hCLFVBQVVBLGFBQWE7SUFDcEIseUNBQXlDO0lBQ3pDQSxhQUFhLENBQUMsbUJBQW1CLEdBQUc7SUFDcEMsOENBQThDO0lBQzlDQSxhQUFhLENBQUMsZUFBZSxHQUFHO0lBQ2hDLDBCQUEwQjtJQUMxQkEsYUFBYSxDQUFDLGdCQUFnQixHQUFHO0lBQ2pDLHNEQUFzRDtJQUN0RCx5REFBeUQ7SUFDekRBLGFBQWEsQ0FBQyxtQkFBbUIsR0FBRztJQUNwQyw0REFBNEQ7SUFDNUQseURBQXlEO0lBQ3pEQSxhQUFhLENBQUMsZUFBZSxHQUFHO0lBQ2hDLDJEQUEyRDtJQUMzRCx5REFBeUQ7SUFDekRBLGFBQWEsQ0FBQyxjQUFjLEdBQUc7SUFDL0IsbUNBQW1DO0lBQ25DQSxhQUFhLENBQUMsa0JBQWtCLEdBQUc7QUFDdkMsR0FBR0EsaUJBQWtCQSxDQUFBQSxnQkFBZ0IsQ0FBQztBQUMvQixJQUFJQyxjQUFjO0FBQ3hCLFVBQVVBLGFBQWE7SUFDcEJBLGFBQWEsQ0FBQyxZQUFZLEdBQUc7SUFDN0JBLGFBQWEsQ0FBQyxVQUFVLEdBQUc7SUFDM0JBLGFBQWEsQ0FBQyxRQUFRLEdBQUc7QUFDN0IsR0FBR0EsaUJBQWtCQSxDQUFBQSxnQkFBZ0IsQ0FBQztBQUN0Qzs7Q0FFQyxHQUNNLFNBQVNDLDJCQUEyQkMsVUFBVTtJQUNqRCxPQUFRQTtRQUNKLEtBQUtQLG1FQUFvQkEsQ0FBQ1EsTUFBTTtZQUM1QixPQUFPTCxhQUFhSyxNQUFNO1FBQzlCLEtBQUtSLG1FQUFvQkEsQ0FBQ1MsTUFBTTtZQUM1QixPQUFPTixhQUFhTSxNQUFNO1FBQzlCO1lBQ0ksTUFBTSxJQUFJQyxNQUFNO0lBQ3hCO0FBQ0osRUFDQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvdHlwZXMuanM/ODVhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb3BpY1ZhbGlkYXRvclJlc3VsdCB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmV4cG9ydCB2YXIgU2lnbmF0dXJlUG9saWN5O1xuKGZ1bmN0aW9uIChTaWduYXR1cmVQb2xpY3kpIHtcbiAgICAvKipcbiAgICAgKiBPbiB0aGUgcHJvZHVjaW5nIHNpZGU6XG4gICAgICogLSBCdWlsZCBtZXNzYWdlcyB3aXRoIHRoZSBzaWduYXR1cmUsIGtleSAoZnJvbSBtYXkgYmUgZW5vdWdoIGZvciBjZXJ0YWluIGlubGluZWFibGUgcHVibGljIGtleSB0eXBlcyksIGZyb20gYW5kIHNlcW5vIGZpZWxkcy5cbiAgICAgKlxuICAgICAqIE9uIHRoZSBjb25zdW1pbmcgc2lkZTpcbiAgICAgKiAtIEVuZm9yY2UgdGhlIGZpZWxkcyB0byBiZSBwcmVzZW50LCByZWplY3Qgb3RoZXJ3aXNlLlxuICAgICAqIC0gUHJvcGFnYXRlIG9ubHkgaWYgdGhlIGZpZWxkcyBhcmUgdmFsaWQgYW5kIHNpZ25hdHVyZSBjYW4gYmUgdmVyaWZpZWQsIHJlamVjdCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgU2lnbmF0dXJlUG9saWN5W1wiU3RyaWN0U2lnblwiXSA9IFwiU3RyaWN0U2lnblwiO1xuICAgIC8qKlxuICAgICAqIE9uIHRoZSBwcm9kdWNpbmcgc2lkZTpcbiAgICAgKiAtIEJ1aWxkIG1lc3NhZ2VzIHdpdGhvdXQgdGhlIHNpZ25hdHVyZSwga2V5LCBmcm9tIGFuZCBzZXFubyBmaWVsZHMuXG4gICAgICogLSBUaGUgY29ycmVzcG9uZGluZyBwcm90b2J1ZiBrZXktdmFsdWUgcGFpcnMgYXJlIGFic2VudCBmcm9tIHRoZSBtYXJzaGFsbGVkIG1lc3NhZ2UsIG5vdCBqdXN0IGVtcHR5LlxuICAgICAqXG4gICAgICogT24gdGhlIGNvbnN1bWluZyBzaWRlOlxuICAgICAqIC0gRW5mb3JjZSB0aGUgZmllbGRzIHRvIGJlIGFic2VudCwgcmVqZWN0IG90aGVyd2lzZS5cbiAgICAgKiAtIFByb3BhZ2F0ZSBvbmx5IGlmIHRoZSBmaWVsZHMgYXJlIGFic2VudCwgcmVqZWN0IG90aGVyd2lzZS5cbiAgICAgKiAtIEEgbWVzc2FnZV9pZCBmdW5jdGlvbiB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZSB0aGUgYWJvdmUgZmllbGRzLCBhbmQgc2hvdWxkIGluc3RlYWQgcmVseSBvbiB0aGUgZGF0YSBmaWVsZC4gQSBjb21tb25wbGFjZSBzdHJhdGVneSBpcyB0byBjYWxjdWxhdGUgYSBoYXNoLlxuICAgICAqL1xuICAgIFNpZ25hdHVyZVBvbGljeVtcIlN0cmljdE5vU2lnblwiXSA9IFwiU3RyaWN0Tm9TaWduXCI7XG59KShTaWduYXR1cmVQb2xpY3kgfHwgKFNpZ25hdHVyZVBvbGljeSA9IHt9KSk7XG5leHBvcnQgdmFyIFB1Ymxpc2hDb25maWdUeXBlO1xuKGZ1bmN0aW9uIChQdWJsaXNoQ29uZmlnVHlwZSkge1xuICAgIFB1Ymxpc2hDb25maWdUeXBlW1B1Ymxpc2hDb25maWdUeXBlW1wiU2lnbmluZ1wiXSA9IDBdID0gXCJTaWduaW5nXCI7XG4gICAgUHVibGlzaENvbmZpZ1R5cGVbUHVibGlzaENvbmZpZ1R5cGVbXCJBbm9ueW1vdXNcIl0gPSAxXSA9IFwiQW5vbnltb3VzXCI7XG59KShQdWJsaXNoQ29uZmlnVHlwZSB8fCAoUHVibGlzaENvbmZpZ1R5cGUgPSB7fSkpO1xuZXhwb3J0IHZhciBSZWplY3RSZWFzb247XG4oZnVuY3Rpb24gKFJlamVjdFJlYXNvbikge1xuICAgIC8qKlxuICAgICAqIFRoZSBtZXNzYWdlIGZhaWxlZCB0aGUgY29uZmlndXJlZCB2YWxpZGF0aW9uIGR1cmluZyBkZWNvZGluZy5cbiAgICAgKiBTZWxmT3JpZ2luIGlzIGNvbnNpZGVyZWQgYSBWYWxpZGF0aW9uRXJyb3JcbiAgICAgKi9cbiAgICBSZWplY3RSZWFzb25bXCJFcnJvclwiXSA9IFwiZXJyb3JcIjtcbiAgICAvKipcbiAgICAgKiBDdXN0b20gdmFsaWRhdG9yIGZuIHJlcG9ydGVkIHN0YXR1cyBJR05PUkUuXG4gICAgICovXG4gICAgUmVqZWN0UmVhc29uW1wiSWdub3JlXCJdID0gXCJpZ25vcmVcIjtcbiAgICAvKipcbiAgICAgKiBDdXN0b20gdmFsaWRhdG9yIGZuIHJlcG9ydGVkIHN0YXR1cyBSRUpFQ1QuXG4gICAgICovXG4gICAgUmVqZWN0UmVhc29uW1wiUmVqZWN0XCJdID0gXCJyZWplY3RcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgcGVlciB0aGF0IHNlbnQgdGhlIG1lc3NhZ2UgT1IgdGhlIHNvdXJjZSBmcm9tIGZpZWxkIGlzIGJsYWNrbGlzdGVkLlxuICAgICAqIENhdXNlcyBtZXNzYWdlcyB0byBiZSBpZ25vcmVkLCBub3QgcGVuYWxpemVkLCBuZWl0aGVyIGRvIHNjb3JlIHJlY29yZCBjcmVhdGlvbi5cbiAgICAgKi9cbiAgICBSZWplY3RSZWFzb25bXCJCbGFja2xpc3RlZFwiXSA9IFwiYmxhY2tsaXN0ZWRcIjtcbn0pKFJlamVjdFJlYXNvbiB8fCAoUmVqZWN0UmVhc29uID0ge30pKTtcbmV4cG9ydCB2YXIgVmFsaWRhdGVFcnJvcjtcbihmdW5jdGlvbiAoVmFsaWRhdGVFcnJvcikge1xuICAgIC8vLyBUaGUgbWVzc2FnZSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUsXG4gICAgVmFsaWRhdGVFcnJvcltcIkludmFsaWRTaWduYXR1cmVcIl0gPSBcImludmFsaWRfc2lnbmF0dXJlXCI7XG4gICAgLy8vIFRoZSBzZXF1ZW5jZSBudW1iZXIgd2FzIHRoZSBpbmNvcnJlY3Qgc2l6ZVxuICAgIFZhbGlkYXRlRXJyb3JbXCJJbnZhbGlkU2Vxbm9cIl0gPSBcImludmFsaWRfc2Vxbm9cIjtcbiAgICAvLy8gVGhlIFBlZXJJZCB3YXMgaW52YWxpZFxuICAgIFZhbGlkYXRlRXJyb3JbXCJJbnZhbGlkUGVlcklkXCJdID0gXCJpbnZhbGlkX3BlZXJpZFwiO1xuICAgIC8vLyBTaWduYXR1cmUgZXhpc3RlZCB3aGVuIHZhbGlkYXRpb24gaGFzIGJlZW4gc2VudCB0b1xuICAgIC8vLyBbYGNyYXRlOjpiZWhhdmlvdXI6Ok1lc3NhZ2VBdXRoZW50aWNpdHk6OkFub255bW91c2BdLlxuICAgIFZhbGlkYXRlRXJyb3JbXCJTaWduYXR1cmVQcmVzZW50XCJdID0gXCJzaWduYXR1cmVfcHJlc2VudFwiO1xuICAgIC8vLyBTZXF1ZW5jZSBudW1iZXIgZXhpc3RlZCB3aGVuIHZhbGlkYXRpb24gaGFzIGJlZW4gc2VudCB0b1xuICAgIC8vLyBbYGNyYXRlOjpiZWhhdmlvdXI6Ok1lc3NhZ2VBdXRoZW50aWNpdHk6OkFub255bW91c2BdLlxuICAgIFZhbGlkYXRlRXJyb3JbXCJTZXFub1ByZXNlbnRcIl0gPSBcInNlcW5vX3ByZXNlbnRcIjtcbiAgICAvLy8gTWVzc2FnZSBzb3VyY2UgZXhpc3RlZCB3aGVuIHZhbGlkYXRpb24gaGFzIGJlZW4gc2VudCB0b1xuICAgIC8vLyBbYGNyYXRlOjpiZWhhdmlvdXI6Ok1lc3NhZ2VBdXRoZW50aWNpdHk6OkFub255bW91c2BdLlxuICAgIFZhbGlkYXRlRXJyb3JbXCJGcm9tUHJlc2VudFwiXSA9IFwiZnJvbV9wcmVzZW50XCI7XG4gICAgLy8vIFRoZSBkYXRhIHRyYW5zZm9ybWF0aW9uIGZhaWxlZC5cbiAgICBWYWxpZGF0ZUVycm9yW1wiVHJhbnNmb3JtRmFpbGVkXCJdID0gXCJ0cmFuc2Zvcm1fZmFpbGVkXCI7XG59KShWYWxpZGF0ZUVycm9yIHx8IChWYWxpZGF0ZUVycm9yID0ge30pKTtcbmV4cG9ydCB2YXIgTWVzc2FnZVN0YXR1cztcbihmdW5jdGlvbiAoTWVzc2FnZVN0YXR1cykge1xuICAgIE1lc3NhZ2VTdGF0dXNbXCJkdXBsaWNhdGVcIl0gPSBcImR1cGxpY2F0ZVwiO1xuICAgIE1lc3NhZ2VTdGF0dXNbXCJpbnZhbGlkXCJdID0gXCJpbnZhbGlkXCI7XG4gICAgTWVzc2FnZVN0YXR1c1tcInZhbGlkXCJdID0gXCJ2YWxpZFwiO1xufSkoTWVzc2FnZVN0YXR1cyB8fCAoTWVzc2FnZVN0YXR1cyA9IHt9KSk7XG4vKipcbiAqIFR5cGVzYWZlIGNvbnZlcnNpb24gb2YgTWVzc2FnZUFjY2VwdGFuY2UgLT4gUmVqZWN0UmVhc29uLiBUUyBlbnN1cmVzIGFsbCB2YWx1ZXMgY292ZXJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0UmVhc29uRnJvbUFjY2VwdGFuY2UoYWNjZXB0YW5jZSkge1xuICAgIHN3aXRjaCAoYWNjZXB0YW5jZSkge1xuICAgICAgICBjYXNlIFRvcGljVmFsaWRhdG9yUmVzdWx0Lklnbm9yZTpcbiAgICAgICAgICAgIHJldHVybiBSZWplY3RSZWFzb24uSWdub3JlO1xuICAgICAgICBjYXNlIFRvcGljVmFsaWRhdG9yUmVzdWx0LlJlamVjdDpcbiAgICAgICAgICAgIHJldHVybiBSZWplY3RSZWFzb24uUmVqZWN0O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnJlYWNoYWJsZScpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6WyJUb3BpY1ZhbGlkYXRvclJlc3VsdCIsIlNpZ25hdHVyZVBvbGljeSIsIlB1Ymxpc2hDb25maWdUeXBlIiwiUmVqZWN0UmVhc29uIiwiVmFsaWRhdGVFcnJvciIsIk1lc3NhZ2VTdGF0dXMiLCJyZWplY3RSZWFzb25Gcm9tQWNjZXB0YW5jZSIsImFjY2VwdGFuY2UiLCJJZ25vcmUiLCJSZWplY3QiLCJFcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/buildRawMessage.js":
/*!************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/buildRawMessage.js ***!
\************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SignPrefix: () => (/* binding */ SignPrefix),\n/* harmony export */ buildRawMessage: () => (/* binding */ buildRawMessage),\n/* harmony export */ validateToRawMessage: () => (/* binding */ validateToRawMessage)\n/* harmony export */ });\n/* harmony import */ var _libp2p_crypto__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @libp2p/crypto */ \"(ssr)/./node_modules/@libp2p/crypto/dist/src/random-bytes.js\");\n/* harmony import */ var _libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @libp2p/crypto/keys */ \"(ssr)/./node_modules/@libp2p/crypto/dist/src/keys/index.js\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/pubsub/index.js\");\n/* harmony import */ var _libp2p_peer_id__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @libp2p/peer-id */ \"(ssr)/./node_modules/@libp2p/peer-id/dist/src/index.js\");\n/* harmony import */ var uint8arrays_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arrays/concat */ \"(ssr)/./node_modules/uint8arrays/dist/src/concat.node.js\");\n/* harmony import */ var uint8arrays_equals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays/equals */ \"(ssr)/./node_modules/uint8arrays/dist/src/equals.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n/* harmony import */ var _message_rpc_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../message/rpc.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../types.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js\");\n\n\n\n\n\n\n\n\n\n\nconst SignPrefix = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__.fromString)(\"libp2p-pubsub:\");\nasync function buildRawMessage(publishConfig, topic, originalData, transformedData) {\n switch(publishConfig.type){\n case _types_js__WEBPACK_IMPORTED_MODULE_4__.PublishConfigType.Signing:\n {\n const rpcMsg = {\n from: publishConfig.author.toBytes(),\n data: transformedData,\n seqno: (0,_libp2p_crypto__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(8),\n topic,\n signature: undefined,\n key: undefined // Exclude key field for signing\n };\n // Get the message in bytes, and prepend with the pubsub prefix\n // the signature is over the bytes \"libp2p-pubsub:<protobuf-message>\"\n const bytes = (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_0__.concat)([\n SignPrefix,\n _message_rpc_js__WEBPACK_IMPORTED_MODULE_6__.RPC.Message.encode(rpcMsg)\n ]);\n rpcMsg.signature = await publishConfig.privateKey.sign(bytes);\n rpcMsg.key = publishConfig.key;\n const msg = {\n type: \"signed\",\n from: publishConfig.author,\n data: originalData,\n sequenceNumber: BigInt(`0x${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__.toString)(rpcMsg.seqno, \"base16\")}`),\n topic,\n signature: rpcMsg.signature,\n key: rpcMsg.key\n };\n return {\n raw: rpcMsg,\n msg\n };\n }\n case _types_js__WEBPACK_IMPORTED_MODULE_4__.PublishConfigType.Anonymous:\n {\n return {\n raw: {\n from: undefined,\n data: transformedData,\n seqno: undefined,\n topic,\n signature: undefined,\n key: undefined\n },\n msg: {\n type: \"unsigned\",\n data: originalData,\n topic\n }\n };\n }\n default:\n throw new Error(\"Unreachable\");\n }\n}\nasync function validateToRawMessage(signaturePolicy, msg) {\n // If strict-sign, verify all\n // If anonymous (no-sign), ensure no preven\n switch(signaturePolicy){\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_7__.StrictNoSign:\n if (msg.signature != null) return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.SignaturePresent\n };\n if (msg.seqno != null) return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.SeqnoPresent\n };\n if (msg.key != null) return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.FromPresent\n };\n return {\n valid: true,\n message: {\n type: \"unsigned\",\n topic: msg.topic,\n data: msg.data ?? new Uint8Array(0)\n }\n };\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_7__.StrictSign:\n {\n // Verify seqno\n if (msg.seqno == null) return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidSeqno\n };\n if (msg.seqno.length !== 8) {\n return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidSeqno\n };\n }\n if (msg.signature == null) return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidSignature\n };\n if (msg.from == null) return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidPeerId\n };\n let fromPeerId;\n try {\n // TODO: Fix PeerId types\n fromPeerId = (0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_8__.peerIdFromBytes)(msg.from);\n } catch (e) {\n return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidPeerId\n };\n }\n // - check from defined\n // - transform source to PeerId\n // - parse signature\n // - get .key, else from source\n // - check key == source if present\n // - verify sig\n let publicKey;\n if (msg.key != null) {\n publicKey = (0,_libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_9__.unmarshalPublicKey)(msg.key);\n // TODO: Should `fromPeerId.pubKey` be optional?\n if (fromPeerId.publicKey !== undefined && !(0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_1__.equals)(publicKey.bytes, fromPeerId.publicKey)) {\n return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidPeerId\n };\n }\n } else {\n if (fromPeerId.publicKey == null) {\n return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidPeerId\n };\n }\n publicKey = (0,_libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_9__.unmarshalPublicKey)(fromPeerId.publicKey);\n }\n const rpcMsgPreSign = {\n from: msg.from,\n data: msg.data,\n seqno: msg.seqno,\n topic: msg.topic,\n signature: undefined,\n key: undefined // Exclude key field for signing\n };\n // Get the message in bytes, and prepend with the pubsub prefix\n // the signature is over the bytes \"libp2p-pubsub:<protobuf-message>\"\n const bytes = (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_0__.concat)([\n SignPrefix,\n _message_rpc_js__WEBPACK_IMPORTED_MODULE_6__.RPC.Message.encode(rpcMsgPreSign)\n ]);\n if (!await publicKey.verify(bytes, msg.signature)) {\n return {\n valid: false,\n error: _types_js__WEBPACK_IMPORTED_MODULE_4__.ValidateError.InvalidSignature\n };\n }\n return {\n valid: true,\n message: {\n type: \"signed\",\n from: fromPeerId,\n data: msg.data ?? new Uint8Array(0),\n sequenceNumber: BigInt(`0x${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__.toString)(msg.seqno, \"base16\")}`),\n topic: msg.topic,\n signature: msg.signature,\n key: msg.key ?? (0,_libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_9__.marshalPublicKey)(publicKey)\n }\n };\n }\n default:\n throw new Error(\"Unreachable\");\n }\n} //# sourceMappingURL=buildRawMessage.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL2J1aWxkUmF3TWVzc2FnZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQTZDO0FBQzhCO0FBQ2Q7QUFDWDtBQUNjO0FBQ0E7QUFDYTtBQUNOO0FBQy9CO0FBQ3VCO0FBQ3hELE1BQU1pQixhQUFhTixtRUFBb0JBLENBQUMsa0JBQWtCO0FBQzFELGVBQWVPLGdCQUFnQkMsYUFBYSxFQUFFQyxLQUFLLEVBQUVDLFlBQVksRUFBRUMsZUFBZTtJQUNyRixPQUFRSCxjQUFjSSxJQUFJO1FBQ3RCLEtBQUtSLHdEQUFpQkEsQ0FBQ1MsT0FBTztZQUFFO2dCQUM1QixNQUFNQyxTQUFTO29CQUNYQyxNQUFNUCxjQUFjUSxNQUFNLENBQUNDLE9BQU87b0JBQ2xDQyxNQUFNUDtvQkFDTlEsT0FBTzlCLDBEQUFXQSxDQUFDO29CQUNuQm9CO29CQUNBVyxXQUFXQztvQkFDWEMsS0FBS0QsVUFBVSxnQ0FBZ0M7Z0JBQ25EO2dCQUNBLCtEQUErRDtnQkFDL0QscUVBQXFFO2dCQUNyRSxNQUFNRSxRQUFRM0IsMERBQWdCQSxDQUFDO29CQUFDVTtvQkFBWUgsZ0RBQUdBLENBQUNxQixPQUFPLENBQUNDLE1BQU0sQ0FBQ1g7aUJBQVE7Z0JBQ3ZFQSxPQUFPTSxTQUFTLEdBQUcsTUFBTVosY0FBY2tCLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDSjtnQkFDdkRULE9BQU9RLEdBQUcsR0FBR2QsY0FBY2MsR0FBRztnQkFDOUIsTUFBTU0sTUFBTTtvQkFDUmhCLE1BQU07b0JBQ05HLE1BQU1QLGNBQWNRLE1BQU07b0JBQzFCRSxNQUFNUjtvQkFDTm1CLGdCQUFnQkMsT0FBTyxDQUFDLEVBQUUsRUFBRTVCLCtEQUFrQkEsQ0FBQ1ksT0FBT0ssS0FBSyxFQUFFLFVBQVUsQ0FBQztvQkFDeEVWO29CQUNBVyxXQUFXTixPQUFPTSxTQUFTO29CQUMzQkUsS0FBS1IsT0FBT1Es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b2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy91dGlscy9idWlsZFJhd01lc3NhZ2UuanM/NDc4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ0BsaWJwMnAvY3J5cHRvJztcbmltcG9ydCB7IG1hcnNoYWxQdWJsaWNLZXksIHVubWFyc2hhbFB1YmxpY0tleSB9IGZyb20gJ0BsaWJwMnAvY3J5cHRvL2tleXMnO1xuaW1wb3J0IHsgU3RyaWN0U2lnbiwgU3RyaWN0Tm9TaWduIH0gZnJvbSAnQGxpYnAycC9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcGVlcklkRnJvbUJ5dGVzIH0gZnJvbSAnQGxpYnAycC9wZWVyLWlkJztcbmltcG9ydCB7IGNvbmNhdCBhcyB1aW50OEFycmF5Q29uY2F0IH0gZnJvbSAndWludDhhcnJheXMvY29uY2F0JztcbmltcG9ydCB7IGVxdWFscyBhcyB1aW50OEFycmF5RXF1YWxzIH0gZnJvbSAndWludDhhcnJheXMvZXF1YWxzJztcbmltcG9ydCB7IGZyb21TdHJpbmcgYXMgdWludDhBcnJheUZyb21TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy9mcm9tLXN0cmluZyc7XG5pbXBvcnQgeyB0b1N0cmluZyBhcyB1aW50OEFycmF5VG9TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy90by1zdHJpbmcnO1xuaW1wb3J0IHsgUlBDIH0gZnJvbSAnLi4vbWVzc2FnZS9ycGMuanMnO1xuaW1wb3J0IHsgUHVibGlzaENvbmZpZ1R5cGUsIFZhbGlkYXRlRXJyb3IgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5leHBvcnQgY29uc3QgU2lnblByZWZpeCA9IHVpbnQ4QXJyYXlGcm9tU3RyaW5nKCdsaWJwMnAtcHVic3ViOicpO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmF3TWVzc2FnZShwdWJsaXNoQ29uZmlnLCB0b3BpYywgb3JpZ2luYWxEYXRhLCB0cmFuc2Zvcm1lZERhdGEpIHtcbiAgICBzd2l0Y2ggKHB1Ymxpc2hDb25maWcudHlwZSkge1xuICAgICAgICBjYXNlIFB1Ymxpc2hDb25maWdUeXBlLlNpZ25pbmc6IHtcbiAgICAgICAgICAgIGNvbnN0IHJwY01zZyA9IHtcbiAgICAgICAgICAgICAgICBmcm9tOiBwdWJsaXNoQ29uZmlnLmF1dGhvci50b0J5dGVzKCksXG4gICAgICAgICAgICAgICAgZGF0YTogdHJhbnNmb3JtZWREYXRhLFxuICAgICAgICAgICAgICAgIHNlcW5vOiByYW5kb21CeXRlcyg4KSxcbiAgICAgICAgICAgICAgICB0b3BpYyxcbiAgICAgICAgICAgICAgICBzaWduYXR1cmU6IHVuZGVmaW5lZCwgLy8gRXhjbHVkZSBzaWduYXR1cmUgZmllbGQgZm9yIHNpZ25pbmdcbiAgICAgICAgICAgICAgICBrZXk6IHVuZGVmaW5lZCAvLyBFeGNsdWRlIGtleSBmaWVsZCBmb3Igc2lnbmluZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgbWVzc2FnZSBpbiBieXRlcywgYW5kIHByZXBlbmQgd2l0aCB0aGUgcHVic3ViIHByZWZpeFxuICAgICAgICAgICAgLy8gdGhlIHNpZ25hdHVyZSBpcyBvdmVyIHRoZSBieXRlcyBcImxpYnAycC1wdWJzdWI6PHByb3RvYnVmLW1lc3NhZ2U+XCJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gdWludDhBcnJheUNvbmNhdChbU2lnblByZWZpeCwgUlBDLk1lc3NhZ2UuZW5jb2RlKHJwY01zZyldKTtcbiAgICAgICAgICAgIHJwY01zZy5zaWduYXR1cmUgPSBhd2FpdCBwdWJsaXNoQ29uZmlnLnByaXZhdGVLZXkuc2lnbihieXRlcyk7XG4gICAgICAgICAgICBycGNNc2cua2V5ID0gcHVibGlzaENvbmZpZy5rZXk7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3NpZ25lZCcsXG4gICAgICAgICAgICAgICAgZnJvbTogcHVibGlzaENvbmZpZy5hdXRob3IsXG4gICAgICAgICAgICAgICAgZGF0YTogb3JpZ2luYWxEYXRhLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyOiBCaWdJbnQoYDB4JHt1aW50OEFycmF5VG9TdHJpbmcocnBjTXNnLnNlcW5vLCAnYmFzZTE2Jyl9YCksXG4gICAgICAgICAgICAgICAgdG9waWMsXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBycGNNc2cuc2lnbmF0dXJlLFxuICAgICAgICAgICAgICAgIGtleTogcnBjTXNnLmtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmF3OiBycGNNc2csXG4gICAgICAgICAgICAgICAgbXNnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUHVibGlzaENvbmZpZ1R5cGUuQW5vbnltb3VzOiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJhdzoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRyYW5zZm9ybWVkRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgc2Vxbm86IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdG9waWMsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbXNnOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1bnNpZ25lZCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG9yaWdpbmFsRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdG9waWNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVhY2hhYmxlJyk7XG4gICAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG9SYXdNZXNzYWdlKHNpZ25hdHVyZVBvbGljeSwgbXNnKSB7XG4gICAgLy8gSWYgc3RyaWN0LXNpZ24sIHZlcmlmeSBhbGxcbiAgICAvLyBJZiBhbm9ueW1vdXMgKG5vLXNpZ24pLCBlbnN1cmUgbm8gcHJldmVuXG4gICAgc3dpdGNoIChzaWduYXR1cmVQb2xpY3kpIHtcbiAgICAgICAgY2FzZSBTdHJpY3ROb1NpZ246XG4gICAgICAgICAgICBpZiAobXNnLnNpZ25hdHVyZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFZhbGlkYXRlRXJyb3IuU2lnbmF0dXJlUHJlc2VudCB9O1xuICAgICAgICAgICAgaWYgKG1zZy5zZXFubyAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFZhbGlkYXRlRXJyb3IuU2Vxbm9QcmVzZW50IH07XG4gICAgICAgICAgICBpZiAobXNnLmtleSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFZhbGlkYXRlRXJyb3IuRnJvbVByZXNlbnQgfTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBtZXNzYWdlOiB7IHR5cGU6ICd1bnNpZ25lZCcsIHRvcGljOiBtc2cudG9waWMsIGRhdGE6IG1zZy5kYXRhID8/IG5ldyBVaW50OEFycmF5KDApIH0gfTtcbiAgICAgICAgY2FzZSBTdHJpY3RTaWduOiB7XG4gICAgICAgICAgICAvLyBWZXJpZnkgc2Vxbm9cbiAgICAgICAgICAgIGlmIChtc2cuc2Vxbm8gPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBWYWxpZGF0ZUVycm9yLkludmFsaWRTZXFubyB9O1xuICAgICAgICAgICAgaWYgKG1zZy5zZXFuby5sZW5ndGggIT09IDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBWYWxpZGF0ZUVycm9yLkludmFsaWRTZXFubyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1zZy5zaWduYXR1cmUgPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBWYWxpZGF0ZUVycm9yLkludmFsaWRTaWduYXR1cmUgfTtcbiAgICAgICAgICAgIGlmIChtc2cuZnJvbSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFZhbGlkYXRlRXJyb3IuSW52YWxpZFBlZXJJZCB9O1xuICAgICAgICAgICAgbGV0IGZyb21QZWVySWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEZpeCBQZWVySWQgdHlwZXNcbiAgICAgICAgICAgICAgICBmcm9tUGVlcklkID0gcGVlcklkRnJvbUJ5dGVzKG1zZy5mcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogVmFsaWRhdGVFcnJvci5JbnZhbGlkUGVlcklkIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAtIGNoZWNrIGZyb20gZGVmaW5lZFxuICAgICAgICAgICAgLy8gLSB0cmFuc2Zvcm0gc291cmNlIHRvIFBlZXJJZFxuICAgICAgICAgICAgLy8gLSBwYXJzZSBzaWduYXR1cmVcbiAgICAgICAgICAgIC8vIC0gZ2V0IC5rZXksIGVsc2UgZnJvbSBzb3VyY2VcbiAgICAgICAgICAgIC8vIC0gY2hlY2sga2V5ID09IHNvdXJjZSBpZiBwcmVzZW50XG4gICAgICAgICAgICAvLyAtIHZlcmlmeSBzaWdcbiAgICAgICAgICAgIGxldCBwdWJsaWNLZXk7XG4gICAgICAgICAgICBpZiAobXNnLmtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcHVibGljS2V5ID0gdW5tYXJzaGFsUHVibGljS2V5KG1zZy5rZXkpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZCBgZnJvbVBlZXJJZC5wdWJLZXlgIGJlIG9wdGlvbmFsP1xuICAgICAgICAgICAgICAgIGlmIChmcm9tUGVlcklkLnB1YmxpY0tleSAhPT0gdW5kZWZpbmVkICYmICF1aW50OEFycmF5RXF1YWxzKHB1YmxpY0tleS5ieXRlcywgZnJvbVBlZXJJZC5wdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFZhbGlkYXRlRXJyb3IuSW52YWxpZFBlZXJJZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChmcm9tUGVlcklkLnB1YmxpY0tleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFZhbGlkYXRlRXJyb3IuSW52YWxpZFBlZXJJZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwdWJsaWNLZXkgPSB1bm1hcnNoYWxQdWJsaWNLZXkoZnJvbVBlZXJJZC5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcnBjTXNnUHJlU2lnbiA9IHtcbiAgICAgICAgICAgICAgICBmcm9tOiBtc2cuZnJvbSxcbiAgICAgICAgICAgICAgICBkYXRhOiBtc2cuZGF0YSxcbiAgICAgICAgICAgICAgICBzZXFubzogbXNnLnNlcW5vLFxuICAgICAgICAgICAgICAgIHRvcGljOiBtc2cudG9waWMsXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlOiB1bmRlZmluZWQsIC8vIEV4Y2x1ZGUgc2lnbmF0dXJlIGZpZWxkIGZvciBzaWduaW5nXG4gICAgICAgICAgICAgICAga2V5OiB1bmRlZmluZWQgLy8gRXhjbHVkZSBrZXkgZmllbGQgZm9yIHNpZ25pbmdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBHZXQgdGhlIG1lc3NhZ2UgaW4gYnl0ZXMsIGFuZCBwcmVwZW5kIHdpdGggdGhlIHB1YnN1YiBwcmVmaXhcbiAgICAgICAgICAgIC8vIHRoZSBzaWduYXR1cmUgaXMgb3ZlciB0aGUgYnl0ZXMgXCJsaWJwMnAtcHVic3ViOjxwcm90b2J1Zi1tZXNzYWdlPlwiXG4gICAgICAgICAgICBjb25zdCBieXRlcyA9IHVpbnQ4QXJyYXlDb25jYXQoW1NpZ25QcmVmaXgsIFJQQy5NZXNzYWdlLmVuY29kZShycGNNc2dQcmVTaWduKV0pO1xuICAgICAgICAgICAgaWYgKCEoYXdhaXQgcHVibGljS2V5LnZlcmlmeShieXRlcywgbXNnLnNpZ25hdHVyZSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogVmFsaWRhdGVFcnJvci5JbnZhbGlkU2lnbmF0dXJlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NpZ25lZCcsXG4gICAgICAgICAgICAgICAgICAgIGZyb206IGZyb21QZWVySWQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG1zZy5kYXRhID8/IG5ldyBVaW50OEFycmF5KDApLFxuICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZU51bWJlcjogQmlnSW50KGAweCR7dWludDhBcnJheVRvU3RyaW5nKG1zZy5zZXFubywgJ2Jhc2UxNicpfWApLFxuICAgICAgICAgICAgICAgICAgICB0b3BpYzogbXNnLnRvcGljLFxuICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmU6IG1zZy5zaWduYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgIGtleTogbXNnLmtleSA/PyBtYXJzaGFsUHVibGljS2V5KHB1YmxpY0tleSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVhY2hhYmxlJyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVpbGRSYXdNZXNzYWdlLmpzLm1hcCJdLCJuYW1lcyI6WyJyYW5kb21CeXRlcyIsIm1hcnNoYWxQdWJsaWNLZXkiLCJ1bm1hcnNoYWxQdWJsaWNLZXkiLCJTdHJpY3RTaWduIiwiU3RyaWN0Tm9TaWduIiwicGVlcklkRnJvbUJ5dGVzIiwiY29uY2F0IiwidWludDhBcnJheUNvbmNhdCIsImVxdWFscyIsInVpbnQ4QXJyYXlFcXVhbHMiLCJmcm9tU3RyaW5nIiwidWludDhBcnJheUZyb21TdHJpbmciLCJ0b1N0cmluZyIsInVpbnQ4QXJyYXlUb1N0cmluZyIsIlJQQyIsIlB1Ymxpc2hDb25maWdUeXBlIiwiVmFsaWRhdGVFcnJvciIsIlNpZ25QcmVmaXgiLCJidWlsZFJhd01lc3NhZ2UiLCJwdWJsaXNoQ29uZmlnIiwidG9waWMiLCJvcmlnaW5hbERhdGEiLCJ0cmFuc2Zvcm1lZERhdGEiLCJ0eXBlIiwiU2lnbmluZyIsInJwY01zZyIsImZyb20iLCJhdXRob3IiLCJ0b0J5dGVzIiwiZGF0YSIsInNlcW5vIiwic2lnbmF0dXJlIiwidW5kZWZpbmVkIiwia2V5IiwiYnl0ZXMiLCJNZXNzYWdlIiwiZW5jb2RlIiwicHJpdmF0ZUtleSIsInNpZ24iLCJtc2ciLCJzZXF1ZW5jZU51bWJlciIsIkJpZ0ludCIsInJhdyIsIkFub255bW91cyIsIkVycm9yIiwidmFsaWRhdGVUb1Jhd01lc3NhZ2UiLCJzaWduYXR1cmVQb2xpY3kiLCJ2YWxpZCIsImVycm9yIiwiU2lnbmF0dXJlUHJlc2VudCIsIlNlcW5vUHJlc2VudCIsIkZyb21QcmVzZW50IiwibWVzc2FnZSIsIlVpbnQ4QXJyYXkiLCJJbnZhbGlkU2Vxbm8iLCJsZW5ndGgiLCJJbnZhbGlkU2lnbmF0dXJlIiwiSW52YWxpZFBlZXJJZCIsImZyb21QZWVySWQiLCJlIiwicHVibGljS2V5IiwicnBjTXNnUHJlU2lnbiIsInZlcmlmeSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/buildRawMessage.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/create-gossip-rpc.js":
/*!**************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/create-gossip-rpc.js ***!
\**************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createGossipRpc: () => (/* binding */ createGossipRpc),\n/* harmony export */ ensureControl: () => (/* binding */ ensureControl)\n/* harmony export */ });\n/**\n * Create a gossipsub RPC object\n */ function createGossipRpc(messages = [], control) {\n return {\n subscriptions: [],\n messages,\n control: control !== undefined ? {\n graft: control.graft ?? [],\n prune: control.prune ?? [],\n ihave: control.ihave ?? [],\n iwant: control.iwant ?? []\n } : undefined\n };\n}\nfunction ensureControl(rpc) {\n if (rpc.control === undefined) {\n rpc.control = {\n graft: [],\n prune: [],\n ihave: [],\n iwant: []\n };\n }\n return rpc;\n} //# sourceMappingURL=create-gossip-rpc.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL2NyZWF0ZS1nb3NzaXAtcnBjLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0NBRUMsR0FDTSxTQUFTQSxnQkFBZ0JDLFdBQVcsRUFBRSxFQUFFQyxPQUFPO0lBQ2xELE9BQU87UUFDSEMsZUFBZSxFQUFFO1FBQ2pCRjtRQUNBQyxTQUFTQSxZQUFZRSxZQUNmO1lBQ0VDLE9BQU9ILFFBQVFHLEtBQUssSUFBSSxFQUFFO1lBQzFCQyxPQUFPSixRQUFRSSxLQUFLLElBQUksRUFBRTtZQUMxQkMsT0FBT0wsUUFBUUssS0FBSyxJQUFJLEVBQUU7WUFDMUJDLE9BQU9OLFFBQVFNLEtBQUssSUFBSSxFQUFFO1FBQzlCLElBQ0VKO0lBQ1Y7QUFDSjtBQUNPLFNBQVNLLGNBQWNDLEdBQUc7SUFDN0IsSUFBSUEsSUFBSVIsT0FBTyxLQUFLRSxXQUFXO1FBQzNCTSxJQUFJUixPQUFPLEdBQUc7WUFDVkcsT0FBTyxFQUFFO1lBQ1RDLE9BQU8sRUFBRTtZQUNUQyxPQUFPLEVBQUU7WUFDVEMsT0FBTyxFQUFFO1FBQ2I7SUFDSjtJQUNBLE9BQU9FO0FBQ1gsRUFDQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvdXRpbHMvY3JlYXRlLWdvc3NpcC1ycGMuanM/ZWFkMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZSBhIGdvc3NpcHN1YiBSUEMgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHb3NzaXBScGMobWVzc2FnZXMgPSBbXSwgY29udHJvbCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IFtdLFxuICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgY29udHJvbDogY29udHJvbCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBncmFmdDogY29udHJvbC5ncmFmdCA/PyBbXSxcbiAgICAgICAgICAgICAgICBwcnVuZTogY29udHJvbC5wcnVuZSA/PyBbXSxcbiAgICAgICAgICAgICAgICBpaGF2ZTogY29udHJvbC5paGF2ZSA/PyBbXSxcbiAgICAgICAgICAgICAgICBpd2FudDogY29udHJvbC5pd2FudCA/PyBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbnRyb2wocnBjKSB7XG4gICAgaWYgKHJwYy5jb250cm9sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcnBjLmNvbnRyb2wgPSB7XG4gICAgICAgICAgICBncmFmdDogW10sXG4gICAgICAgICAgICBwcnVuZTogW10sXG4gICAgICAgICAgICBpaGF2ZTogW10sXG4gICAgICAgICAgICBpd2FudDogW11cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJwYztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZS1nb3NzaXAtcnBjLmpzLm1hcCJdLCJuYW1lcyI6WyJjcmVhdGVHb3NzaXBScGMiLCJtZXNzYWdlcyIsImNvbnRyb2wiLCJzdWJzY3JpcHRpb25zIiwidW5kZWZpbmVkIiwiZ3JhZnQiLCJwcnVuZSIsImloYXZlIiwiaXdhbnQiLCJlbnN1cmVDb250cm9sIiwicnBjIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/create-gossip-rpc.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/messageIdToString.js":
/*!**************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/messageIdToString.js ***!
\**************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ messageIdToString: () => (/* binding */ messageIdToString)\n/* harmony export */ });\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n\n/**\n * Browser friendly function to convert Uint8Array message id to base64 string.\n */ function messageIdToString(msgId) {\n return (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(msgId, \"base64\");\n} //# sourceMappingURL=messageIdToString.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL21lc3NhZ2VJZFRvU3RyaW5nLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWlEO0FBQ2pEOztDQUVDLEdBQ00sU0FBU0Msa0JBQWtCQyxLQUFLO0lBQ25DLE9BQU9GLCtEQUFRQSxDQUFDRSxPQUFPO0FBQzNCLEVBQ0EsNkNBQTZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL21lc3NhZ2VJZFRvU3RyaW5nLmpzP2NhYTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy90by1zdHJpbmcnO1xuLyoqXG4gKiBCcm93c2VyIGZyaWVuZGx5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgVWludDhBcnJheSBtZXNzYWdlIGlkIHRvIGJhc2U2NCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXNzYWdlSWRUb1N0cmluZyhtc2dJZCkge1xuICAgIHJldHVybiB0b1N0cmluZyhtc2dJZCwgJ2Jhc2U2NCcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVzc2FnZUlkVG9TdHJpbmcuanMubWFwIl0sIm5hbWVzIjpbInRvU3RyaW5nIiwibWVzc2FnZUlkVG9TdHJpbmciLCJtc2dJZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/messageIdToString.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/msgIdFn.js":
/*!****************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/msgIdFn.js ***!
\****************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ msgIdFnStrictNoSign: () => (/* binding */ msgIdFnStrictNoSign),\n/* harmony export */ msgIdFnStrictSign: () => (/* binding */ msgIdFnStrictSign)\n/* harmony export */ });\n/* harmony import */ var _libp2p_pubsub_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @libp2p/pubsub/utils */ \"(ssr)/./node_modules/@libp2p/pubsub/dist/src/utils.js\");\n/* harmony import */ var multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! multiformats/hashes/sha2 */ \"(ssr)/./node_modules/multiformats/dist/src/hashes/sha2.js\");\n\n\n/**\n * Generate a message id, based on the `key` and `seqno`\n */ function msgIdFnStrictSign(msg) {\n if (msg.type !== \"signed\") {\n throw new Error(\"expected signed message type\");\n }\n // Should never happen\n if (msg.sequenceNumber == null) throw Error(\"missing seqno field\");\n // TODO: Should use .from here or key?\n return (0,_libp2p_pubsub_utils__WEBPACK_IMPORTED_MODULE_1__.msgId)(msg.from.toBytes(), msg.sequenceNumber);\n}\n/**\n * Generate a message id, based on message `data`\n */ async function msgIdFnStrictNoSign(msg) {\n return multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__.sha256.encode(msg.data);\n} //# sourceMappingURL=msgIdFn.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL21zZ0lkRm4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE2QztBQUNLO0FBQ2xEOztDQUVDLEdBQ00sU0FBU0Usa0JBQWtCQyxHQUFHO0lBQ2pDLElBQUlBLElBQUlDLElBQUksS0FBSyxVQUFVO1FBQ3ZCLE1BQU0sSUFBSUMsTUFBTTtJQUNwQjtJQUNBLHNCQUFzQjtJQUN0QixJQUFJRixJQUFJRyxjQUFjLElBQUksTUFDdEIsTUFBTUQsTUFBTTtJQUNoQixzQ0FBc0M7SUFDdEMsT0FBT0wsMkRBQUtBLENBQUNHLElBQUlJLElBQUksQ0FBQ0MsT0FBTyxJQUFJTCxJQUFJRyxjQUFjO0FBQ3ZEO0FBQ0E7O0NBRUMsR0FDTSxlQUFlRyxvQkFBb0JOLEdBQUc7SUFDekMsT0FBT0YsNERBQU1BLENBQUNTLE1BQU0sQ0FBQ1AsSUFBSVEsSUFBSTtBQUNqQyxFQUNBLG1DQUFtQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy91dGlscy9tc2dJZEZuLmpzPzU4YjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbXNnSWQgfSBmcm9tICdAbGlicDJwL3B1YnN1Yi91dGlscyc7XG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tICdtdWx0aWZvcm1hdHMvaGFzaGVzL3NoYTInO1xuLyoqXG4gKiBHZW5lcmF0ZSBhIG1lc3NhZ2UgaWQsIGJhc2VkIG9uIHRoZSBga2V5YCBhbmQgYHNlcW5vYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbXNnSWRGblN0cmljdFNpZ24obXNnKSB7XG4gICAgaWYgKG1zZy50eXBlICE9PSAnc2lnbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIHNpZ25lZCBtZXNzYWdlIHR5cGUnKTtcbiAgICB9XG4gICAgLy8gU2hvdWxkIG5ldmVyIGhhcHBlblxuICAgIGlmIChtc2cuc2VxdWVuY2VOdW1iZXIgPT0gbnVsbClcbiAgICAgICAgdGhyb3cgRXJyb3IoJ21pc3Npbmcgc2Vxbm8gZmllbGQnKTtcbiAgICAvLyBUT0RPOiBTaG91bGQgdXNlIC5mcm9tIGhlcmUgb3Iga2V5P1xuICAgIHJldHVybiBtc2dJZChtc2cuZnJvbS50b0J5dGVzKCksIG1zZy5zZXF1ZW5jZU51bWJlcik7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEgbWVzc2FnZSBpZCwgYmFzZWQgb24gbWVzc2FnZSBgZGF0YWBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1zZ0lkRm5TdHJpY3ROb1NpZ24obXNnKSB7XG4gICAgcmV0dXJuIHNoYTI1Ni5lbmNvZGUobXNnLmRhdGEpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXNnSWRGbi5qcy5tYXAiXSwibmFtZXMiOlsibXNnSWQiLCJzaGEyNTYiLCJtc2dJZEZuU3RyaWN0U2lnbiIsIm1zZyIsInR5cGUiLCJFcnJvciIsInNlcXVlbmNlTnVtYmVyIiwiZnJvbSIsInRvQnl0ZXMiLCJtc2dJZEZuU3RyaWN0Tm9TaWduIiwiZW5jb2RlIiwiZGF0YSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/msgIdFn.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/multiaddr.js":
/*!******************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/multiaddr.js ***!
\******************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ multiaddrToIPStr: () => (/* binding */ multiaddrToIPStr)\n/* harmony export */ });\n/* harmony import */ var _multiformats_multiaddr_convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @multiformats/multiaddr/convert */ \"(ssr)/./node_modules/@multiformats/multiaddr/dist/src/convert.js\");\n\n// Protocols https://github.com/multiformats/multiaddr/blob/master/protocols.csv\n// code size name\n// 4 32 ip4\n// 41 128 ip6\nvar Protocol;\n(function(Protocol) {\n Protocol[Protocol[\"ip4\"] = 4] = \"ip4\";\n Protocol[Protocol[\"ip6\"] = 41] = \"ip6\";\n})(Protocol || (Protocol = {}));\nfunction multiaddrToIPStr(multiaddr) {\n for (const tuple of multiaddr.tuples()){\n switch(tuple[0]){\n case Protocol.ip4:\n case Protocol.ip6:\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return (0,_multiformats_multiaddr_convert__WEBPACK_IMPORTED_MODULE_0__.convertToString)(tuple[0], tuple[1]);\n default:\n break;\n }\n }\n return null;\n} //# sourceMappingURL=multiaddr.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL211bHRpYWRkci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrRTtBQUNsRSxnRkFBZ0Y7QUFDaEYsbUJBQW1CO0FBQ25CLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsSUFBSUM7QUFDSCxVQUFVQSxRQUFRO0lBQ2ZBLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUc7SUFDaENBLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUc7QUFDckMsR0FBR0EsWUFBYUEsQ0FBQUEsV0FBVyxDQUFDO0FBQ3JCLFNBQVNDLGlCQUFpQkMsU0FBUztJQUN0QyxLQUFLLE1BQU1DLFNBQVNELFVBQVVFLE1BQU0sR0FBSTtRQUNwQyxPQUFRRCxLQUFLLENBQUMsRUFBRTtZQUNaLEtBQUtILFNBQVNLLEdBQUc7WUFDakIsS0FBS0wsU0FBU00sR0FBRztnQkFDYixvRUFBb0U7Z0JBQ3BFLE9BQU9QLGdGQUFlQSxDQUFDSSxLQUFLLENBQUMsRUFBRSxFQUFFQSxLQUFLLENBQUMsRUFBRTtZQUM3QztnQkFDSTtRQUNSO0lBQ0o7SUFDQSxPQUFPO0FBQ1gsRUFDQSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvdXRpbHMvbXVsdGlhZGRyLmpzPzE5ODIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29udmVydFRvU3RyaW5nIH0gZnJvbSAnQG11bHRpZm9ybWF0cy9tdWx0aWFkZHIvY29udmVydCc7XG4vLyBQcm90b2NvbHMgaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIvYmxvYi9tYXN0ZXIvcHJvdG9jb2xzLmNzdlxuLy8gY29kZSAgc2l6ZSAgbmFtZVxuLy8gNCAgICAgMzIgICAgaXA0XG4vLyA0MSAgICAxMjggICBpcDZcbnZhciBQcm90b2NvbDtcbihmdW5jdGlvbiAoUHJvdG9jb2wpIHtcbiAgICBQcm90b2NvbFtQcm90b2NvbFtcImlwNFwiXSA9IDRdID0gXCJpcDRcIjtcbiAgICBQcm90b2NvbFtQcm90b2NvbFtcImlwNlwiXSA9IDQxXSA9IFwiaXA2XCI7XG59KShQcm90b2NvbCB8fCAoUHJvdG9jb2wgPSB7fSkpO1xuZXhwb3J0IGZ1bmN0aW9uIG11bHRpYWRkclRvSVBTdHIobXVsdGlhZGRyKSB7XG4gICAgZm9yIChjb25zdCB0dXBsZSBvZiBtdWx0aWFkZHIudHVwbGVzKCkpIHtcbiAgICAgICAgc3dpdGNoICh0dXBsZVswXSkge1xuICAgICAgICAgICAgY2FzZSBQcm90b2NvbC5pcDQ6XG4gICAgICAgICAgICBjYXNlIFByb3RvY29sLmlwNjpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9TdHJpbmcodHVwbGVbMF0sIHR1cGxlWzFdKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aWFkZHIuanMubWFwIl0sIm5hbWVzIjpbImNvbnZlcnRUb1N0cmluZyIsIlByb3RvY29sIiwibXVsdGlhZGRyVG9JUFN0ciIsIm11bHRpYWRkciIsInR1cGxlIiwidHVwbGVzIiwiaXA0IiwiaXA2Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/multiaddr.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/publishConfig.js":
/*!**********************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/publishConfig.js ***!
\**********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getPublishConfigFromPeerId: () => (/* binding */ getPublishConfigFromPeerId)\n/* harmony export */ });\n/* harmony import */ var _libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @libp2p/crypto/keys */ \"(ssr)/./node_modules/@libp2p/crypto/dist/src/keys/index.js\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/pubsub/index.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../types.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.js\");\n\n\n\n/**\n * Prepare a PublishConfig object from a PeerId.\n */ async function getPublishConfigFromPeerId(signaturePolicy, peerId) {\n switch(signaturePolicy){\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.StrictSign:\n {\n if (peerId == null) {\n throw Error(\"Must provide PeerId\");\n }\n if (peerId.privateKey == null) {\n throw Error(\"Cannot sign message, no private key present\");\n }\n if (peerId.publicKey == null) {\n throw Error(\"Cannot sign message, no public key present\");\n }\n // Transform privateKey once at initialization time instead of once per message\n const privateKey = await (0,_libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_1__.unmarshalPrivateKey)(peerId.privateKey);\n return {\n type: _types_js__WEBPACK_IMPORTED_MODULE_2__.PublishConfigType.Signing,\n author: peerId,\n key: peerId.publicKey,\n privateKey\n };\n }\n case _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.StrictNoSign:\n return {\n type: _types_js__WEBPACK_IMPORTED_MODULE_2__.PublishConfigType.Anonymous\n };\n default:\n throw new Error(`Unknown signature policy \"${signaturePolicy}\"`);\n }\n} //# sourceMappingURL=publishConfig.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL3B1Ymxpc2hDb25maWcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEwRDtBQUNHO0FBQ2I7QUFDaEQ7O0NBRUMsR0FDTSxlQUFlSSwyQkFBMkJDLGVBQWUsRUFBRUMsTUFBTTtJQUNwRSxPQUFRRDtRQUNKLEtBQUtKLHlEQUFVQTtZQUFFO2dCQUNiLElBQUlLLFVBQVUsTUFBTTtvQkFDaEIsTUFBTUMsTUFBTTtnQkFDaEI7Z0JBQ0EsSUFBSUQsT0FBT0UsVUFBVSxJQUFJLE1BQU07b0JBQzNCLE1BQU1ELE1BQU07Z0JBQ2hCO2dCQUNBLElBQUlELE9BQU9HLFNBQVMsSUFBSSxNQUFNO29CQUMxQixNQUFNRixNQUFNO2dCQUNoQjtnQkFDQSwrRUFBK0U7Z0JBQy9FLE1BQU1DLGFBQWEsTUFBTVIsd0VBQW1CQSxDQUFDTSxPQUFPRSxVQUFVO2dCQUM5RCxPQUFPO29CQUNIRSxNQUFNUCx3REFBaUJBLENBQUNRLE9BQU87b0JBQy9CQyxRQUFRTjtvQkFDUk8sS0FBS1AsT0FBT0csU0FBUztvQkFDckJEO2dCQUNKO1lBQ0o7UUFDQSxLQUFLTiwyREFBWUE7WUFDYixPQUFPO2dCQUNIUSxNQUFNUCx3REFBaUJBLENBQUNXLFNBQVM7WUFDckM7UUFDSjtZQUNJLE1BQU0sSUFBSVAsTUFBTSxDQUFDLDBCQUEwQixFQUFFRixnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZFO0FBQ0osRUFDQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1nb3NzaXBzdWIvZGlzdC9zcmMvdXRpbHMvcHVibGlzaENvbmZpZy5qcz9mMmYzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVubWFyc2hhbFByaXZhdGVLZXkgfSBmcm9tICdAbGlicDJwL2NyeXB0by9rZXlzJztcbmltcG9ydCB7IFN0cmljdFNpZ24sIFN0cmljdE5vU2lnbiB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmltcG9ydCB7IFB1Ymxpc2hDb25maWdUeXBlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuLyoqXG4gKiBQcmVwYXJlIGEgUHVibGlzaENvbmZpZyBvYmplY3QgZnJvbSBhIFBlZXJJZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFB1Ymxpc2hDb25maWdGcm9tUGVlcklkKHNpZ25hdHVyZVBvbGljeSwgcGVlcklkKSB7XG4gICAgc3dpdGNoIChzaWduYXR1cmVQb2xpY3kpIHtcbiAgICAgICAgY2FzZSBTdHJpY3RTaWduOiB7XG4gICAgICAgICAgICBpZiAocGVlcklkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignTXVzdCBwcm92aWRlIFBlZXJJZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBlZXJJZC5wcml2YXRlS2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IHNpZ24gbWVzc2FnZSwgbm8gcHJpdmF0ZSBrZXkgcHJlc2VudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBlZXJJZC5wdWJsaWNLZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdDYW5ub3Qgc2lnbiBtZXNzYWdlLCBubyBwdWJsaWMga2V5IHByZXNlbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwcml2YXRlS2V5IG9uY2UgYXQgaW5pdGlhbGl6YXRpb24gdGltZSBpbnN0ZWFkIG9mIG9uY2UgcGVyIG1lc3NhZ2VcbiAgICAgICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBhd2FpdCB1bm1hcnNoYWxQcml2YXRlS2V5KHBlZXJJZC5wcml2YXRlS2V5KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogUHVibGlzaENvbmZpZ1R5cGUuU2lnbmluZyxcbiAgICAgICAgICAgICAgICBhdXRob3I6IHBlZXJJZCxcbiAgICAgICAgICAgICAgICBrZXk6IHBlZXJJZC5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgcHJpdmF0ZUtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFN0cmljdE5vU2lnbjpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogUHVibGlzaENvbmZpZ1R5cGUuQW5vbnltb3VzXG4gICAgICAgICAgICB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNpZ25hdHVyZSBwb2xpY3kgXCIke3NpZ25hdHVyZVBvbGljeX1cImApO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hDb25maWcuanMubWFwIl0sIm5hbWVzIjpbInVubWFyc2hhbFByaXZhdGVLZXkiLCJTdHJpY3RTaWduIiwiU3RyaWN0Tm9TaWduIiwiUHVibGlzaENvbmZpZ1R5cGUiLCJnZXRQdWJsaXNoQ29uZmlnRnJvbVBlZXJJZCIsInNpZ25hdHVyZVBvbGljeSIsInBlZXJJZCIsIkVycm9yIiwicHJpdmF0ZUtleSIsInB1YmxpY0tleSIsInR5cGUiLCJTaWduaW5nIiwiYXV0aG9yIiwia2V5IiwiQW5vbnltb3VzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/publishConfig.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.js":
/*!************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.js ***!
\************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MapDef: () => (/* binding */ MapDef),\n/* harmony export */ removeFirstNItemsFromSet: () => (/* binding */ removeFirstNItemsFromSet),\n/* harmony export */ removeItemsFromSet: () => (/* binding */ removeItemsFromSet)\n/* harmony export */ });\n/**\n * Exclude up to `ineed` items from a set if item meets condition `cond`\n */ function removeItemsFromSet(superSet, ineed, cond = ()=>true) {\n const subset = new Set();\n if (ineed <= 0) return subset;\n for (const id of superSet){\n if (subset.size >= ineed) break;\n if (cond(id)) {\n subset.add(id);\n superSet.delete(id);\n }\n }\n return subset;\n}\n/**\n * Exclude up to `ineed` items from a set\n */ function removeFirstNItemsFromSet(superSet, ineed) {\n return removeItemsFromSet(superSet, ineed, ()=>true);\n}\nclass MapDef extends Map {\n constructor(getDefault){\n super();\n this.getDefault = getDefault;\n }\n getOrDefault(key) {\n let value = super.get(key);\n if (value === undefined) {\n value = this.getDefault();\n this.set(key, value);\n }\n return value;\n }\n} //# sourceMappingURL=set.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL3NldC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Q0FFQyxHQUNNLFNBQVNBLG1CQUFtQkMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sSUFBTSxJQUFJO0lBQ2pFLE1BQU1DLFNBQVMsSUFBSUM7SUFDbkIsSUFBSUgsU0FBUyxHQUNULE9BQU9FO0lBQ1gsS0FBSyxNQUFNRSxNQUFNTCxTQUFVO1FBQ3ZCLElBQUlHLE9BQU9HLElBQUksSUFBSUwsT0FDZjtRQUNKLElBQUlDLEtBQUtHLEtBQUs7WUFDVkYsT0FBT0ksR0FBRyxDQUFDRjtZQUNYTCxTQUFTUSxNQUFNLENBQUNIO1FBQ3BCO0lBQ0o7SUFDQSxPQUFPRjtBQUNYO0FBQ0E7O0NBRUMsR0FDTSxTQUFTTSx5QkFBeUJULFFBQVEsRUFBRUMsS0FBSztJQUNwRCxPQUFPRixtQkFBbUJDLFVBQVVDLE9BQU8sSUFBTTtBQUNyRDtBQUNPLE1BQU1TLGVBQWVDO0lBRXhCQyxZQUFZQyxVQUFVLENBQUU7UUFDcEIsS0FBSztRQUNMLElBQUksQ0FBQ0EsVUFBVSxHQUFHQTtJQUN0QjtJQUNBQyxhQUFhQyxHQUFHLEVBQUU7UUFDZCxJQUFJQyxRQUFRLEtBQUssQ0FBQ0MsSUFBSUY7UUFDdEIsSUFBSUMsVUFBVUUsV0FBVztZQUNyQkYsUUFBUSxJQUFJLENBQUNILFVBQVU7WUFDdkIsSUFBSSxDQUFDTSxHQUFHLENBQUNKLEtBQUtDO1FBQ2xCO1FBQ0EsT0FBT0E7SUFDWDtBQUNKLEVBQ0EsK0JBQStCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL3NldC5qcz81YzMzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhjbHVkZSB1cCB0byBgaW5lZWRgIGl0ZW1zIGZyb20gYSBzZXQgaWYgaXRlbSBtZWV0cyBjb25kaXRpb24gYGNvbmRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJdGVtc0Zyb21TZXQoc3VwZXJTZXQsIGluZWVkLCBjb25kID0gKCkgPT4gdHJ1ZSkge1xuICAgIGNvbnN0IHN1YnNldCA9IG5ldyBTZXQoKTtcbiAgICBpZiAoaW5lZWQgPD0gMClcbiAgICAgICAgcmV0dXJuIHN1YnNldDtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHN1cGVyU2V0KSB7XG4gICAgICAgIGlmIChzdWJzZXQuc2l6ZSA+PSBpbmVlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBpZiAoY29uZChpZCkpIHtcbiAgICAgICAgICAgIHN1YnNldC5hZGQoaWQpO1xuICAgICAgICAgICAgc3VwZXJTZXQuZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3Vic2V0O1xufVxuLyoqXG4gKiBFeGNsdWRlIHVwIHRvIGBpbmVlZGAgaXRlbXMgZnJvbSBhIHNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmlyc3ROSXRlbXNGcm9tU2V0KHN1cGVyU2V0LCBpbmVlZCkge1xuICAgIHJldHVybiByZW1vdmVJdGVtc0Zyb21TZXQoc3VwZXJTZXQsIGluZWVkLCAoKSA9PiB0cnVlKTtcbn1cbmV4cG9ydCBjbGFzcyBNYXBEZWYgZXh0ZW5kcyBNYXAge1xuICAgIGdldERlZmF1bHQ7XG4gICAgY29uc3RydWN0b3IoZ2V0RGVmYXVsdCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmdldERlZmF1bHQgPSBnZXREZWZhdWx0O1xuICAgIH1cbiAgICBnZXRPckRlZmF1bHQoa2V5KSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHN1cGVyLmdldChrZXkpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXQuanMubWFwIl0sIm5hbWVzIjpbInJlbW92ZUl0ZW1zRnJvbVNldCIsInN1cGVyU2V0IiwiaW5lZWQiLCJjb25kIiwic3Vic2V0IiwiU2V0IiwiaWQiLCJzaXplIiwiYWRkIiwiZGVsZXRlIiwicmVtb3ZlRmlyc3ROSXRlbXNGcm9tU2V0IiwiTWFwRGVmIiwiTWFwIiwiY29uc3RydWN0b3IiLCJnZXREZWZhdWx0IiwiZ2V0T3JEZWZhdWx0Iiwia2V5IiwidmFsdWUiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/shuffle.js":
/*!****************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/shuffle.js ***!
\****************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ shuffle: () => (/* binding */ shuffle)\n/* harmony export */ });\n/**\n * Pseudo-randomly shuffles an array\n *\n * Mutates the input array\n */ function shuffle(arr) {\n if (arr.length <= 1) {\n return arr;\n }\n const randInt = ()=>{\n return Math.floor(Math.random() * Math.floor(arr.length));\n };\n for(let i = 0; i < arr.length; i++){\n const j = randInt();\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n }\n return arr;\n} //# sourceMappingURL=shuffle.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL3NodWZmbGUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0NBSUMsR0FDTSxTQUFTQSxRQUFRQyxHQUFHO0lBQ3ZCLElBQUlBLElBQUlDLE1BQU0sSUFBSSxHQUFHO1FBQ2pCLE9BQU9EO0lBQ1g7SUFDQSxNQUFNRSxVQUFVO1FBQ1osT0FBT0MsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxNQUFNLEtBQUtGLEtBQUtDLEtBQUssQ0FBQ0osSUFBSUMsTUFBTTtJQUMzRDtJQUNBLElBQUssSUFBSUssSUFBSSxHQUFHQSxJQUFJTixJQUFJQyxNQUFNLEVBQUVLLElBQUs7UUFDakMsTUFBTUMsSUFBSUw7UUFDVixNQUFNTSxNQUFNUixHQUFHLENBQUNNLEVBQUU7UUFDbEJOLEdBQUcsQ0FBQ00sRUFBRSxHQUFHTixHQUFHLENBQUNPLEVBQUU7UUFDZlAsR0FBRyxDQUFDTyxFQUFFLEdBQUdDO0lBQ2I7SUFDQSxPQUFPUjtBQUNYLEVBQ0EsbUNBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL3NodWZmbGUuanM/OWYyNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBzZXVkby1yYW5kb21seSBzaHVmZmxlcyBhbiBhcnJheVxuICpcbiAqIE11dGF0ZXMgdGhlIGlucHV0IGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlKGFycikge1xuICAgIGlmIChhcnIubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgY29uc3QgcmFuZEludCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1hdGguZmxvb3IoYXJyLmxlbmd0aCkpO1xuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaiA9IHJhbmRJbnQoKTtcbiAgICAgICAgY29uc3QgdG1wID0gYXJyW2ldO1xuICAgICAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgICAgIGFycltqXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNodWZmbGUuanMubWFwIl0sIm5hbWVzIjpbInNodWZmbGUiLCJhcnIiLCJsZW5ndGgiLCJyYW5kSW50IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiaSIsImoiLCJ0bXAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/shuffle.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/time-cache.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/time-cache.js ***!
\*******************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SimpleTimeCache: () => (/* binding */ SimpleTimeCache)\n/* harmony export */ });\n/**\n * This is similar to https://github.com/daviddias/time-cache/blob/master/src/index.js\n * for our own need, we don't use lodash throttle to improve performance.\n * This gives 4x - 5x performance gain compared to npm TimeCache\n */ class SimpleTimeCache {\n constructor(opts){\n this.entries = new Map();\n this.validityMs = opts.validityMs;\n // allow negative validityMs so that this does not cache anything, spec test compliance.spec.js\n // sends duplicate messages and expect peer to receive all. Application likely uses positive validityMs\n }\n get size() {\n return this.entries.size;\n }\n /** Returns true if there was a key collision and the entry is dropped */ put(key, value) {\n if (this.entries.has(key)) {\n // Key collisions break insertion order in the entries cache, which break prune logic.\n // prune relies on each iterated entry to have strictly ascending validUntilMs, else it\n // won't prune expired entries and SimpleTimeCache will grow unexpectedly.\n // As of Oct 2022 NodeJS v16, inserting the same key twice with different value does not\n // change the key position in the iterator stream. A unit test asserts this behaviour.\n return true;\n }\n this.entries.set(key, {\n value,\n validUntilMs: Date.now() + this.validityMs\n });\n return false;\n }\n prune() {\n const now = Date.now();\n for (const [k, v] of this.entries.entries()){\n if (v.validUntilMs < now) {\n this.entries.delete(k);\n } else {\n break;\n }\n }\n }\n has(key) {\n return this.entries.has(key);\n }\n get(key) {\n const value = this.entries.get(key);\n return value != null && value.validUntilMs >= Date.now() ? value.value : undefined;\n }\n clear() {\n this.entries.clear();\n }\n} //# sourceMappingURL=time-cache.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtZ29zc2lwc3ViL2Rpc3Qvc3JjL3V0aWxzL3RpbWUtY2FjaGUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0NBSUMsR0FDTSxNQUFNQTtJQUdUQyxZQUFZQyxJQUFJLENBQUU7YUFGbEJDLFVBQVUsSUFBSUM7UUFHVixJQUFJLENBQUNDLFVBQVUsR0FBR0gsS0FBS0csVUFBVTtJQUNqQywrRkFBK0Y7SUFDL0YsdUdBQXVHO0lBQzNHO0lBQ0EsSUFBSUMsT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUNHLElBQUk7SUFDNUI7SUFDQSx1RUFBdUUsR0FDdkVDLElBQUlDLEdBQUcsRUFBRUMsS0FBSyxFQUFFO1FBQ1osSUFBSSxJQUFJLENBQUNOLE9BQU8sQ0FBQ08sR0FBRyxDQUFDRixNQUFNO1lBQ3ZCLHNGQUFzRjtZQUN0Rix1RkFBdUY7WUFDdkYsMEVBQTBFO1lBQzFFLHdGQUF3RjtZQUN4RixzRkFBc0Y7WUFDdEYsT0FBTztRQUNYO1FBQ0EsSUFBSSxDQUFDTCxPQUFPLENBQUNRLEdBQUcsQ0FBQ0gsS0FBSztZQUFFQztZQUFPRyxjQUFjQyxLQUFLQyxHQUFHLEtBQUssSUFBSSxDQUFDVCxVQUFVO1FBQUM7UUFDMUUsT0FBTztJQUNYO0lBQ0FVLFFBQVE7UUFDSixNQUFNRCxNQUFNRCxLQUFLQyxHQUFHO1FBQ3BCLEtBQUssTUFBTSxDQUFDRSxHQUFHQyxFQUFFLElBQUksSUFBSSxDQUFDZCxPQUFPLENBQUNBLE9BQU8sR0FBSTtZQUN6QyxJQUFJYyxFQUFFTCxZQUFZLEdBQUdFLEtBQUs7Z0JBQ3RCLElBQUksQ0FBQ1gsT0FBTyxDQUFDZSxNQUFNLENBQUNGO1lBQ3hCLE9BQ0s7Z0JBR0Q7WUFDSjtRQUNKO0lBQ0o7SUFDQU4sSUFBSUYsR0FBRyxFQUFFO1FBQ0wsT0FBTyxJQUFJLENBQUNMLE9BQU8sQ0FBQ08sR0FBRyxDQUFDRjtJQUM1QjtJQUNBVyxJQUFJWCxHQUFHLEVBQUU7UUFDTCxNQUFNQyxRQUFRLElBQUksQ0FBQ04sT0FBTyxDQUFDZ0IsR0FBRyxDQUFDWDtRQUMvQixPQUFPLFNBQVUsUUFBU0MsTUFBTUcsWUFBWSxJQUFJQyxLQUFLQyxHQUFHLEtBQUtMLE1BQU1BLEtBQUssR0FBR1c7SUFDL0U7SUFDQUMsUUFBUTtRQUNKLElBQUksQ0FBQ2xCLE9BQU8sQ0FBQ2tCLEtBQUs7SUFDdEI7QUFDSixFQUNBLHNDQUFzQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLWdvc3NpcHN1Yi9kaXN0L3NyYy91dGlscy90aW1lLWNhY2hlLmpzPzdkYzEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGlzIHNpbWlsYXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkZGlhcy90aW1lLWNhY2hlL2Jsb2IvbWFzdGVyL3NyYy9pbmRleC5qc1xuICogZm9yIG91ciBvd24gbmVlZCwgd2UgZG9uJ3QgdXNlIGxvZGFzaCB0aHJvdHRsZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuICogVGhpcyBnaXZlcyA0eCAtIDV4IHBlcmZvcm1hbmNlIGdhaW4gY29tcGFyZWQgdG8gbnBtIFRpbWVDYWNoZVxuICovXG5leHBvcnQgY2xhc3MgU2ltcGxlVGltZUNhY2hlIHtcbiAgICBlbnRyaWVzID0gbmV3IE1hcCgpO1xuICAgIHZhbGlkaXR5TXM7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICB0aGlzLnZhbGlkaXR5TXMgPSBvcHRzLnZhbGlkaXR5TXM7XG4gICAgICAgIC8vIGFsbG93IG5lZ2F0aXZlIHZhbGlkaXR5TXMgc28gdGhhdCB0aGlzIGRvZXMgbm90IGNhY2hlIGFueXRoaW5nLCBzcGVjIHRlc3QgY29tcGxpYW5jZS5zcGVjLmpzXG4gICAgICAgIC8vIHNlbmRzIGR1cGxpY2F0ZSBtZXNzYWdlcyBhbmQgZXhwZWN0IHBlZXIgdG8gcmVjZWl2ZSBhbGwuIEFwcGxpY2F0aW9uIGxpa2VseSB1c2VzIHBvc2l0aXZlIHZhbGlkaXR5TXNcbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMuc2l6ZTtcbiAgICB9XG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYSBrZXkgY29sbGlzaW9uIGFuZCB0aGUgZW50cnkgaXMgZHJvcHBlZCAqL1xuICAgIHB1dChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmVudHJpZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIC8vIEtleSBjb2xsaXNpb25zIGJyZWFrIGluc2VydGlvbiBvcmRlciBpbiB0aGUgZW50cmllcyBjYWNoZSwgd2hpY2ggYnJlYWsgcHJ1bmUgbG9naWMuXG4gICAgICAgICAgICAvLyBwcnVuZSByZWxpZXMgb24gZWFjaCBpdGVyYXRlZCBlbnRyeSB0byBoYXZlIHN0cmljdGx5IGFzY2VuZGluZyB2YWxpZFVudGlsTXMsIGVsc2UgaXRcbiAgICAgICAgICAgIC8vIHdvbid0IHBydW5lIGV4cGlyZWQgZW50cmllcyBhbmQgU2ltcGxlVGltZUNhY2hlIHdpbGwgZ3JvdyB1bmV4cGVjdGVkbHkuXG4gICAgICAgICAgICAvLyBBcyBvZiBPY3QgMjAyMiBOb2RlSlMgdjE2LCBpbnNlcnRpbmcgdGhlIHNhbWUga2V5IHR3aWNlIHdpdGggZGlmZmVyZW50IHZhbHVlIGRvZXMgbm90XG4gICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIGtleSBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0b3Igc3RyZWFtLiBBIHVuaXQgdGVzdCBhc3NlcnRzIHRoaXMgYmVoYXZpb3VyLlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdmFsdWUsIHZhbGlkVW50aWxNczogRGF0ZS5ub3coKSArIHRoaXMudmFsaWRpdHlNcyB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwcnVuZSgpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5lbnRyaWVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHYudmFsaWRVbnRpbE1zIDwgbm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEVudHJpZXMgYXJlIGluc2VydGVkIHdpdGggc3RyaWN0bHkgYXNjZW5kaW5nIHZhbGlkVW50aWxNcy5cbiAgICAgICAgICAgICAgICAvLyBTdG9wIGVhcmx5IHRvIHNhdmUgaXRlcmF0aW9uc1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5oYXMoa2V5KTtcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZW50cmllcy5nZXQoa2V5KTtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSAhPSBudWxsKSAmJiB2YWx1ZS52YWxpZFVudGlsTXMgPj0gRGF0ZS5ub3coKSA/IHZhbHVlLnZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmNsZWFyKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZS1jYWNoZS5qcy5tYXAiXSwibmFtZXMiOlsiU2ltcGxlVGltZUNhY2hlIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiZW50cmllcyIsIk1hcCIsInZhbGlkaXR5TXMiLCJzaXplIiwicHV0Iiwia2V5IiwidmFsdWUiLCJoYXMiLCJzZXQiLCJ2YWxpZFVudGlsTXMiLCJEYXRlIiwibm93IiwicHJ1bmUiLCJrIiwidiIsImRlbGV0ZSIsImdldCIsInVuZGVmaW5lZCIsImNsZWFyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/time-cache.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/constants.js":
/*!********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/constants.js ***!
\********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DUMP_SESSION_KEYS: () => (/* binding */ DUMP_SESSION_KEYS),\n/* harmony export */ NOISE_MSG_MAX_LENGTH_BYTES: () => (/* binding */ NOISE_MSG_MAX_LENGTH_BYTES),\n/* harmony export */ NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG: () => (/* binding */ NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG)\n/* harmony export */ });\nconst NOISE_MSG_MAX_LENGTH_BYTES = 65535;\nconst NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG = NOISE_MSG_MAX_LENGTH_BYTES - 16;\nconst DUMP_SESSION_KEYS = Boolean(globalThis.process?.env?.DUMP_SESSION_KEYS); //# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFPLE1BQU1BLDZCQUE2QixNQUFNO0FBQ3pDLE1BQU1DLHlDQUF5Q0QsNkJBQTZCLEdBQUc7QUFDL0UsTUFBTUUsb0JBQW9CQyxRQUFRQyxXQUFXQyxPQUFPLEVBQUVDLEtBQUtKLG1CQUFtQixDQUNyRixxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9kaXN0L3NyYy9jb25zdGFudHMuanM/NzU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTk9JU0VfTVNHX01BWF9MRU5HVEhfQllURVMgPSA2NTUzNTtcbmV4cG9ydCBjb25zdCBOT0lTRV9NU0dfTUFYX0xFTkdUSF9CWVRFU19XSVRIT1VUX1RBRyA9IE5PSVNFX01TR19NQVhfTEVOR1RIX0JZVEVTIC0gMTY7XG5leHBvcnQgY29uc3QgRFVNUF9TRVNTSU9OX0tFWVMgPSBCb29sZWFuKGdsb2JhbFRoaXMucHJvY2Vzcz8uZW52Py5EVU1QX1NFU1NJT05fS0VZUyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIl0sIm5hbWVzIjpbIk5PSVNFX01TR19NQVhfTEVOR1RIX0JZVEVTIiwiTk9JU0VfTVNHX01BWF9MRU5HVEhfQllURVNfV0lUSE9VVF9UQUciLCJEVU1QX1NFU1NJT05fS0VZUyIsIkJvb2xlYW4iLCJnbG9iYWxUaGlzIiwicHJvY2VzcyIsImVudiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/constants.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/index.js":
/*!***********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/index.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defaultCrypto: () => (/* binding */ defaultCrypto)\n/* harmony export */ });\n/* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:crypto */ \"node:crypto\");\n/* harmony import */ var _chainsafe_as_chacha20poly1305__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @chainsafe/as-chacha20poly1305 */ \"(ssr)/./node_modules/@chainsafe/as-chacha20poly1305/lib/src/index.js\");\n/* harmony import */ var _chainsafe_as_sha256__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @chainsafe/as-sha256 */ \"(ssr)/./node_modules/@chainsafe/as-sha256/lib/index.js\");\n/* harmony import */ var uint8arraylist__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arraylist */ \"(ssr)/./node_modules/uint8arraylist/dist/src/index.js\");\n/* harmony import */ var wherearewe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! wherearewe */ \"(ssr)/./node_modules/wherearewe/src/index.js\");\n/* harmony import */ var _js_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./js.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/js.js\");\n\n\n\n\n\n\nconst ctx = (0,_chainsafe_as_chacha20poly1305__WEBPACK_IMPORTED_MODULE_1__.newInstance)();\nconst asImpl = new _chainsafe_as_chacha20poly1305__WEBPACK_IMPORTED_MODULE_1__.ChaCha20Poly1305(ctx);\nconst CHACHA_POLY1305 = \"chacha20-poly1305\";\nconst PKCS8_PREFIX = Buffer.from([\n 0x30,\n 0x2e,\n 0x02,\n 0x01,\n 0x00,\n 0x30,\n 0x05,\n 0x06,\n 0x03,\n 0x2b,\n 0x65,\n 0x6e,\n 0x04,\n 0x22,\n 0x04,\n 0x20\n]);\nconst X25519_PREFIX = Buffer.from([\n 0x30,\n 0x2a,\n 0x30,\n 0x05,\n 0x06,\n 0x03,\n 0x2b,\n 0x65,\n 0x6e,\n 0x03,\n 0x21,\n 0x00\n]);\nconst nodeCrypto = {\n hashSHA256 (data) {\n const hash = node_crypto__WEBPACK_IMPORTED_MODULE_0__.createHash(\"sha256\");\n if (data instanceof Uint8Array) {\n return hash.update(data).digest();\n }\n for (const buf of data){\n hash.update(buf);\n }\n return hash.digest();\n },\n chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) {\n const cipher = node_crypto__WEBPACK_IMPORTED_MODULE_0__.createCipheriv(CHACHA_POLY1305, k, nonce, {\n authTagLength: 16\n });\n cipher.setAAD(ad, {\n plaintextLength: plaintext.byteLength\n });\n if (plaintext instanceof Uint8Array) {\n const updated = cipher.update(plaintext);\n const final = cipher.final();\n const tag = cipher.getAuthTag();\n return Buffer.concat([\n updated,\n tag,\n final\n ], updated.byteLength + tag.byteLength + final.byteLength);\n }\n const output = new uint8arraylist__WEBPACK_IMPORTED_MODULE_3__.Uint8ArrayList();\n for (const buf of plaintext){\n output.append(cipher.update(buf));\n }\n const final = cipher.final();\n if (final.byteLength > 0) {\n output.append(final);\n }\n output.append(cipher.getAuthTag());\n return output;\n },\n chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, _dst) {\n const authTag = ciphertext.subarray(ciphertext.length - 16);\n const decipher = node_crypto__WEBPACK_IMPORTED_MODULE_0__.createDecipheriv(CHACHA_POLY1305, k, nonce, {\n authTagLength: 16\n });\n let text;\n if (ciphertext instanceof Uint8Array) {\n text = ciphertext.subarray(0, ciphertext.length - 16);\n } else {\n text = ciphertext.sublist(0, ciphertext.length - 16);\n }\n decipher.setAAD(ad, {\n plaintextLength: text.byteLength\n });\n decipher.setAuthTag(authTag);\n if (text instanceof Uint8Array) {\n const output = decipher.update(text);\n const final = decipher.final();\n if (final.byteLength > 0) {\n return Buffer.concat([\n output,\n final\n ], output.byteLength + final.byteLength);\n }\n return output;\n }\n const output = new uint8arraylist__WEBPACK_IMPORTED_MODULE_3__.Uint8ArrayList();\n for (const buf of text){\n output.append(decipher.update(buf));\n }\n const final = decipher.final();\n if (final.byteLength > 0) {\n output.append(final);\n }\n return output;\n }\n};\nconst asCrypto = {\n hashSHA256 (data) {\n return (0,_chainsafe_as_sha256__WEBPACK_IMPORTED_MODULE_2__.digest)(data.subarray());\n },\n chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) {\n return asImpl.seal(k, nonce, plaintext.subarray(), ad);\n },\n chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, dst) {\n return asImpl.open(k, nonce, ciphertext.subarray(), ad, dst);\n }\n};\n// benchmarks show that for chacha20poly1305\n// the as implementation is faster for smaller payloads(<1200)\n// and the node implementation is faster for larger payloads\nconst defaultCrypto = {\n ..._js_js__WEBPACK_IMPORTED_MODULE_5__.pureJsCrypto,\n hashSHA256 (data) {\n return nodeCrypto.hashSHA256(data);\n },\n chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) {\n if (plaintext.byteLength < 1200) {\n return asCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k);\n }\n return nodeCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k);\n },\n chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, dst) {\n if (ciphertext.byteLength < 1200) {\n return asCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst);\n }\n return nodeCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst);\n },\n generateX25519KeyPair () {\n const { publicKey, privateKey } = node_crypto__WEBPACK_IMPORTED_MODULE_0__.generateKeyPairSync(\"x25519\", {\n publicKeyEncoding: {\n type: \"spki\",\n format: \"der\"\n },\n privateKeyEncoding: {\n type: \"pkcs8\",\n format: \"der\"\n }\n });\n return {\n publicKey: publicKey.subarray(X25519_PREFIX.length),\n privateKey: privateKey.subarray(PKCS8_PREFIX.length)\n };\n },\n generateX25519KeyPairFromSeed (seed) {\n const privateKey = node_crypto__WEBPACK_IMPORTED_MODULE_0__.createPrivateKey({\n key: Buffer.concat([\n PKCS8_PREFIX,\n seed\n ], PKCS8_PREFIX.byteLength + seed.byteLength),\n type: \"pkcs8\",\n format: \"der\"\n });\n const publicKey = node_crypto__WEBPACK_IMPORTED_MODULE_0__.createPublicKey(privateKey).export({\n type: \"spki\",\n format: \"der\"\n }).subarray(X25519_PREFIX.length);\n return {\n publicKey,\n privateKey: seed\n };\n },\n generateX25519SharedKey (privateKey, publicKey) {\n if (publicKey instanceof Uint8Array) {\n publicKey = Buffer.concat([\n X25519_PREFIX,\n publicKey\n ], X25519_PREFIX.byteLength + publicKey.byteLength);\n } else {\n publicKey.prepend(X25519_PREFIX);\n publicKey = publicKey.subarray();\n }\n if (privateKey instanceof Uint8Array) {\n privateKey = Buffer.concat([\n PKCS8_PREFIX,\n privateKey\n ], PKCS8_PREFIX.byteLength + privateKey.byteLength);\n } else {\n privateKey.prepend(PKCS8_PREFIX);\n privateKey = privateKey.subarray();\n }\n return node_crypto__WEBPACK_IMPORTED_MODULE_0__.diffieHellman({\n publicKey: node_crypto__WEBPACK_IMPORTED_MODULE_0__.createPublicKey({\n key: Buffer.from(publicKey, publicKey.byteOffset, publicKey.byteLength),\n type: \"spki\",\n format: \"der\"\n }),\n privateKey: node_crypto__WEBPACK_IMPORTED_MODULE_0__.createPrivateKey({\n key: Buffer.from(privateKey, privateKey.byteOffset, privateKey.byteLength),\n type: \"pkcs8\",\n format: \"der\"\n })\n });\n }\n};\n// no chacha20-poly1305 in electron https://github.com/electron/electron/issues/24024\nif (wherearewe__WEBPACK_IMPORTED_MODULE_4__.isElectronMain) {\n defaultCrypto.chaCha20Poly1305Encrypt = asCrypto.chaCha20Poly1305Encrypt;\n defaultCrypto.chaCha20Poly1305Decrypt = asCrypto.chaCha20Poly1305Decrypt;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvY3J5cHRvL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBaUM7QUFDOEM7QUFDakM7QUFDRTtBQUNKO0FBQ0w7QUFDdkMsTUFBTU8sTUFBTU4sMkVBQVdBO0FBQ3ZCLE1BQU1PLFNBQVMsSUFBSU4sNEVBQWdCQSxDQUFDSztBQUNwQyxNQUFNRSxrQkFBa0I7QUFDeEIsTUFBTUMsZUFBZUMsT0FBT0MsSUFBSSxDQUFDO0lBQUM7SUFBTTtJQUFNO0lBQU07SUFBTTtJQUFNO0lBQU07SUFBTTtJQUFNO0lBQU07SUFBTTtJQUFNO0lBQU07SUFBTTtJQUFNO0lBQU07Q0FBSztBQUNqSSxNQUFNQyxnQkFBZ0JGLE9BQU9DLElBQUksQ0FBQztJQUFDO0lBQU07SUFBTTtJQUFNO0lBQU07SUFBTTtJQUFNO0lBQU07SUFBTTtJQUFNO0lBQU07SUFBTTtDQUFLO0FBQzFHLE1BQU1FLGFBQWE7SUFDZkMsWUFBV0MsSUFBSTtRQUNYLE1BQU1DLE9BQU9qQixtREFBaUIsQ0FBQztRQUMvQixJQUFJZ0IsZ0JBQWdCRyxZQUFZO1lBQzVCLE9BQU9GLEtBQUtHLE1BQU0sQ0FBQ0osTUFBTWIsTUFBTTtRQUNuQztRQUNBLEtBQUssTUFBTWtCLE9BQU9MLEtBQU07WUFDcEJDLEtBQUtHLE1BQU0sQ0FBQ0M7UUFDaEI7UUFDQSxPQUFPSixLQUFLZCxNQUFNO0lBQ3RCO0lBQ0FtQix5QkFBd0JDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxFQUFFLEVBQUVDLENBQUM7UUFDM0MsTUFBTUMsU0FBUzNCLHVEQUFxQixDQUFDUyxpQkFBaUJpQixHQUFHRixPQUFPO1lBQzVESyxlQUFlO1FBQ25CO1FBQ0FGLE9BQU9HLE1BQU0sQ0FBQ0wsSUFBSTtZQUFFTSxpQkFBaUJSLFVBQVVTLFVBQVU7UUFBQztRQUMxRCxJQUFJVCxxQkFBcUJKLFlBQVk7WUFDakMsTUFBTWMsVUFBVU4sT0FBT1AsTUFBTSxDQUFDRztZQUM5QixNQUFNVyxRQUFRUCxPQUFPTyxLQUFLO1lBQzFCLE1BQU1DLE1BQU1SLE9BQU9TLFVBQVU7WUFDN0IsT0FBT3pCLE9BQU8wQixNQUFNLENBQUM7Z0JBQUNKO2dCQUFTRTtnQkFBS0Q7YUFBTSxFQUFFRCxRQUFRRCxVQUFVLEdBQUdHLElBQUlILFVBQVUsR0FBR0UsTUFBTUYsVUFBVTtRQUN0RztRQUNBLE1BQU1NLFNBQVMsSUFBSWxDLDBEQUFjQTtRQUNqQyxLQUFLLE1BQU1pQixPQUFPRSxVQUFXO1lBQ3pCZSxPQUFPQyxNQUFNLENBQUNaLE9BQU9QLE1BQU0sQ0FBQ0M7UUFDaEM7UUFDQSxNQUFNYSxRQUFRUCxPQUFPTyxLQUFLO1FBQzFCLElBQUlBLE1BQU1GLFVBQVUsR0FBRyxHQUFHO1lBQ3RCTSxPQUFPQyxNQUFNLENBQUNMO1FBQ2xCO1FBQ0FJLE9BQU9DLE1BQU0sQ0FBQ1osT0FBT1MsVUFBVTtRQUMvQixPQUFPRTtJQUNYO0lBQ0FFLHlCQUF3QkMsVUFBVSxFQUFFakIsS0FBSyxFQUFFQyxFQUFFLEVBQUVDLENBQUMsRUFBRWdCLElBQUk7UUFDbEQsTUFBTUMsVUFBVUYsV0FBV0csUUFBUSxDQUFDSCxXQUFXSSxNQUFNLEdBQUc7UUFDeEQsTUFBTUMsV0FBVzlDLHlEQUF1QixDQUFDUyxpQkFBaUJpQixHQUFHRixPQUFPO1lBQ2hFSyxlQUFlO1FBQ25CO1FBQ0EsSUFBSW1CO1FBQ0osSUFBSVAsc0JBQXNCdEIsWUFBWTtZQUNsQzZCLE9BQU9QLFdBQVdHLFFBQVEsQ0FBQyxHQUFHSCxXQUFXSSxNQUFNLEdBQUc7UUFDdEQsT0FDSztZQUNERyxPQUFPUCxXQUFXUSxPQUFPLENBQUMsR0FBR1IsV0FBV0ksTUFBTSxHQUFHO1FBQ3JEO1FBQ0FDLFNBQVNoQixNQUFNLENBQUNMLElBQUk7WUFDaEJNLGlCQUFpQmlCLEtBQUtoQixVQUFVO1FBQ3BDO1FBQ0FjLFNBQVNJLFVBQVUsQ0FBQ1A7UUFDcEIsSUFBSUssZ0JBQWdCN0IsWUFBWTtZQUM1QixNQUFNbUIsU0FBU1EsU0FBUzFCLE1BQU0sQ0FBQzRCO1lBQy9CLE1BQU1kLFFBQVFZLFNBQVNaLEtBQUs7WUFDNUIsSUFBSUEsTUFBTUYsVUFBVSxHQUFHLEdBQUc7Z0JBQ3RCLE9BQU9yQixPQUFPMEIsTUFBTSxDQUFDO29CQUFDQztvQkFBUUo7aUJBQU0sRUFBRUksT0FBT04sVUFBVSxHQUFHRSxNQUFNRixVQUFVO1lBQzlFO1lBQ0EsT0FBT007UUFDWDtRQUNBLE1BQU1BLFNBQVMsSUFBSWxDLDBEQUFjQTtRQUNqQyxLQUFLLE1BQU1pQixPQUFPMkIsS0FBTTtZQUNwQlYsT0FBT0MsTUFBTSxDQUFDTyxTQUFTMUIsTUFBTSxDQUFDQztRQUNsQztRQUNBLE1BQU1hLFFBQVFZLFNBQVNaLEtBQUs7UUFDNUIsSUFBSUEsTUFBTUYsVUFBVSxHQUFHLEdBQUc7WUFDdEJNLE9BQU9DLE1BQU0sQ0FBQ0w7UUFDbEI7UUFDQSxPQUFPSTtJQUNYO0FBQ0o7QUFDQSxNQUFNYSxXQUFXO0lBQ2JwQyxZQUFXQyxJQUFJO1FBQ1gsT0FBT2IsNERBQU1BLENBQUNhLEtBQUs0QixRQUFRO0lBQy9CO0lBQ0F0Qix5QkFBd0JDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxFQUFFLEVBQUVDLENBQUM7UUFDM0MsT0FBT2xCLE9BQU80QyxJQUFJLENBQUMxQixHQUFHRixPQUFPRCxVQUFVcUIsUUFBUSxJQUFJbkI7SUFDdkQ7SUFDQWUseUJBQXdCQyxVQUFVLEVBQUVqQixLQUFLLEVBQUVDLEVBQUUsRUFBRUMsQ0FBQyxFQUFFMkIsR0FBRztRQUNqRCxPQUFPN0MsT0FBTzhDLElBQUksQ0FBQzVCLEdBQUdGLE9BQU9pQixXQUFXRyxRQUFRLElBQUluQixJQUFJNEI7SUFDNUQ7QUFDSjtBQUNBLDRDQUE0QztBQUM1Qyw4REFBOEQ7QUFDOUQsNERBQTREO0FBQ3JELE1BQU1FLGdCQUFnQjtJQUN6QixHQUFHakQsZ0RBQVk7SUFDZlMsWUFBV0MsSUFBSTtRQUNYLE9BQU9GLFdBQVdDLFVBQVUsQ0FBQ0M7SUFDakM7SUFDQU0seUJBQXdCQyxTQUFTLEVBQUVDLEtBQUssRUFBRUMsRUFBRSxFQUFFQyxDQUFDO1FBQzNDLElBQUlILFVBQVVTLFVBQVUsR0FBRyxNQUFNO1lBQzdCLE9BQU9tQixTQUFTN0IsdUJBQXVCLENBQUNDLFdBQVdDLE9BQU9DLElBQUlDO1FBQ2xFO1FBQ0EsT0FBT1osV0FBV1EsdUJBQXVCLENBQUNDLFdBQVdDLE9BQU9DLElBQUlDO0lBQ3BFO0lBQ0FjLHlCQUF3QkMsVUFBVSxFQUFFakIsS0FBSyxFQUFFQyxFQUFFLEVBQUVDLENBQUMsRUFBRTJCLEdBQUc7UUFDakQsSUFBSVosV0FBV1QsVUFBVSxHQUFHLE1BQU07WUFDOUIsT0FBT21CLFNBQVNYLHVCQUF1QixDQUFDQyxZQUFZakIsT0FBT0MsSUFBSUMsR0FBRzJCO1FBQ3RFO1FBQ0EsT0FBT3ZDLFdBQVcwQix1QkFBdUIsQ0FBQ0MsWUFBWWpCLE9BQU9DLElBQUlDLEdBQUcyQjtJQUN4RTtJQUNBRztRQUNJLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxVQUFVLEVBQUUsR0FBRzFELDREQUEwQixDQUFDLFVBQVU7WUFDbkU0RCxtQkFBbUI7Z0JBQ2ZDLE1BQU07Z0JBQ05DLFFBQVE7WUFDWjtZQUNBQyxvQkFBb0I7Z0JBQ2hCRixNQUFNO2dCQUNOQyxRQUFRO1lBQ1o7UUFDSjtRQUNBLE9BQU87WUFDSEwsV0FBV0EsVUFBVWIsUUFBUSxDQUFDL0IsY0FBY2dDLE1BQU07WUFDbERhLFlBQVlBLFdBQVdkLFFBQVEsQ0FBQ2xDLGFBQWFtQyxNQUFNO1FBQ3ZEO0lBQ0o7SUFDQW1CLCtCQUE4QkMsSUFBSTtRQUM5QixNQUFNUCxhQUFhMUQseURBQXVCLENBQUM7WUFDdkNtRSxLQUFLeEQsT0FBTzBCLE1BQU0sQ0FBQztnQkFDZjNCO2dCQUNBdUQ7YUFDSCxFQUFFdkQsYUFBYXNCLFVBQVUsR0FBR2lDLEtBQUtqQyxVQUFVO1lBQzVDNkIsTUFBTTtZQUNOQyxRQUFRO1FBQ1o7UUFDQSxNQUFNTCxZQUFZekQsd0RBQXNCLENBQUMwRCxZQUNwQ1csTUFBTSxDQUFDO1lBQ1JSLE1BQU07WUFDTkMsUUFBUTtRQUNaLEdBQUdsQixRQUFRLENBQUMvQixjQUFjZ0MsTUFBTTtRQUNoQyxPQUFPO1lBQ0hZO1lBQ0FDLFlBQVlPO1FBQ2hCO0lBQ0o7SUFDQUsseUJBQXdCWixVQUFVLEVBQUVELFNBQVM7UUFDekMsSUFBSUEscUJBQXFCdEMsWUFBWTtZQUNqQ3NDLFlBQVk5QyxPQUFPMEIsTUFBTSxDQUFDO2dCQUN0QnhCO2dCQUNBNEM7YUFDSCxFQUFFNUMsY0FBY21CLFVBQVUsR0FBR3lCLFVBQVV6QixVQUFVO1FBQ3RELE9BQ0s7WUFDRHlCLFVBQVVjLE9BQU8sQ0FBQzFEO1lBQ2xCNEMsWUFBWUEsVUFBVWIsUUFBUTtRQUNsQztRQUNBLElBQUljLHNCQUFzQnZDLFlBQVk7WUFDbEN1QyxhQUFhL0MsT0FBTzBCLE1BQU0sQ0FBQztnQkFDdkIzQjtnQkFDQWdEO2FBQ0gsRUFBRWhELGFBQWFzQixVQUFVLEdBQUcwQixXQUFXMUIsVUFBVTtRQUN0RCxPQUNLO1lBQ0QwQixXQUFXYSxPQUFPLENBQUM3RDtZQUNuQmdELGFBQWFBLFdBQVdkLFFBQVE7UUFDcEM7UUFDQSxPQUFPNUMsc0RBQW9CLENBQUM7WUFDeEJ5RCxXQUFXekQsd0RBQXNCLENBQUM7Z0JBQzlCbUUsS0FBS3hELE9BQU9DLElBQUksQ0FBQzZDLFdBQVdBLFVBQVVnQixVQUFVLEVBQUVoQixVQUFVekIsVUFBVTtnQkFDdEU2QixNQUFNO2dCQUNOQyxRQUFRO1lBQ1o7WUFDQUosWUFBWTFELHlEQUF1QixDQUFDO2dCQUNoQ21FLEtBQUt4RCxPQUFPQyxJQUFJLENBQUM4QyxZQUFZQSxXQUFXZSxVQUFVLEVBQUVmLFdBQVcxQixVQUFVO2dCQUN6RTZCLE1BQU07Z0JBQ05DLFFBQVE7WUFDWjtRQUNKO0lBQ0o7QUFDSixFQUFFO0FBQ0YscUZBQXFGO0FBQ3JGLElBQUl6RCxzREFBY0EsRUFBRTtJQUNoQmtELGNBQWNqQyx1QkFBdUIsR0FBRzZCLFNBQVM3Qix1QkFBdUI7SUFDeEVpQyxjQUFjZix1QkFBdUIsR0FBR1csU0FBU1gsdUJBQXVCO0FBQzVFLEVBQ0EsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvY3J5cHRvL2luZGV4LmpzPzE0Y2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBuZXdJbnN0YW5jZSwgQ2hhQ2hhMjBQb2x5MTMwNSB9IGZyb20gJ0BjaGFpbnNhZmUvYXMtY2hhY2hhMjBwb2x5MTMwNSc7XG5pbXBvcnQgeyBkaWdlc3QgfSBmcm9tICdAY2hhaW5zYWZlL2FzLXNoYTI1Nic7XG5pbXBvcnQgeyBVaW50OEFycmF5TGlzdCB9IGZyb20gJ3VpbnQ4YXJyYXlsaXN0JztcbmltcG9ydCB7IGlzRWxlY3Ryb25NYWluIH0gZnJvbSAnd2hlcmVhcmV3ZSc7XG5pbXBvcnQgeyBwdXJlSnNDcnlwdG8gfSBmcm9tICcuL2pzLmpzJztcbmNvbnN0IGN0eCA9IG5ld0luc3RhbmNlKCk7XG5jb25zdCBhc0ltcGwgPSBuZXcgQ2hhQ2hhMjBQb2x5MTMwNShjdHgpO1xuY29uc3QgQ0hBQ0hBX1BPTFkxMzA1ID0gJ2NoYWNoYTIwLXBvbHkxMzA1JztcbmNvbnN0IFBLQ1M4X1BSRUZJWCA9IEJ1ZmZlci5mcm9tKFsweDMwLCAweDJlLCAweDAyLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDA2LCAweDAzLCAweDJiLCAweDY1LCAweDZlLCAweDA0LCAweDIyLCAweDA0LCAweDIwXSk7XG5jb25zdCBYMjU1MTlfUFJFRklYID0gQnVmZmVyLmZyb20oWzB4MzAsIDB4MmEsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MDMsIDB4MmIsIDB4NjUsIDB4NmUsIDB4MDMsIDB4MjEsIDB4MDBdKTtcbmNvbnN0IG5vZGVDcnlwdG8gPSB7XG4gICAgaGFzaFNIQTI1NihkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIGhhc2gudXBkYXRlKGRhdGEpLmRpZ2VzdCgpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYnVmIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGJ1Zik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2guZGlnZXN0KCk7XG4gICAgfSxcbiAgICBjaGFDaGEyMFBvbHkxMzA1RW5jcnlwdChwbGFpbnRleHQsIG5vbmNlLCBhZCwgaykge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoQ0hBQ0hBX1BPTFkxMzA1LCBrLCBub25jZSwge1xuICAgICAgICAgICAgYXV0aFRhZ0xlbmd0aDogMTZcbiAgICAgICAgfSk7XG4gICAgICAgIGNpcGhlci5zZXRBQUQoYWQsIHsgcGxhaW50ZXh0TGVuZ3RoOiBwbGFpbnRleHQuYnl0ZUxlbmd0aCB9KTtcbiAgICAgICAgaWYgKHBsYWludGV4dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBjaXBoZXIudXBkYXRlKHBsYWludGV4dCk7XG4gICAgICAgICAgICBjb25zdCBmaW5hbCA9IGNpcGhlci5maW5hbCgpO1xuICAgICAgICAgICAgY29uc3QgdGFnID0gY2lwaGVyLmdldEF1dGhUYWcoKTtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFt1cGRhdGVkLCB0YWcsIGZpbmFsXSwgdXBkYXRlZC5ieXRlTGVuZ3RoICsgdGFnLmJ5dGVMZW5ndGggKyBmaW5hbC5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheUxpc3QoKTtcbiAgICAgICAgZm9yIChjb25zdCBidWYgb2YgcGxhaW50ZXh0KSB7XG4gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGNpcGhlci51cGRhdGUoYnVmKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmluYWwgPSBjaXBoZXIuZmluYWwoKTtcbiAgICAgICAgaWYgKGZpbmFsLmJ5dGVMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGZpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQuYXBwZW5kKGNpcGhlci5nZXRBdXRoVGFnKCkpO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH0sXG4gICAgY2hhQ2hhMjBQb2x5MTMwNURlY3J5cHQoY2lwaGVydGV4dCwgbm9uY2UsIGFkLCBrLCBfZHN0KSB7XG4gICAgICAgIGNvbnN0IGF1dGhUYWcgPSBjaXBoZXJ0ZXh0LnN1YmFycmF5KGNpcGhlcnRleHQubGVuZ3RoIC0gMTYpO1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KENIQUNIQV9QT0xZMTMwNSwgaywgbm9uY2UsIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IDE2XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGV4dDtcbiAgICAgICAgaWYgKGNpcGhlcnRleHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgICAgICB0ZXh0ID0gY2lwaGVydGV4dC5zdWJhcnJheSgwLCBjaXBoZXJ0ZXh0Lmxlbmd0aCAtIDE2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRleHQgPSBjaXBoZXJ0ZXh0LnN1Ymxpc3QoMCwgY2lwaGVydGV4dC5sZW5ndGggLSAxNik7XG4gICAgICAgIH1cbiAgICAgICAgZGVjaXBoZXIuc2V0QUFEKGFkLCB7XG4gICAgICAgICAgICBwbGFpbnRleHRMZW5ndGg6IHRleHQuYnl0ZUxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhhdXRoVGFnKTtcbiAgICAgICAgaWYgKHRleHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBkZWNpcGhlci51cGRhdGUodGV4dCk7XG4gICAgICAgICAgICBjb25zdCBmaW5hbCA9IGRlY2lwaGVyLmZpbmFsKCk7XG4gICAgICAgICAgICBpZiAoZmluYWwuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbb3V0cHV0LCBmaW5hbF0sIG91dHB1dC5ieXRlTGVuZ3RoICsgZmluYWwuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5TGlzdCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiB0ZXh0KSB7XG4gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGRlY2lwaGVyLnVwZGF0ZShidWYpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5hbCA9IGRlY2lwaGVyLmZpbmFsKCk7XG4gICAgICAgIGlmIChmaW5hbC5ieXRlTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChmaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuY29uc3QgYXNDcnlwdG8gPSB7XG4gICAgaGFzaFNIQTI1NihkYXRhKSB7XG4gICAgICAgIHJldHVybiBkaWdlc3QoZGF0YS5zdWJhcnJheSgpKTtcbiAgICB9LFxuICAgIGNoYUNoYTIwUG9seTEzMDVFbmNyeXB0KHBsYWludGV4dCwgbm9uY2UsIGFkLCBrKSB7XG4gICAgICAgIHJldHVybiBhc0ltcGwuc2VhbChrLCBub25jZSwgcGxhaW50ZXh0LnN1YmFycmF5KCksIGFkKTtcbiAgICB9LFxuICAgIGNoYUNoYTIwUG9seTEzMDVEZWNyeXB0KGNpcGhlcnRleHQsIG5vbmNlLCBhZCwgaywgZHN0KSB7XG4gICAgICAgIHJldHVybiBhc0ltcGwub3BlbihrLCBub25jZSwgY2lwaGVydGV4dC5zdWJhcnJheSgpLCBhZCwgZHN0KTtcbiAgICB9XG59O1xuLy8gYmVuY2htYXJrcyBzaG93IHRoYXQgZm9yIGNoYWNoYTIwcG9seTEzMDVcbi8vIHRoZSBhcyBpbXBsZW1lbnRhdGlvbiBpcyBmYXN0ZXIgZm9yIHNtYWxsZXIgcGF5bG9hZHMoPDEyMDApXG4vLyBhbmQgdGhlIG5vZGUgaW1wbGVtZW50YXRpb24gaXMgZmFzdGVyIGZvciBsYXJnZXIgcGF5bG9hZHNcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q3J5cHRvID0ge1xuICAgIC4uLnB1cmVKc0NyeXB0byxcbiAgICBoYXNoU0hBMjU2KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVDcnlwdG8uaGFzaFNIQTI1NihkYXRhKTtcbiAgICB9LFxuICAgIGNoYUNoYTIwUG9seTEzMDVFbmNyeXB0KHBsYWludGV4dCwgbm9uY2UsIGFkLCBrKSB7XG4gICAgICAgIGlmIChwbGFpbnRleHQuYnl0ZUxlbmd0aCA8IDEyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBhc0NyeXB0by5jaGFDaGEyMFBvbHkxMzA1RW5jcnlwdChwbGFpbnRleHQsIG5vbmNlLCBhZCwgayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVDcnlwdG8uY2hhQ2hhMjBQb2x5MTMwNUVuY3J5cHQocGxhaW50ZXh0LCBub25jZSwgYWQsIGspO1xuICAgIH0sXG4gICAgY2hhQ2hhMjBQb2x5MTMwNURlY3J5cHQoY2lwaGVydGV4dCwgbm9uY2UsIGFkLCBrLCBkc3QpIHtcbiAgICAgICAgaWYgKGNpcGhlcnRleHQuYnl0ZUxlbmd0aCA8IDEyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBhc0NyeXB0by5jaGFDaGEyMFBvbHkxMzA1RGVjcnlwdChjaXBoZXJ0ZXh0LCBub25jZSwgYWQsIGssIGRzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVDcnlwdG8uY2hhQ2hhMjBQb2x5MTMwNURlY3J5cHQoY2lwaGVydGV4dCwgbm9uY2UsIGFkLCBrLCBkc3QpO1xuICAgIH0sXG4gICAgZ2VuZXJhdGVYMjU1MTlLZXlQYWlyKCkge1xuICAgICAgICBjb25zdCB7IHB1YmxpY0tleSwgcHJpdmF0ZUtleSB9ID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoJ3gyNTUxOScsIHtcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3Nwa2knLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlcidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncGtjczgnLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RlcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwdWJsaWNLZXk6IHB1YmxpY0tleS5zdWJhcnJheShYMjU1MTlfUFJFRklYLmxlbmd0aCksXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBwcml2YXRlS2V5LnN1YmFycmF5KFBLQ1M4X1BSRUZJWC5sZW5ndGgpXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBnZW5lcmF0ZVgyNTUxOUtleVBhaXJGcm9tU2VlZChzZWVkKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBrZXk6IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgICAgICAgIFBLQ1M4X1BSRUZJWCxcbiAgICAgICAgICAgICAgICBzZWVkXG4gICAgICAgICAgICBdLCBQS0NTOF9QUkVGSVguYnl0ZUxlbmd0aCArIHNlZWQuYnl0ZUxlbmd0aCksXG4gICAgICAgICAgICB0eXBlOiAncGtjczgnLFxuICAgICAgICAgICAgZm9ybWF0OiAnZGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShwcml2YXRlS2V5KVxuICAgICAgICAgICAgLmV4cG9ydCh7XG4gICAgICAgICAgICB0eXBlOiAnc3BraScsXG4gICAgICAgICAgICBmb3JtYXQ6ICdkZXInXG4gICAgICAgIH0pLnN1YmFycmF5KFgyNTUxOV9QUkVGSVgubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNlZWRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGdlbmVyYXRlWDI1NTE5U2hhcmVkS2V5KHByaXZhdGVLZXksIHB1YmxpY0tleSkge1xuICAgICAgICBpZiAocHVibGljS2V5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgcHVibGljS2V5ID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgICAgICAgWDI1NTE5X1BSRUZJWCxcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXlcbiAgICAgICAgICAgIF0sIFgyNTUxOV9QUkVGSVguYnl0ZUxlbmd0aCArIHB1YmxpY0tleS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHB1YmxpY0tleS5wcmVwZW5kKFgyNTUxOV9QUkVGSVgpO1xuICAgICAgICAgICAgcHVibGljS2V5ID0gcHVibGljS2V5LnN1YmFycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaXZhdGVLZXkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5ID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgICAgICAgUEtDUzhfUFJFRklYLFxuICAgICAgICAgICAgICAgIHByaXZhdGVLZXlcbiAgICAgICAgICAgIF0sIFBLQ1M4X1BSRUZJWC5ieXRlTGVuZ3RoICsgcHJpdmF0ZUtleS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXkucHJlcGVuZChQS0NTOF9QUkVGSVgpO1xuICAgICAgICAgICAgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXkuc3ViYXJyYXkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3J5cHRvLmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5OiBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgICAgICBrZXk6IEJ1ZmZlci5mcm9tKHB1YmxpY0tleSwgcHVibGljS2V5LmJ5dGVPZmZzZXQsIHB1YmxpY0tleS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3BraScsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiAnZGVyJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICAgICAga2V5OiBCdWZmZXIuZnJvbShwcml2YXRlS2V5LCBwcml2YXRlS2V5LmJ5dGVPZmZzZXQsIHByaXZhdGVLZXkuYnl0ZUxlbmd0aCksXG4gICAgICAgICAgICAgICAgdHlwZTogJ3BrY3M4JyxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZXInXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuLy8gbm8gY2hhY2hhMjAtcG9seTEzMDUgaW4gZWxlY3Ryb24gaHR0cHM6Ly9naXRodWIuY29tL2VsZWN0cm9uL2VsZWN0cm9uL2lzc3Vlcy8yNDAyNFxuaWYgKGlzRWxlY3Ryb25NYWluKSB7XG4gICAgZGVmYXVsdENyeXB0by5jaGFDaGEyMFBvbHkxMzA1RW5jcnlwdCA9IGFzQ3J5cHRvLmNoYUNoYTIwUG9seTEzMDVFbmNyeXB0O1xuICAgIGRlZmF1bHRDcnlwdG8uY2hhQ2hhMjBQb2x5MTMwNURlY3J5cHQgPSBhc0NyeXB0by5jaGFDaGEyMFBvbHkxMzA1RGVjcnlwdDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJjcnlwdG8iLCJuZXdJbnN0YW5jZSIsIkNoYUNoYTIwUG9seTEzMDUiLCJkaWdlc3QiLCJVaW50OEFycmF5TGlzdCIsImlzRWxlY3Ryb25NYWluIiwicHVyZUpzQ3J5cHRvIiwiY3R4IiwiYXNJbXBsIiwiQ0hBQ0hBX1BPTFkxMzA1IiwiUEtDUzhfUFJFRklYIiwiQnVmZmVyIiwiZnJvbSIsIlgyNTUxOV9QUkVGSVgiLCJub2RlQ3J5cHRvIiwiaGFzaFNIQTI1NiIsImRhdGEiLCJoYXNoIiwiY3JlYXRlSGFzaCIsIlVpbnQ4QXJyYXkiLCJ1cGRhdGUiLCJidWYiLCJjaGFDaGEyMFBvbHkxMzA1RW5jcnlwdCIsInBsYWludGV4dCIsIm5vbmNlIiwiYWQiLCJrIiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJhdXRoVGFnTGVuZ3RoIiwic2V0QUFEIiwicGxhaW50ZXh0TGVuZ3RoIiwiYnl0ZUxlbmd0aCIsInVwZGF0ZWQiLCJmaW5hbCIsInRhZyIsImdldEF1dGhUYWciLCJjb25jYXQiLCJvdXRwdXQiLCJhcHBlbmQiLCJjaGFDaGEyMFBvbHkxMzA1RGVjcnlwdCIsImNpcGhlcnRleHQiLCJfZHN0IiwiYXV0aFRhZyIsInN1YmFycmF5IiwibGVuZ3RoIiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2IiwidGV4dCIsInN1Ymxpc3QiLCJzZXRBdXRoVGFnIiwiYXNDcnlwdG8iLCJzZWFsIiwiZHN0Iiwib3BlbiIsImRlZmF1bHRDcnlwdG8iLCJnZW5lcmF0ZVgyNTUxOUtleVBhaXIiLCJwdWJsaWNLZXkiLCJwcml2YXRlS2V5IiwiZ2VuZXJhdGVLZXlQYWlyU3luYyIsInB1YmxpY0tleUVuY29kaW5nIiwidHlwZSIsImZvcm1hdCIsInByaXZhdGVLZXlFbmNvZGluZyIsImdlbmVyYXRlWDI1NTE5S2V5UGFpckZyb21TZWVkIiwic2VlZCIsImNyZWF0ZVByaXZhdGVLZXkiLCJrZXkiLCJjcmVhdGVQdWJsaWNLZXkiLCJleHBvcnQiLCJnZW5lcmF0ZVgyNTUxOVNoYXJlZEtleSIsInByZXBlbmQiLCJkaWZmaWVIZWxsbWFuIiwiYnl0ZU9mZnNldCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/js.js":
/*!********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/js.js ***!
\********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ pureJsCrypto: () => (/* binding */ pureJsCrypto)\n/* harmony export */ });\n/* harmony import */ var _noble_ciphers_chacha__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @noble/ciphers/chacha */ \"(ssr)/./node_modules/@noble/ciphers/esm/chacha.js\");\n/* harmony import */ var _noble_curves_ed25519__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @noble/curves/ed25519 */ \"(ssr)/./node_modules/@noble/curves/esm/ed25519.js\");\n/* harmony import */ var _noble_hashes_hkdf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @noble/hashes/hkdf */ \"(ssr)/./node_modules/@noble/hashes/esm/hkdf.js\");\n/* harmony import */ var _noble_hashes_sha256__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noble/hashes/sha256 */ \"(ssr)/./node_modules/@noble/hashes/esm/sha256.js\");\n\n\n\n\nconst pureJsCrypto = {\n hashSHA256 (data) {\n return (0,_noble_hashes_sha256__WEBPACK_IMPORTED_MODULE_1__.sha256)(data.subarray());\n },\n getHKDF (ck, ikm) {\n const prk = (0,_noble_hashes_hkdf__WEBPACK_IMPORTED_MODULE_2__.extract)(_noble_hashes_sha256__WEBPACK_IMPORTED_MODULE_1__.sha256, ikm, ck);\n const okmU8Array = (0,_noble_hashes_hkdf__WEBPACK_IMPORTED_MODULE_2__.expand)(_noble_hashes_sha256__WEBPACK_IMPORTED_MODULE_1__.sha256, prk, undefined, 96);\n const okm = okmU8Array;\n const k1 = okm.subarray(0, 32);\n const k2 = okm.subarray(32, 64);\n const k3 = okm.subarray(64, 96);\n return [\n k1,\n k2,\n k3\n ];\n },\n generateX25519KeyPair () {\n const secretKey = _noble_curves_ed25519__WEBPACK_IMPORTED_MODULE_3__.x25519.utils.randomPrivateKey();\n const publicKey = _noble_curves_ed25519__WEBPACK_IMPORTED_MODULE_3__.x25519.getPublicKey(secretKey);\n return {\n publicKey,\n privateKey: secretKey\n };\n },\n generateX25519KeyPairFromSeed (seed) {\n const publicKey = _noble_curves_ed25519__WEBPACK_IMPORTED_MODULE_3__.x25519.getPublicKey(seed);\n return {\n publicKey,\n privateKey: seed\n };\n },\n generateX25519SharedKey (privateKey, publicKey) {\n return _noble_curves_ed25519__WEBPACK_IMPORTED_MODULE_3__.x25519.getSharedSecret(privateKey.subarray(), publicKey.subarray());\n },\n chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) {\n return (0,_noble_ciphers_chacha__WEBPACK_IMPORTED_MODULE_0__.chacha20poly1305)(k, nonce, ad).encrypt(plaintext.subarray());\n },\n chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, dst) {\n return (0,_noble_ciphers_chacha__WEBPACK_IMPORTED_MODULE_0__.chacha20poly1305)(k, nonce, ad).decrypt(ciphertext.subarray(), dst);\n }\n}; //# sourceMappingURL=js.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvY3J5cHRvL2pzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXlEO0FBQ1Y7QUFDTTtBQUNQO0FBQ3ZDLE1BQU1LLGVBQWU7SUFDeEJDLFlBQVdDLElBQUk7UUFDWCxPQUFPSCw0REFBTUEsQ0FBQ0csS0FBS0MsUUFBUTtJQUMvQjtJQUNBQyxTQUFRQyxFQUFFLEVBQUVDLEdBQUc7UUFDWCxNQUFNQyxNQUFNViwyREFBT0EsQ0FBQ0Usd0RBQU1BLEVBQUVPLEtBQUtEO1FBQ2pDLE1BQU1HLGFBQWFWLDBEQUFNQSxDQUFDQyx3REFBTUEsRUFBRVEsS0FBS0UsV0FBVztRQUNsRCxNQUFNQyxNQUFNRjtRQUNaLE1BQU1HLEtBQUtELElBQUlQLFFBQVEsQ0FBQyxHQUFHO1FBQzNCLE1BQU1TLEtBQUtGLElBQUlQLFFBQVEsQ0FBQyxJQUFJO1FBQzVCLE1BQU1VLEtBQUtILElBQUlQLFFBQVEsQ0FBQyxJQUFJO1FBQzVCLE9BQU87WUFBQ1E7WUFBSUM7WUFBSUM7U0FBRztJQUN2QjtJQUNBQztRQUNJLE1BQU1DLFlBQVluQix5REFBTUEsQ0FBQ29CLEtBQUssQ0FBQ0MsZ0JBQWdCO1FBQy9DLE1BQU1DLFlBQVl0Qix5REFBTUEsQ0FBQ3VCLFlBQVksQ0FBQ0o7UUFDdEMsT0FBTztZQUNIRztZQUNBRSxZQUFZTDtRQUNoQjtJQUNKO0lBQ0FNLCtCQUE4QkMsSUFBSTtRQUM5QixNQUFNSixZQUFZdEIseURBQU1BLENBQUN1QixZQUFZLENBQUNHO1FBQ3RDLE9BQU87WUFDSEo7WUFDQUUsWUFBWUU7UUFDaEI7SUFDSjtJQUNBQyx5QkFBd0JILFVBQVUsRUFBRUYsU0FBUztRQUN6QyxPQUFPdEIseURBQU1BLENBQUM0QixlQUFlLENBQUNKLFdBQVdqQixRQUFRLElBQUllLFVBQVVmLFFBQVE7SUFDM0U7SUFDQXNCLHlCQUF3QkMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLEVBQUUsRUFBRUMsQ0FBQztRQUMzQyxPQUFPbEMsdUVBQWdCQSxDQUFDa0MsR0FBR0YsT0FBT0MsSUFBSUUsT0FBTyxDQUFDSixVQUFVdkIsUUFBUTtJQUNwRTtJQUNBNEIseUJBQXdCQyxVQUFVLEVBQUVMLEtBQUssRUFBRUMsRUFBRSxFQUFFQyxDQUFDLEVBQUVJLEdBQUc7UUFDakQsT0FBT3RDLHVFQUFnQkEsQ0FBQ2tDLEdBQUdGLE9BQU9DLElBQUlNLE9BQU8sQ0FBQ0YsV0FBVzdCLFFBQVEsSUFBSThCO0lBQ3pFO0FBQ0osRUFBRSxDQUNGLDhCQUE4QiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL2Rpc3Qvc3JjL2NyeXB0by9qcy5qcz83NTc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNoYWNoYTIwcG9seTEzMDUgfSBmcm9tICdAbm9ibGUvY2lwaGVycy9jaGFjaGEnO1xuaW1wb3J0IHsgeDI1NTE5IH0gZnJvbSAnQG5vYmxlL2N1cnZlcy9lZDI1NTE5JztcbmltcG9ydCB7IGV4dHJhY3QsIGV4cGFuZCB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvaGtkZic7XG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tICdAbm9ibGUvaGFzaGVzL3NoYTI1Nic7XG5leHBvcnQgY29uc3QgcHVyZUpzQ3J5cHRvID0ge1xuICAgIGhhc2hTSEEyNTYoZGF0YSkge1xuICAgICAgICByZXR1cm4gc2hhMjU2KGRhdGEuc3ViYXJyYXkoKSk7XG4gICAgfSxcbiAgICBnZXRIS0RGKGNrLCBpa20pIHtcbiAgICAgICAgY29uc3QgcHJrID0gZXh0cmFjdChzaGEyNTYsIGlrbSwgY2spO1xuICAgICAgICBjb25zdCBva21VOEFycmF5ID0gZXhwYW5kKHNoYTI1NiwgcHJrLCB1bmRlZmluZWQsIDk2KTtcbiAgICAgICAgY29uc3Qgb2ttID0gb2ttVThBcnJheTtcbiAgICAgICAgY29uc3QgazEgPSBva20uc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgICBjb25zdCBrMiA9IG9rbS5zdWJhcnJheSgzMiwgNjQpO1xuICAgICAgICBjb25zdCBrMyA9IG9rbS5zdWJhcnJheSg2NCwgOTYpO1xuICAgICAgICByZXR1cm4gW2sxLCBrMiwgazNdO1xuICAgIH0sXG4gICAgZ2VuZXJhdGVYMjU1MTlLZXlQYWlyKCkge1xuICAgICAgICBjb25zdCBzZWNyZXRLZXkgPSB4MjU1MTkudXRpbHMucmFuZG9tUHJpdmF0ZUtleSgpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSB4MjU1MTkuZ2V0UHVibGljS2V5KHNlY3JldEtleSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZWNyZXRLZXlcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGdlbmVyYXRlWDI1NTE5S2V5UGFpckZyb21TZWVkKHNlZWQpIHtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0geDI1NTE5LmdldFB1YmxpY0tleShzZWVkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNlZWRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGdlbmVyYXRlWDI1NTE5U2hhcmVkS2V5KHByaXZhdGVLZXksIHB1YmxpY0tleSkge1xuICAgICAgICByZXR1cm4geDI1NTE5LmdldFNoYXJlZFNlY3JldChwcml2YXRlS2V5LnN1YmFycmF5KCksIHB1YmxpY0tleS5zdWJhcnJheSgpKTtcbiAgICB9LFxuICAgIGNoYUNoYTIwUG9seTEzMDVFbmNyeXB0KHBsYWludGV4dCwgbm9uY2UsIGFkLCBrKSB7XG4gICAgICAgIHJldHVybiBjaGFjaGEyMHBvbHkxMzA1KGssIG5vbmNlLCBhZCkuZW5jcnlwdChwbGFpbnRleHQuc3ViYXJyYXkoKSk7XG4gICAgfSxcbiAgICBjaGFDaGEyMFBvbHkxMzA1RGVjcnlwdChjaXBoZXJ0ZXh0LCBub25jZSwgYWQsIGssIGRzdCkge1xuICAgICAgICByZXR1cm4gY2hhY2hhMjBwb2x5MTMwNShrLCBub25jZSwgYWQpLmRlY3J5cHQoY2lwaGVydGV4dC5zdWJhcnJheSgpLCBkc3QpO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qcy5qcy5tYXAiXSwibmFtZXMiOlsiY2hhY2hhMjBwb2x5MTMwNSIsIngyNTUxOSIsImV4dHJhY3QiLCJleHBhbmQiLCJzaGEyNTYiLCJwdXJlSnNDcnlwdG8iLCJoYXNoU0hBMjU2IiwiZGF0YSIsInN1YmFycmF5IiwiZ2V0SEtERiIsImNrIiwiaWttIiwicHJrIiwib2ttVThBcnJheSIsInVuZGVmaW5lZCIsIm9rbSIsImsxIiwiazIiLCJrMyIsImdlbmVyYXRlWDI1NTE5S2V5UGFpciIsInNlY3JldEtleSIsInV0aWxzIiwicmFuZG9tUHJpdmF0ZUtleSIsInB1YmxpY0tleSIsImdldFB1YmxpY0tleSIsInByaXZhdGVLZXkiLCJnZW5lcmF0ZVgyNTUxOUtleVBhaXJGcm9tU2VlZCIsInNlZWQiLCJnZW5lcmF0ZVgyNTUxOVNoYXJlZEtleSIsImdldFNoYXJlZFNlY3JldCIsImNoYUNoYTIwUG9seTEzMDVFbmNyeXB0IiwicGxhaW50ZXh0Iiwibm9uY2UiLCJhZCIsImsiLCJlbmNyeXB0IiwiY2hhQ2hhMjBQb2x5MTMwNURlY3J5cHQiLCJjaXBoZXJ0ZXh0IiwiZHN0IiwiZGVjcnlwdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/js.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/streaming.js":
/*!***************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/streaming.js ***!
\***************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decryptStream: () => (/* binding */ decryptStream),\n/* harmony export */ encryptStream: () => (/* binding */ encryptStream)\n/* harmony export */ });\n/* harmony import */ var uint8arraylist__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arraylist */ \"(ssr)/./node_modules/uint8arraylist/dist/src/index.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/constants.js\");\n/* harmony import */ var _encoder_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../encoder.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/encoder.js\");\n\n\n\nconst CHACHA_TAG_LENGTH = 16;\n// Returns generator that encrypts payload from the user\nfunction encryptStream(handshake, metrics) {\n return async function*(source) {\n for await (const chunk of source){\n for(let i = 0; i < chunk.length; i += _constants_js__WEBPACK_IMPORTED_MODULE_1__.NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG){\n let end = i + _constants_js__WEBPACK_IMPORTED_MODULE_1__.NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG;\n if (end > chunk.length) {\n end = chunk.length;\n }\n let data;\n if (chunk instanceof Uint8Array) {\n data = handshake.encrypt(chunk.subarray(i, end), handshake.session);\n } else {\n data = handshake.encrypt(chunk.sublist(i, end), handshake.session);\n }\n metrics?.encryptedPackets.increment();\n yield new uint8arraylist__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayList((0,_encoder_js__WEBPACK_IMPORTED_MODULE_2__.uint16BEEncode)(data.byteLength), data);\n }\n }\n };\n}\n// Decrypt received payload to the user\nfunction decryptStream(handshake, metrics) {\n return async function*(source) {\n for await (const chunk of source){\n for(let i = 0; i < chunk.length; i += _constants_js__WEBPACK_IMPORTED_MODULE_1__.NOISE_MSG_MAX_LENGTH_BYTES){\n let end = i + _constants_js__WEBPACK_IMPORTED_MODULE_1__.NOISE_MSG_MAX_LENGTH_BYTES;\n if (end > chunk.length) {\n end = chunk.length;\n }\n if (end - CHACHA_TAG_LENGTH < i) {\n throw new Error(\"Invalid chunk\");\n }\n const encrypted = chunk.sublist(i, end);\n // memory allocation is not cheap so reuse the encrypted Uint8Array\n // see https://github.com/ChainSafe/js-libp2p-noise/pull/242#issue-1422126164\n // this is ok because chacha20 reads bytes one by one and don't reread after that\n // it's also tested in https://github.com/ChainSafe/as-chacha20poly1305/pull/1/files#diff-25252846b58979dcaf4e41d47b3eadd7e4f335e7fb98da6c049b1f9cd011f381R48\n const dst = chunk.subarray(i, end - CHACHA_TAG_LENGTH);\n const { plaintext: decrypted, valid } = handshake.decrypt(encrypted, handshake.session, dst);\n if (!valid) {\n metrics?.decryptErrors.increment();\n throw new Error(\"Failed to validate decrypted chunk\");\n }\n metrics?.decryptedPackets.increment();\n yield decrypted;\n }\n }\n };\n} //# sourceMappingURL=streaming.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvY3J5cHRvL3N0cmVhbWluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFnRDtBQUNxRDtBQUN0RDtBQUMvQyxNQUFNSSxvQkFBb0I7QUFDMUIsd0RBQXdEO0FBQ2pELFNBQVNDLGNBQWNDLFNBQVMsRUFBRUMsT0FBTztJQUM1QyxPQUFPLGdCQUFpQkMsTUFBTTtRQUMxQixXQUFXLE1BQU1DLFNBQVNELE9BQVE7WUFDOUIsSUFBSyxJQUFJRSxJQUFJLEdBQUdBLElBQUlELE1BQU1FLE1BQU0sRUFBRUQsS0FBS1IsaUZBQXNDQSxDQUFFO2dCQUMzRSxJQUFJVSxNQUFNRixJQUFJUixpRkFBc0NBO2dCQUNwRCxJQUFJVSxNQUFNSCxNQUFNRSxNQUFNLEVBQUU7b0JBQ3BCQyxNQUFNSCxNQUFNRSxNQUFNO2dCQUN0QjtnQkFDQSxJQUFJRTtnQkFDSixJQUFJSixpQkFBaUJLLFlBQVk7b0JBQzdCRCxPQUFPUCxVQUFVUyxPQUFPLENBQUNOLE1BQU1PLFFBQVEsQ0FBQ04sR0FBR0UsTUFBTU4sVUFBVVcsT0FBTztnQkFDdEUsT0FDSztvQkFDREosT0FBT1AsVUFBVVMsT0FBTyxDQUFDTixNQUFNUyxPQUFPLENBQUNSLEdBQUdFLE1BQU1OLFVBQVVXLE9BQU87Z0JBQ3JFO2dCQUNBVixTQUFTWSxpQkFBaUJDO2dCQUMxQixNQUFNLElBQUlwQiwwREFBY0EsQ0FBQ0csMkRBQWNBLENBQUNVLEtBQUtRLFVBQVUsR0FBR1I7WUFDOUQ7UUFDSjtJQUNKO0FBQ0o7QUFDQSx1Q0FBdUM7QUFDaEMsU0FBU1MsY0FBY2hCLFNBQVMsRUFBRUMsT0FBTztJQUM1QyxPQUFPLGdCQUFpQkMsTUFBTTtRQUMxQixXQUFXLE1BQU1DLFNBQVNELE9BQVE7WUFDOUIsSUFBSyxJQUFJRSxJQUFJLEdBQUdBLElBQUlELE1BQU1FLE1BQU0sRUFBRUQsS0FBS1QscUVBQTBCQSxDQUFFO2dCQUMvRCxJQUFJVyxNQUFNRixJQUFJVCxxRUFBMEJBO2dCQUN4QyxJQUFJVyxNQUFNSCxNQUFNRSxNQUFNLEVBQUU7b0JBQ3BCQyxNQUFNSCxNQUFNRSxNQUFNO2dCQUN0QjtnQkFDQSxJQUFJQyxNQUFNUixvQkFBb0JNLEdBQUc7b0JBQzdCLE1BQU0sSUFBSWEsTUFBTTtnQkFDcEI7Z0JBQ0EsTUFBTUMsWUFBWWYsTUFBTVMsT0FBTyxDQUFDUixHQUFHRTtnQkFDbkMsbUVBQW1FO2dCQUNuRSw2RUFBNkU7Z0JBQzdFLGlGQUFpRjtnQkFDakYsNkpBQTZKO2dCQUM3SixNQUFNYSxNQUFNaEIsTUFBTU8sUUFBUSxDQUFDTixHQUFHRSxNQUFNUjtnQkFDcEMsTUFBTSxFQUFFc0IsV0FBV0MsU0FBUyxFQUFFQyxLQUFLLEVBQUUsR0FBR3RCLFVBQVV1QixPQUFPLENBQUNMLFdBQVdsQixVQUFVVyxPQUFPLEVBQUVRO2dCQUN4RixJQUFJLENBQUNHLE9BQU87b0JBQ1JyQixTQUFTdUIsY0FBY1Y7b0JBQ3ZCLE1BQU0sSUFBSUcsTUFBTTtnQkFDcEI7Z0JBQ0FoQixTQUFTd0IsaUJBQWlCWDtnQkFDMUIsTUFBTU87WUFDVjtRQUNKO0lBQ0o7QUFDSixFQUNBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL2Rpc3Qvc3JjL2NyeXB0by9zdHJlYW1pbmcuanM/NjI1MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVaW50OEFycmF5TGlzdCB9IGZyb20gJ3VpbnQ4YXJyYXlsaXN0JztcbmltcG9ydCB7IE5PSVNFX01TR19NQVhfTEVOR1RIX0JZVEVTLCBOT0lTRV9NU0dfTUFYX0xFTkdUSF9CWVRFU19XSVRIT1VUX1RBRyB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1aW50MTZCRUVuY29kZSB9IGZyb20gJy4uL2VuY29kZXIuanMnO1xuY29uc3QgQ0hBQ0hBX1RBR19MRU5HVEggPSAxNjtcbi8vIFJldHVybnMgZ2VuZXJhdG9yIHRoYXQgZW5jcnlwdHMgcGF5bG9hZCBmcm9tIHRoZSB1c2VyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFN0cmVhbShoYW5kc2hha2UsIG1ldHJpY3MpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24qIChzb3VyY2UpIHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmsubGVuZ3RoOyBpICs9IE5PSVNFX01TR19NQVhfTEVOR1RIX0JZVEVTX1dJVEhPVVRfVEFHKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVuZCA9IGkgKyBOT0lTRV9NU0dfTUFYX0xFTkdUSF9CWVRFU19XSVRIT1VUX1RBRztcbiAgICAgICAgICAgICAgICBpZiAoZW5kID4gY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGNodW5rIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gaGFuZHNoYWtlLmVuY3J5cHQoY2h1bmsuc3ViYXJyYXkoaSwgZW5kKSwgaGFuZHNoYWtlLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGhhbmRzaGFrZS5lbmNyeXB0KGNodW5rLnN1Ymxpc3QoaSwgZW5kKSwgaGFuZHNoYWtlLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXRyaWNzPy5lbmNyeXB0ZWRQYWNrZXRzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgICAgIHlpZWxkIG5ldyBVaW50OEFycmF5TGlzdCh1aW50MTZCRUVuY29kZShkYXRhLmJ5dGVMZW5ndGgpLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4vLyBEZWNyeXB0IHJlY2VpdmVkIHBheWxvYWQgdG8gdGhlIHVzZXJcbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0U3RyZWFtKGhhbmRzaGFrZSwgbWV0cmljcykge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiogKHNvdXJjZSkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVuay5sZW5ndGg7IGkgKz0gTk9JU0VfTVNHX01BWF9MRU5HVEhfQllURVMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZW5kID0gaSArIE5PSVNFX01TR19NQVhfTEVOR1RIX0JZVEVTO1xuICAgICAgICAgICAgICAgIGlmIChlbmQgPiBjaHVuay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZW5kIC0gQ0hBQ0hBX1RBR19MRU5HVEggPCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaHVuaycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWQgPSBjaHVuay5zdWJsaXN0KGksIGVuZCk7XG4gICAgICAgICAgICAgICAgLy8gbWVtb3J5IGFsbG9jYXRpb24gaXMgbm90IGNoZWFwIHNvIHJldXNlIHRoZSBlbmNyeXB0ZWQgVWludDhBcnJheVxuICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vQ2hhaW5TYWZlL2pzLWxpYnAycC1ub2lzZS9wdWxsLzI0MiNpc3N1ZS0xNDIyMTI2MTY0XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBvayBiZWNhdXNlIGNoYWNoYTIwIHJlYWRzIGJ5dGVzIG9uZSBieSBvbmUgYW5kIGRvbid0IHJlcmVhZCBhZnRlciB0aGF0XG4gICAgICAgICAgICAgICAgLy8gaXQncyBhbHNvIHRlc3RlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vQ2hhaW5TYWZlL2FzLWNoYWNoYTIwcG9seTEzMDUvcHVsbC8xL2ZpbGVzI2RpZmYtMjUyNTI4NDZiNTg5NzlkY2FmNGU0MWQ0N2IzZWFkZDdlNGYzMzVlN2ZiOThkYTZjMDQ5YjFmOWNkMDExZjM4MVI0OFxuICAgICAgICAgICAgICAgIGNvbnN0IGRzdCA9IGNodW5rLnN1YmFycmF5KGksIGVuZCAtIENIQUNIQV9UQUdfTEVOR1RIKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBsYWludGV4dDogZGVjcnlwdGVkLCB2YWxpZCB9ID0gaGFuZHNoYWtlLmRlY3J5cHQoZW5jcnlwdGVkLCBoYW5kc2hha2Uuc2Vzc2lvbiwgZHN0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY3M/LmRlY3J5cHRFcnJvcnMuaW5jcmVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHZhbGlkYXRlIGRlY3J5cHRlZCBjaHVuaycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXRyaWNzPy5kZWNyeXB0ZWRQYWNrZXRzLmluY3JlbWVudCgpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGRlY3J5cHRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJlYW1pbmcuanMubWFwIl0sIm5hbWVzIjpbIlVpbnQ4QXJyYXlMaXN0IiwiTk9JU0VfTVNHX01BWF9MRU5HVEhfQllURVMiLCJOT0lTRV9NU0dfTUFYX0xFTkdUSF9CWVRFU19XSVRIT1VUX1RBRyIsInVpbnQxNkJFRW5jb2RlIiwiQ0hBQ0hBX1RBR19MRU5HVEgiLCJlbmNyeXB0U3RyZWFtIiwiaGFuZHNoYWtlIiwibWV0cmljcyIsInNvdXJjZSIsImNodW5rIiwiaSIsImxlbmd0aCIsImVuZCIsImRhdGEiLCJVaW50OEFycmF5IiwiZW5jcnlwdCIsInN1YmFycmF5Iiwic2Vzc2lvbiIsInN1Ymxpc3QiLCJlbmNyeXB0ZWRQYWNrZXRzIiwiaW5jcmVtZW50IiwiYnl0ZUxlbmd0aCIsImRlY3J5cHRTdHJlYW0iLCJFcnJvciIsImVuY3J5cHRlZCIsImRzdCIsInBsYWludGV4dCIsImRlY3J5cHRlZCIsInZhbGlkIiwiZGVjcnlwdCIsImRlY3J5cHRFcnJvcnMiLCJkZWNyeXB0ZWRQYWNrZXRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/streaming.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/encoder.js":
/*!******************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/encoder.js ***!
\******************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decode0: () => (/* binding */ decode0),\n/* harmony export */ decode1: () => (/* binding */ decode1),\n/* harmony export */ decode2: () => (/* binding */ decode2),\n/* harmony export */ encode0: () => (/* binding */ encode0),\n/* harmony export */ encode1: () => (/* binding */ encode1),\n/* harmony export */ encode2: () => (/* binding */ encode2),\n/* harmony export */ uint16BEDecode: () => (/* binding */ uint16BEDecode),\n/* harmony export */ uint16BEEncode: () => (/* binding */ uint16BEEncode)\n/* harmony export */ });\n/* harmony import */ var uint8arraylist__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arraylist */ \"(ssr)/./node_modules/uint8arraylist/dist/src/index.js\");\n/* harmony import */ var uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays/alloc */ \"(ssr)/./node_modules/uint8arrays/dist/src/alloc.node.js\");\n\n\nconst uint16BEEncode = (value)=>{\n const target = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_1__.allocUnsafe)(2);\n new DataView(target.buffer, target.byteOffset, target.byteLength).setUint16(0, value, false);\n return target;\n};\nuint16BEEncode.bytes = 2;\nconst uint16BEDecode = (data)=>{\n if (data.length < 2) throw RangeError(\"Could not decode int16BE\");\n if (data instanceof Uint8Array) {\n return new DataView(data.buffer, data.byteOffset, data.byteLength).getUint16(0, false);\n }\n return data.getUint16(0);\n};\nuint16BEDecode.bytes = 2;\n// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1)\nfunction encode0(message) {\n return new uint8arraylist__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayList(message.ne, message.ciphertext);\n}\nfunction encode1(message) {\n return new uint8arraylist__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayList(message.ne, message.ns, message.ciphertext);\n}\nfunction encode2(message) {\n return new uint8arraylist__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayList(message.ns, message.ciphertext);\n}\nfunction decode0(input) {\n if (input.length < 32) {\n throw new Error(\"Cannot decode stage 0 MessageBuffer: length less than 32 bytes.\");\n }\n return {\n ne: input.subarray(0, 32),\n ciphertext: input.subarray(32, input.length),\n ns: (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_1__.alloc)(0)\n };\n}\nfunction decode1(input) {\n if (input.length < 80) {\n throw new Error(\"Cannot decode stage 1 MessageBuffer: length less than 80 bytes.\");\n }\n return {\n ne: input.subarray(0, 32),\n ns: input.subarray(32, 80),\n ciphertext: input.subarray(80, input.length)\n };\n}\nfunction decode2(input) {\n if (input.length < 48) {\n throw new Error(\"Cannot decode stage 2 MessageBuffer: length less than 48 bytes.\");\n }\n return {\n ne: (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_1__.alloc)(0),\n ns: input.subarray(0, 48),\n ciphertext: input.subarray(48, input.length)\n };\n} //# sourceMappingURL=encoder.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvZW5jb2Rlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQWdEO0FBQ21EO0FBQzVGLE1BQU1LLGlCQUFpQixDQUFDQztJQUMzQixNQUFNQyxTQUFTSCw4REFBcUJBLENBQUM7SUFDckMsSUFBSUksU0FBU0QsT0FBT0UsTUFBTSxFQUFFRixPQUFPRyxVQUFVLEVBQUVILE9BQU9JLFVBQVUsRUFBRUMsU0FBUyxDQUFDLEdBQUdOLE9BQU87SUFDdEYsT0FBT0M7QUFDWCxFQUFFO0FBQ0ZGLGVBQWVRLEtBQUssR0FBRztBQUNoQixNQUFNQyxpQkFBaUIsQ0FBQ0M7SUFDM0IsSUFBSUEsS0FBS0MsTUFBTSxHQUFHLEdBQ2QsTUFBTUMsV0FBVztJQUNyQixJQUFJRixnQkFBZ0JHLFlBQVk7UUFDNUIsT0FBTyxJQUFJVixTQUFTTyxLQUFLTixNQUFNLEVBQUVNLEtBQUtMLFVBQVUsRUFBRUssS0FBS0osVUFBVSxFQUFFUSxTQUFTLENBQUMsR0FBRztJQUNwRjtJQUNBLE9BQU9KLEtBQUtJLFNBQVMsQ0FBQztBQUMxQixFQUFFO0FBQ0ZMLGVBQWVELEtBQUssR0FBRztBQUN2Qiw4RkFBOEY7QUFDdkYsU0FBU08sUUFBUUMsT0FBTztJQUMzQixPQUFPLElBQUlyQiwwREFBY0EsQ0FBQ3FCLFFBQVFDLEVBQUUsRUFBRUQsUUFBUUUsVUFBVTtBQUM1RDtBQUNPLFNBQVNDLFFBQVFILE9BQU87SUFDM0IsT0FBTyxJQUFJckIsMERBQWNBLENBQUNxQixRQUFRQyxFQUFFLEVBQUVELFFBQVFJLEVBQUUsRUFBRUosUUFBUUUsVUFBVTtBQUN4RTtBQUNPLFNBQVNHLFFBQVFMLE9BQU87SUFDM0IsT0FBTyxJQUFJckIsMERBQWNBLENBQUNxQixRQUFRSSxFQUFFLEVBQUVKLFFBQVFFLFVBQVU7QUFDNUQ7QUFDTyxTQUFTSSxRQUFRQyxLQUFLO0lBQ3pCLElBQUlBLE1BQU1aLE1BQU0sR0FBRyxJQUFJO1FBQ25CLE1BQU0sSUFBSWEsTUFBTTtJQUNwQjtJQUNBLE9BQU87UUFDSFAsSUFBSU0sTUFBTUUsUUFBUSxDQUFDLEdBQUc7UUFDdEJQLFlBQVlLLE1BQU1FLFFBQVEsQ0FBQyxJQUFJRixNQUFNWixNQUFNO1FBQzNDUyxJQUFJdkIsd0RBQWVBLENBQUM7SUFDeEI7QUFDSjtBQUNPLFNBQVM2QixRQUFRSCxLQUFLO0lBQ3pCLElBQUlBLE1BQU1aLE1BQU0sR0FBRyxJQUFJO1FBQ25CLE1BQU0sSUFBSWEsTUFBTTtJQUNwQjtJQUNBLE9BQU87UUFDSFAsSUFBSU0sTUFBTUUsUUFBUSxDQUFDLEdBQUc7UUFDdEJMLElBQUlHLE1BQU1FLFFBQVEsQ0FBQyxJQUFJO1FBQ3ZCUCxZQUFZSyxNQUFNRSxRQUFRLENBQUMsSUFBSUYsTUFBTVosTUFBTTtJQUMvQztBQUNKO0FBQ08sU0FBU2dCLFFBQVFKLEtBQUs7SUFDekIsSUFBSUEsTUFBTVosTUFBTSxHQUFHLElBQUk7UUFDbkIsTUFBTSxJQUFJYSxNQUFNO0lBQ3BCO0lBQ0EsT0FBTztRQUNIUCxJQUFJcEIsd0RBQWVBLENBQUM7UUFDcEJ1QixJQUFJRyxNQUFNRSxRQUFRLENBQUMsR0FBRztRQUN0QlAsWUFBWUssTUFBTUUsUUFBUSxDQUFDLElBQUlGLE1BQU1aLE1BQU07SUFDL0M7QUFDSixFQUNBLG1DQUFtQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL2Rpc3Qvc3JjL2VuY29kZXIuanM/YTA2MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVaW50OEFycmF5TGlzdCB9IGZyb20gJ3VpbnQ4YXJyYXlsaXN0JztcbmltcG9ydCB7IGFsbG9jIGFzIHVpbnQ4QXJyYXlBbGxvYywgYWxsb2NVbnNhZmUgYXMgdWludDhBcnJheUFsbG9jVW5zYWZlIH0gZnJvbSAndWludDhhcnJheXMvYWxsb2MnO1xuZXhwb3J0IGNvbnN0IHVpbnQxNkJFRW5jb2RlID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdWludDhBcnJheUFsbG9jVW5zYWZlKDIpO1xuICAgIG5ldyBEYXRhVmlldyh0YXJnZXQuYnVmZmVyLCB0YXJnZXQuYnl0ZU9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpLnNldFVpbnQxNigwLCB2YWx1ZSwgZmFsc2UpO1xuICAgIHJldHVybiB0YXJnZXQ7XG59O1xudWludDE2QkVFbmNvZGUuYnl0ZXMgPSAyO1xuZXhwb3J0IGNvbnN0IHVpbnQxNkJFRGVjb2RlID0gKGRhdGEpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPCAyKVxuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdDb3VsZCBub3QgZGVjb2RlIGludDE2QkUnKTtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhVmlldyhkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpLmdldFVpbnQxNigwLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLmdldFVpbnQxNigwKTtcbn07XG51aW50MTZCRURlY29kZS5ieXRlcyA9IDI7XG4vLyBOb3RlOiBJSyBhbmQgWFggZW5jb2RlciB1c2FnZSBpcyBvcHBvc2l0ZSAoWFggdXNlcyBpbiBzdGFnZXMgZW5jb2RlMCB3aGVyZSBJSyB1c2VzIGVuY29kZTEpXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlMChtZXNzYWdlKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5TGlzdChtZXNzYWdlLm5lLCBtZXNzYWdlLmNpcGhlcnRleHQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZTEobWVzc2FnZSkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheUxpc3QobWVzc2FnZS5uZSwgbWVzc2FnZS5ucywgbWVzc2FnZS5jaXBoZXJ0ZXh0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUyKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXlMaXN0KG1lc3NhZ2UubnMsIG1lc3NhZ2UuY2lwaGVydGV4dCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlMChpbnB1dCkge1xuICAgIGlmIChpbnB1dC5sZW5ndGggPCAzMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWNvZGUgc3RhZ2UgMCBNZXNzYWdlQnVmZmVyOiBsZW5ndGggbGVzcyB0aGFuIDMyIGJ5dGVzLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuZTogaW5wdXQuc3ViYXJyYXkoMCwgMzIpLFxuICAgICAgICBjaXBoZXJ0ZXh0OiBpbnB1dC5zdWJhcnJheSgzMiwgaW5wdXQubGVuZ3RoKSxcbiAgICAgICAgbnM6IHVpbnQ4QXJyYXlBbGxvYygwKVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlMShpbnB1dCkge1xuICAgIGlmIChpbnB1dC5sZW5ndGggPCA4MCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWNvZGUgc3RhZ2UgMSBNZXNzYWdlQnVmZmVyOiBsZW5ndGggbGVzcyB0aGFuIDgwIGJ5dGVzLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuZTogaW5wdXQuc3ViYXJyYXkoMCwgMzIpLFxuICAgICAgICBuczogaW5wdXQuc3ViYXJyYXkoMzIsIDgwKSxcbiAgICAgICAgY2lwaGVydGV4dDogaW5wdXQuc3ViYXJyYXkoODAsIGlucHV0Lmxlbmd0aClcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZTIoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQubGVuZ3RoIDwgNDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGVjb2RlIHN0YWdlIDIgTWVzc2FnZUJ1ZmZlcjogbGVuZ3RoIGxlc3MgdGhhbiA0OCBieXRlcy4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmU6IHVpbnQ4QXJyYXlBbGxvYygwKSxcbiAgICAgICAgbnM6IGlucHV0LnN1YmFycmF5KDAsIDQ4KSxcbiAgICAgICAgY2lwaGVydGV4dDogaW5wdXQuc3ViYXJyYXkoNDgsIGlucHV0Lmxlbmd0aClcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW5jb2Rlci5qcy5tYXAiXSwibmFtZXMiOlsiVWludDhBcnJheUxpc3QiLCJhbGxvYyIsInVpbnQ4QXJyYXlBbGxvYyIsImFsbG9jVW5zYWZlIiwidWludDhBcnJheUFsbG9jVW5zYWZlIiwidWludDE2QkVFbmNvZGUiLCJ2YWx1ZSIsInRhcmdldCIsIkRhdGFWaWV3IiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImJ5dGVMZW5ndGgiLCJzZXRVaW50MTYiLCJieXRlcyIsInVpbnQxNkJFRGVjb2RlIiwiZGF0YSIsImxlbmd0aCIsIlJhbmdlRXJyb3IiLCJVaW50OEFycmF5IiwiZ2V0VWludDE2IiwiZW5jb2RlMCIsIm1lc3NhZ2UiLCJuZSIsImNpcGhlcnRleHQiLCJlbmNvZGUxIiwibnMiLCJlbmNvZGUyIiwiZGVjb2RlMCIsImlucHV0IiwiRXJyb3IiLCJzdWJhcnJheSIsImRlY29kZTEiLCJkZWNvZGUyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/encoder.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/errors.js":
/*!*****************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/errors.js ***!
\*****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ InvalidCryptoExchangeError: () => (/* binding */ InvalidCryptoExchangeError),\n/* harmony export */ UnexpectedPeerError: () => (/* binding */ UnexpectedPeerError)\n/* harmony export */ });\nclass UnexpectedPeerError extends Error {\n constructor(message = \"Unexpected Peer\"){\n super(message);\n this.code = UnexpectedPeerError.code;\n }\n static{\n this.code = \"ERR_UNEXPECTED_PEER\";\n }\n}\nclass InvalidCryptoExchangeError extends Error {\n constructor(message = \"Invalid crypto exchange\"){\n super(message);\n this.code = InvalidCryptoExchangeError.code;\n }\n static{\n this.code = \"ERR_INVALID_CRYPTO_EXCHANGE\";\n }\n} //# sourceMappingURL=errors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTUEsNEJBQTRCQztJQUVyQ0MsWUFBWUMsVUFBVSxpQkFBaUIsQ0FBRTtRQUNyQyxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDQyxJQUFJLEdBQUdKLG9CQUFvQkksSUFBSTtJQUN4Qzs7YUFDT0EsT0FBTzs7QUFDbEI7QUFDTyxNQUFNQyxtQ0FBbUNKO0lBRTVDQyxZQUFZQyxVQUFVLHlCQUF5QixDQUFFO1FBQzdDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLElBQUksR0FBR0MsMkJBQTJCRCxJQUFJO0lBQy9DOzthQUNPQSxPQUFPOztBQUNsQixFQUNBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL2Rpc3Qvc3JjL2Vycm9ycy5qcz82NmMyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBVbmV4cGVjdGVkUGVlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvZGU7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdVbmV4cGVjdGVkIFBlZXInKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmNvZGUgPSBVbmV4cGVjdGVkUGVlckVycm9yLmNvZGU7XG4gICAgfVxuICAgIHN0YXRpYyBjb2RlID0gJ0VSUl9VTkVYUEVDVEVEX1BFRVInO1xufVxuZXhwb3J0IGNsYXNzIEludmFsaWRDcnlwdG9FeGNoYW5nZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvZGU7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdJbnZhbGlkIGNyeXB0byBleGNoYW5nZScpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY29kZSA9IEludmFsaWRDcnlwdG9FeGNoYW5nZUVycm9yLmNvZGU7XG4gICAgfVxuICAgIHN0YXRpYyBjb2RlID0gJ0VSUl9JTlZBTElEX0NSWVBUT19FWENIQU5HRSc7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwIl0sIm5hbWVzIjpbIlVuZXhwZWN0ZWRQZWVyRXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwibWVzc2FnZSIsImNvZGUiLCJJbnZhbGlkQ3J5cHRvRXhjaGFuZ2VFcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/errors.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshake-xx.js":
/*!***********************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/handshake-xx.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ XXHandshake: () => (/* binding */ XXHandshake)\n/* harmony export */ });\n/* harmony import */ var uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arrays/alloc */ \"(ssr)/./node_modules/uint8arrays/dist/src/alloc.node.js\");\n/* harmony import */ var _encoder_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./encoder.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/encoder.js\");\n/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/errors.js\");\n/* harmony import */ var _handshakes_xx_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./handshakes/xx.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/xx.js\");\n/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./logger.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/logger.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/utils.js\");\n\n\n\n\n\n\nclass XXHandshake {\n constructor(components, isInitiator, payload, prologue, crypto, staticKeypair, connection, remotePeer, handshake){\n this.remoteExtensions = {\n webtransportCerthashes: []\n };\n this.log = components.logger.forComponent(\"libp2p:noise:xxhandshake\");\n this.isInitiator = isInitiator;\n this.payload = payload;\n this.prologue = prologue;\n this.staticKeypair = staticKeypair;\n this.connection = connection;\n if (remotePeer) {\n this.remotePeer = remotePeer;\n }\n this.xx = handshake ?? new _handshakes_xx_js__WEBPACK_IMPORTED_MODULE_3__.XX(components, crypto);\n this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair);\n }\n // stage 0\n async propose() {\n (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__.logLocalStaticKeys)(this.session.hs.s, this.log);\n if (this.isInitiator) {\n this.log.trace(\"Stage 0 - Initiator starting to send first message.\");\n const messageBuffer = this.xx.sendMessage(this.session, (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(0));\n await this.connection.write((0,_encoder_js__WEBPACK_IMPORTED_MODULE_1__.encode0)(messageBuffer));\n this.log.trace(\"Stage 0 - Initiator finished sending first message.\");\n (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__.logLocalEphemeralKeys)(this.session.hs.e, this.log);\n } else {\n this.log.trace(\"Stage 0 - Responder waiting to receive first message...\");\n const receivedMessageBuffer = (0,_encoder_js__WEBPACK_IMPORTED_MODULE_1__.decode0)((await this.connection.read()).subarray());\n const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);\n if (!valid) {\n throw new _errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidCryptoExchangeError(\"xx handshake stage 0 validation fail\");\n }\n this.log.trace(\"Stage 0 - Responder received first message.\");\n (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__.logRemoteEphemeralKey)(this.session.hs.re, this.log);\n }\n }\n // stage 1\n async exchange() {\n if (this.isInitiator) {\n this.log.trace(\"Stage 1 - Initiator waiting to receive first message from responder...\");\n const receivedMessageBuffer = (0,_encoder_js__WEBPACK_IMPORTED_MODULE_1__.decode1)((await this.connection.read()).subarray());\n const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);\n if (!valid) {\n throw new _errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidCryptoExchangeError(\"xx handshake stage 1 validation fail\");\n }\n this.log.trace(\"Stage 1 - Initiator received the message.\");\n (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__.logRemoteEphemeralKey)(this.session.hs.re, this.log);\n (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__.logRemoteStaticKey)(this.session.hs.rs, this.log);\n this.log.trace(\"Initiator going to check remote's signature...\");\n try {\n const decodedPayload = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.decodePayload)(plaintext);\n this.remotePeer = this.remotePeer || await (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getPeerIdFromPayload)(decodedPayload);\n await (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.verifySignedPayload)(this.session.hs.rs, decodedPayload, this.remotePeer);\n this.setRemoteNoiseExtension(decodedPayload.extensions);\n } catch (e) {\n const err = e;\n throw new _errors_js__WEBPACK_IMPORTED_MODULE_2__.UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`);\n }\n this.log.trace(\"All good with the signature!\");\n } else {\n this.log.trace(\"Stage 1 - Responder sending out first message with signed payload and static key.\");\n const messageBuffer = this.xx.sendMessage(this.session, this.payload);\n await this.connection.write((0,_encoder_js__WEBPACK_IMPORTED_MODULE_1__.encode1)(messageBuffer));\n this.log.trace(\"Stage 1 - Responder sent the second handshake message with signed payload.\");\n (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__.logLocalEphemeralKeys)(this.session.hs.e, this.log);\n }\n }\n // stage 2\n async finish() {\n if (this.isInitiator) {\n this.log.trace(\"Stage 2 - Initiator sending third handshake message.\");\n const messageBuffer = this.xx.sendMessage(this.session, this.payload);\n await this.connection.write((0,_encoder_js__WEBPACK_IMPORTED_MODULE_1__.encode2)(messageBuffer));\n this.log.trace(\"Stage 2 - Initiator sent message with signed payload.\");\n } else {\n this.log.trace(\"Stage 2 - Responder waiting for third handshake message...\");\n const receivedMessageBuffer = (0,_encoder_js__WEBPACK_IMPORTED_MODULE_1__.decode2)((await this.connection.read()).subarray());\n const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);\n if (!valid) {\n throw new _errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidCryptoExchangeError(\"xx handshake stage 2 validation fail\");\n }\n this.log.trace(\"Stage 2 - Responder received the message, finished handshake.\");\n try {\n const decodedPayload = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.decodePayload)(plaintext);\n this.remotePeer = this.remotePeer || await (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getPeerIdFromPayload)(decodedPayload);\n await (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.verifySignedPayload)(this.session.hs.rs, decodedPayload, this.remotePeer);\n this.setRemoteNoiseExtension(decodedPayload.extensions);\n } catch (e) {\n const err = e;\n throw new _errors_js__WEBPACK_IMPORTED_MODULE_2__.UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`);\n }\n }\n (0,_logger_js__WEBPACK_IMPORTED_MODULE_4__.logCipherState)(this.session, this.log);\n }\n encrypt(plaintext, session) {\n const cs = this.getCS(session);\n return this.xx.encryptWithAd(cs, (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(0), plaintext);\n }\n decrypt(ciphertext, session, dst) {\n const cs = this.getCS(session, false);\n return this.xx.decryptWithAd(cs, (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(0), ciphertext, dst);\n }\n getRemoteStaticKey() {\n return this.session.hs.rs;\n }\n getCS(session, encryption = true) {\n if (!session.cs1 || !session.cs2) {\n throw new _errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidCryptoExchangeError(\"Handshake not completed properly, cipher state does not exist.\");\n }\n if (this.isInitiator) {\n return encryption ? session.cs1 : session.cs2;\n } else {\n return encryption ? session.cs2 : session.cs1;\n }\n }\n setRemoteNoiseExtension(e) {\n if (e) {\n this.remoteExtensions = e;\n }\n }\n} //# sourceMappingURL=handshake-xx.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvaGFuZHNoYWtlLXh4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBNkQ7QUFDdUI7QUFDTjtBQUN0QztBQUMyRjtBQUM3QztBQUMvRSxNQUFNbUI7SUFXVEMsWUFBWUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLGFBQWEsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsQ0FBRTthQVBsSEMsbUJBQW1CO1lBQUVDLHdCQUF3QixFQUFFO1FBQUM7UUFRNUMsSUFBSSxDQUFDQyxHQUFHLEdBQUdYLFdBQVdZLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQ1osV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDRSxhQUFhLEdBQUdBO1FBQ3JCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJQyxZQUFZO1lBQ1osSUFBSSxDQUFDQSxVQUFVLEdBQUdBO1FBQ3RCO1FBQ0EsSUFBSSxDQUFDTyxFQUFFLEdBQUdOLGFBQWEsSUFBSW5CLGlEQUFFQSxDQUFDVyxZQUFZSTtRQUMxQyxJQUFJLENBQUNXLE9BQU8sR0FBRyxJQUFJLENBQUNELEVBQUUsQ0FBQ0UsV0FBVyxDQUFDLElBQUksQ0FBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQ0UsYUFBYTtJQUMxRjtJQUNBLFVBQVU7SUFDVixNQUFNWSxVQUFVO1FBQ1ozQiw4REFBa0JBLENBQUMsSUFBSSxDQUFDeUIsT0FBTyxDQUFDRyxFQUFFLENBQUNDLENBQUMsRUFBRSxJQUFJLENBQUNSLEdBQUc7UUFDOUMsSUFBSSxJQUFJLENBQUNWLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUNVLEdBQUcsQ0FBQ1Ms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LFdBQVcsRUFBRTtZQUNsQixPQUFPZ0QsYUFBYWxDLFFBQVFtQyxHQUFHLEdBQUduQyxRQUFRb0MsR0FBRztRQUNqRCxPQUNLO1lBQ0QsT0FBT0YsYUFBYWxDLFFBQVFvQyxHQUFHLEdBQUdwQyxRQUFRbUMsR0FBRztRQUNqRDtJQUNKO0lBQ0FmLHdCQUF3QlgsQ0FBQyxFQUFFO1FBQ3ZCLElBQUlBLEdBQUc7WUFDSCxJQUFJLENBQUNmLGdCQUFnQixHQUFHZTtRQUM1QjtJQUNKO0FBQ0osRUFDQSx3Q0FBd0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9kaXN0L3NyYy9oYW5kc2hha2UteHguanM/YTcxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbGxvYyBhcyB1aW50OEFycmF5QWxsb2MgfSBmcm9tICd1aW50OGFycmF5cy9hbGxvYyc7XG5pbXBvcnQgeyBkZWNvZGUwLCBkZWNvZGUxLCBkZWNvZGUyLCBlbmNvZGUwLCBlbmNvZGUxLCBlbmNvZGUyIH0gZnJvbSAnLi9lbmNvZGVyLmpzJztcbmltcG9ydCB7IEludmFsaWRDcnlwdG9FeGNoYW5nZUVycm9yLCBVbmV4cGVjdGVkUGVlckVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgWFggfSBmcm9tICcuL2hhbmRzaGFrZXMveHguanMnO1xuaW1wb3J0IHsgbG9nTG9jYWxTdGF0aWNLZXlzLCBsb2dMb2NhbEVwaGVtZXJhbEtleXMsIGxvZ1JlbW90ZUVwaGVtZXJhbEtleSwgbG9nUmVtb3RlU3RhdGljS2V5LCBsb2dDaXBoZXJTdGF0ZSB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IGRlY29kZVBheWxvYWQsIGdldFBlZXJJZEZyb21QYXlsb2FkLCB2ZXJpZnlTaWduZWRQYXlsb2FkIH0gZnJvbSAnLi91dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgWFhIYW5kc2hha2Uge1xuICAgIGlzSW5pdGlhdG9yO1xuICAgIHNlc3Npb247XG4gICAgcmVtb3RlUGVlcjtcbiAgICByZW1vdGVFeHRlbnNpb25zID0geyB3ZWJ0cmFuc3BvcnRDZXJ0aGFzaGVzOiBbXSB9O1xuICAgIHBheWxvYWQ7XG4gICAgY29ubmVjdGlvbjtcbiAgICB4eDtcbiAgICBzdGF0aWNLZXlwYWlyO1xuICAgIHByb2xvZ3VlO1xuICAgIGxvZztcbiAgICBjb25zdHJ1Y3Rvcihjb21wb25lbnRzLCBpc0luaXRpYXRvciwgcGF5bG9hZCwgcHJvbG9ndWUsIGNyeXB0bywgc3RhdGljS2V5cGFpciwgY29ubmVjdGlvbiwgcmVtb3RlUGVlciwgaGFuZHNoYWtlKSB7XG4gICAgICAgIHRoaXMubG9nID0gY29tcG9uZW50cy5sb2dnZXIuZm9yQ29tcG9uZW50KCdsaWJwMnA6bm9pc2U6eHhoYW5kc2hha2UnKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYXRvciA9IGlzSW5pdGlhdG9yO1xuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLnByb2xvZ3VlID0gcHJvbG9ndWU7XG4gICAgICAgIHRoaXMuc3RhdGljS2V5cGFpciA9IHN0YXRpY0tleXBhaXI7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgICAgIGlmIChyZW1vdGVQZWVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW90ZVBlZXIgPSByZW1vdGVQZWVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueHggPSBoYW5kc2hha2UgPz8gbmV3IFhYKGNvbXBvbmVudHMsIGNyeXB0byk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbiA9IHRoaXMueHguaW5pdFNlc3Npb24odGhpcy5pc0luaXRpYXRvciwgdGhpcy5wcm9sb2d1ZSwgdGhpcy5zdGF0aWNLZXlwYWlyKTtcbiAgICB9XG4gICAgLy8gc3RhZ2UgMFxuICAgIGFzeW5jIHByb3Bvc2UoKSB7XG4gICAgICAgIGxvZ0xvY2FsU3RhdGljS2V5cyh0aGlzLnNlc3Npb24uaHMucywgdGhpcy5sb2cpO1xuICAgICAgICBpZiAodGhpcy5pc0luaXRpYXRvcikge1xuICAgICAgICAgICAgdGhpcy5sb2cudHJhY2UoJ1N0YWdlIDAgLSBJbml0aWF0b3Igc3RhcnRpbmcgdG8gc2VuZCBmaXJzdCBtZXNzYWdlLicpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IHRoaXMueHguc2VuZE1lc3NhZ2UodGhpcy5zZXNzaW9uLCB1aW50OEFycmF5QWxsb2MoMCkpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uLndyaXRlKGVuY29kZTAobWVzc2FnZUJ1ZmZlcikpO1xuICAgICAgICAgICAgdGhpcy5sb2cudHJhY2UoJ1N0YWdlIDAgLSBJbml0aWF0b3IgZmluaXNoZWQgc2VuZGluZyBmaXJzdCBtZXNzYWdlLicpO1xuICAgICAgICAgICAgbG9nTG9jYWxFcGhlbWVyYWxLZXlzKHRoaXMuc2Vzc2lvbi5ocy5lLCB0aGlzLmxvZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvZy50cmFjZSgnU3RhZ2UgMCAtIFJlc3BvbmRlciB3YWl0aW5nIHRvIHJlY2VpdmUgZmlyc3QgbWVzc2FnZS4uLicpO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRNZXNzYWdlQnVmZmVyID0gZGVjb2RlMCgoYXdhaXQgdGhpcy5jb25uZWN0aW9uLnJlYWQoKSkuc3ViYXJyYXkoKSk7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkIH0gPSB0aGlzLnh4LnJlY3ZNZXNzYWdlKHRoaXMuc2Vzc2lvbiwgcmVjZWl2ZWRNZXNzYWdlQnVmZmVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENyeXB0b0V4Y2hhbmdlRXJyb3IoJ3h4IGhhbmRzaGFrZSBzdGFnZSAwIHZhbGlkYXRpb24gZmFpbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2cudHJhY2UoJ1N0YWdlIDAgLSBSZXNwb25kZXIgcmVjZWl2ZWQgZmlyc3QgbWVzc2FnZS4nKTtcbiAgICAgICAgICAgIGxvZ1JlbW90ZUVwaGVtZXJhbEtleSh0aGlzLnNlc3Npb24uaHMucmUsIHRoaXMubG9nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzdGFnZSAxXG4gICAgYXN5bmMgZXhjaGFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy50cmFjZSgnU3RhZ2UgMSAtIEluaXRpYXRvciB3YWl0aW5nIHRvIHJlY2VpdmUgZmlyc3QgbWVzc2FnZSBmcm9tIHJlc3BvbmRlci4uLicpO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRNZXNzYWdlQnVmZmVyID0gZGVjb2RlMSgoYXdhaXQgdGhpcy5jb25uZWN0aW9uLnJlYWQoKSkuc3ViYXJyYXkoKSk7XG4gICAgICAgICAgICBjb25zdCB7IHBsYWludGV4dCwgdmFsaWQgfSA9IHRoaXMueHgucmVjdk1lc3NhZ2UodGhpcy5zZXNzaW9uLCByZWNlaXZlZE1lc3NhZ2VCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ3J5cHRvRXhjaGFuZ2VFcnJvcigneHggaGFuZHNoYWtlIHN0YWdlIDEgdmFsaWRhdGlvbiBmYWlsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvZy50cmFjZSgnU3RhZ2UgMSAtIEluaXRpYXRvciByZWNlaXZlZCB0aGUgbWVzc2FnZS4nKTtcbiAgICAgICAgICAgIGxvZ1JlbW90ZUVwaGVtZXJhbEtleSh0aGlzLnNlc3Npb24uaHMucmUsIHRoaXMubG9nKTtcbiAgICAgICAgICAgIGxvZ1JlbW90ZVN0YXRpY0tleSh0aGlzLnNlc3Npb24uaHMucnMsIHRoaXMubG9nKTtcbiAgICAgICAgICAgIHRoaXMubG9nLnRyYWNlKFwiSW5pdGlhdG9yIGdvaW5nIHRvIGNoZWNrIHJlbW90ZSdzIHNpZ25hdHVyZS4uLlwiKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZFBheWxvYWQgPSBkZWNvZGVQYXlsb2FkKHBsYWludGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdGVQZWVyID0gdGhpcy5yZW1vdGVQZWVyIHx8IGF3YWl0IGdldFBlZXJJZEZyb21QYXlsb2FkKGRlY29kZWRQYXlsb2FkKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB2ZXJpZnlTaWduZWRQYXlsb2FkKHRoaXMuc2Vzc2lvbi5ocy5ycywgZGVjb2RlZFBheWxvYWQsIHRoaXMucmVtb3RlUGVlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZW1vdGVOb2lzZUV4dGVuc2lvbihkZWNvZGVkUGF5bG9hZC5leHRlbnNpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFBlZXJFcnJvcihgRXJyb3Igb2NjdXJyZWQgd2hpbGUgdmVyaWZ5aW5nIHNpZ25lZCBwYXlsb2FkOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2cudHJhY2UoJ0FsbCBnb29kIHdpdGggdGhlIHNpZ25hdHVyZSEnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nLnRyYWNlKCdTdGFnZSAxIC0gUmVzcG9uZGVyIHNlbmRpbmcgb3V0IGZpcnN0IG1lc3NhZ2Ugd2l0aCBzaWduZWQgcGF5bG9hZCBhbmQgc3RhdGljIGtleS4nKTtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSB0aGlzLnh4LnNlbmRNZXNzYWdlKHRoaXMuc2Vzc2lvbiwgdGhpcy5wYXlsb2FkKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbi53cml0ZShlbmNvZGUxKG1lc3NhZ2VCdWZmZXIpKTtcbiAgICAgICAgICAgIHRoaXMubG9nLnRyYWNlKCdTdGFnZSAxIC0gUmVzcG9uZGVyIHNlbnQgdGhlIHNlY29uZCBoYW5kc2hha2UgbWVzc2FnZSB3aXRoIHNpZ25lZCBwYXlsb2FkLicpO1xuICAgICAgICAgICAgbG9nTG9jYWxFcGhlbWVyYWxLZXlzKHRoaXMuc2Vzc2lvbi5ocy5lLCB0aGlzLmxvZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc3RhZ2UgMlxuICAgIGFzeW5jIGZpbmlzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLnRyYWNlKCdTdGFnZSAyIC0gSW5pdGlhdG9yIHNlbmRpbmcgdGhpcmQgaGFuZHNoYWtlIG1lc3NhZ2UuJyk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gdGhpcy54eC5zZW5kTWVzc2FnZSh0aGlzLnNlc3Npb24sIHRoaXMucGF5bG9hZCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24ud3JpdGUoZW5jb2RlMihtZXNzYWdlQnVmZmVyKSk7XG4gICAgICAgICAgICB0aGlzLmxvZy50cmFjZSgnU3RhZ2UgMiAtIEluaXRpYXRvciBzZW50IG1lc3NhZ2Ugd2l0aCBzaWduZWQgcGF5bG9hZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nLnRyYWNlKCdTdGFnZSAyIC0gUmVzcG9uZGVyIHdhaXRpbmcgZm9yIHRoaXJkIGhhbmRzaGFrZSBtZXNzYWdlLi4uJyk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlZE1lc3NhZ2VCdWZmZXIgPSBkZWNvZGUyKChhd2FpdCB0aGlzLmNvbm5lY3Rpb24ucmVhZCgpKS5zdWJhcnJheSgpKTtcbiAgICAgICAgICAgIGNvbnN0IHsgcGxhaW50ZXh0LCB2YWxpZCB9ID0gdGhpcy54eC5yZWN2TWVzc2FnZSh0aGlzLnNlc3Npb24sIHJlY2VpdmVkTWVzc2FnZUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDcnlwdG9FeGNoYW5nZUVycm9yKCd4eCBoYW5kc2hha2Ugc3RhZ2UgMiB2YWxpZGF0aW9uIGZhaWwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nLnRyYWNlKCdTdGFnZSAyIC0gUmVzcG9uZGVyIHJlY2VpdmVkIHRoZSBtZXNzYWdlLCBmaW5pc2hlZCBoYW5kc2hha2UuJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZWRQYXlsb2FkID0gZGVjb2RlUGF5bG9hZChwbGFpbnRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlUGVlciA9IHRoaXMucmVtb3RlUGVlciB8fCBhd2FpdCBnZXRQZWVySWRGcm9tUGF5bG9hZChkZWNvZGVkUGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdmVyaWZ5U2lnbmVkUGF5bG9hZCh0aGlzLnNlc3Npb24uaHMucnMsIGRlY29kZWRQYXlsb2FkLCB0aGlzLnJlbW90ZVBlZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVtb3RlTm9pc2VFeHRlbnNpb24oZGVjb2RlZFBheWxvYWQuZXh0ZW5zaW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IGU7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRQZWVyRXJyb3IoYEVycm9yIG9jY3VycmVkIHdoaWxlIHZlcmlmeWluZyBzaWduZWQgcGF5bG9hZDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2dDaXBoZXJTdGF0ZSh0aGlzLnNlc3Npb24sIHRoaXMubG9nKTtcbiAgICB9XG4gICAgZW5jcnlwdChwbGFpbnRleHQsIHNlc3Npb24pIHtcbiAgICAgICAgY29uc3QgY3MgPSB0aGlzLmdldENTKHNlc3Npb24pO1xuICAgICAgICByZXR1cm4gdGhpcy54eC5lbmNyeXB0V2l0aEFkKGNzLCB1aW50OEFycmF5QWxsb2MoMCksIHBsYWludGV4dCk7XG4gICAgfVxuICAgIGRlY3J5cHQoY2lwaGVydGV4dCwgc2Vzc2lvbiwgZHN0KSB7XG4gICAgICAgIGNvbnN0IGNzID0gdGhpcy5nZXRDUyhzZXNzaW9uLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnh4LmRlY3J5cHRXaXRoQWQoY3MsIHVpbnQ4QXJyYXlBbGxvYygwKSwgY2lwaGVydGV4dCwgZHN0KTtcbiAgICB9XG4gICAgZ2V0UmVtb3RlU3RhdGljS2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmhzLnJzO1xuICAgIH1cbiAgICBnZXRDUyhzZXNzaW9uLCBlbmNyeXB0aW9uID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXNlc3Npb24uY3MxIHx8ICFzZXNzaW9uLmNzMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDcnlwdG9FeGNoYW5nZUVycm9yKCdIYW5kc2hha2Ugbm90IGNvbXBsZXRlZCBwcm9wZXJseSwgY2lwaGVyIHN0YXRlIGRvZXMgbm90IGV4aXN0LicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jcnlwdGlvbiA/IHNlc3Npb24uY3MxIDogc2Vzc2lvbi5jczI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jcnlwdGlvbiA/IHNlc3Npb24uY3MyIDogc2Vzc2lvbi5jczE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0UmVtb3RlTm9pc2VFeHRlbnNpb24oZSkge1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdGVFeHRlbnNpb25zID0gZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRzaGFrZS14eC5qcy5tYXAiXSwibmFtZXMiOlsiYWxsb2MiLCJ1aW50OEFycmF5QWxsb2MiLCJkZWNvZGUwIiwiZGVjb2RlMSIsImRlY29kZTIiLCJlbmNvZGUwIiwiZW5jb2RlMSIsImVuY29kZTIiLCJJbnZhbGlkQ3J5cHRvRXhjaGFuZ2VFcnJvciIsIlVuZXhwZWN0ZWRQZWVyRXJyb3IiLCJYWCIsImxvZ0xvY2FsU3RhdGljS2V5cyIsImxvZ0xvY2FsRXBoZW1lcmFsS2V5cyIsImxvZ1JlbW90ZUVwaGVtZXJhbEtleSIsImxvZ1JlbW90ZVN0YXRpY0tleSIsImxvZ0NpcGhlclN0YXRlIiwiZGVjb2RlUGF5bG9hZCIsImdldFBlZXJJZEZyb21QYXlsb2FkIiwidmVyaWZ5U2lnbmVkUGF5bG9hZCIsIlhYSGFuZHNoYWtlIiwiY29uc3RydWN0b3IiLCJjb21wb25lbnRzIiwiaXNJbml0aWF0b3IiLCJwYXlsb2FkIiwicHJvbG9ndWUiLCJjcnlwdG8iLCJzdGF0aWNLZXlwYWlyIiwiY29ubmVjdGlvbiIsInJlbW90ZVBlZXIiLCJoYW5kc2hha2UiLCJyZW1vdGVFeHRlbnNpb25zIiwid2VidHJhbnNwb3J0Q2VydGhhc2hlcyIsImxvZyIsImxvZ2dlciIsImZvckNvbXBvbmVudCIsInh4Iiwic2Vzc2lvbiIsImluaXRTZXNzaW9uIiwicHJvcG9zZSIsImhzIiwicyIsInRyYWNlIiwibWVzc2FnZUJ1ZmZlciIsInNlbmRNZXNzYWdlIiwid3JpdGUiLCJlIiwicmVjZWl2ZWRNZXNzYWdlQnVmZmVyIiwicmVhZCIsInN1YmFycmF5IiwidmFsaWQiLCJyZWN2TWVzc2FnZSIsInJlIiwiZXhjaGFuZ2UiLCJwbGFpbnRleHQiLCJycyIsImRlY29kZWRQYXlsb2FkIiwic2V0UmVtb3RlTm9pc2VFeHRlbnNpb24iLCJleHRlbnNpb25zIiwiZXJyIiwibWVzc2FnZSIsImZpbmlzaCIsImVuY3J5cHQiLCJjcyIsImdldENTIiwiZW5jcnlwdFdpdGhBZCIsImRlY3J5cHQiLCJjaXBoZXJ0ZXh0IiwiZHN0IiwiZGVjcnlwdFdpdGhBZCIsImdldFJlbW90ZVN0YXRpY0tleSIsImVuY3J5cHRpb24iLCJjczEiLCJjczIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshake-xx.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/abstract-handshake.js":
/*!****************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/abstract-handshake.js ***!
\****************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractHandshake: () => (/* binding */ AbstractHandshake)\n/* harmony export */ });\n/* harmony import */ var uint8arraylist__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arraylist */ \"(ssr)/./node_modules/uint8arraylist/dist/src/index.js\");\n/* harmony import */ var uint8arrays__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays */ \"(ssr)/./node_modules/uint8arrays/dist/src/index.js\");\n/* harmony import */ var uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uint8arrays/alloc */ \"(ssr)/./node_modules/uint8arrays/dist/src/alloc.node.js\");\n/* harmony import */ var uint8arrays_equals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/equals */ \"(ssr)/./node_modules/uint8arrays/dist/src/equals.js\");\n/* harmony import */ var _nonce_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../nonce.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/nonce.js\");\n\n\n\n\n\nclass AbstractHandshake {\n constructor(components, crypto){\n this.log = components.logger.forComponent(\"libp2p:noise:abstract-handshake\");\n this.crypto = crypto;\n }\n encryptWithAd(cs, ad, plaintext) {\n const e = this.encrypt(cs.k, cs.n, ad, plaintext);\n cs.n.increment();\n return e;\n }\n decryptWithAd(cs, ad, ciphertext, dst) {\n const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext, dst);\n if (valid) cs.n.increment();\n return {\n plaintext,\n valid\n };\n }\n // Cipher state related\n hasKey(cs) {\n return !this.isEmptyKey(cs.k);\n }\n createEmptyKey() {\n return (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(32);\n }\n isEmptyKey(k) {\n const emptyKey = this.createEmptyKey();\n return (0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_3__.equals)(emptyKey, k);\n }\n encrypt(k, n, ad, plaintext) {\n n.assertValue();\n return this.crypto.chaCha20Poly1305Encrypt(plaintext, n.getBytes(), ad, k);\n }\n encryptAndHash(ss, plaintext) {\n let ciphertext;\n if (this.hasKey(ss.cs)) {\n ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext);\n } else {\n ciphertext = plaintext;\n }\n this.mixHash(ss, ciphertext);\n return ciphertext;\n }\n decrypt(k, n, ad, ciphertext, dst) {\n n.assertValue();\n const encryptedMessage = this.crypto.chaCha20Poly1305Decrypt(ciphertext, n.getBytes(), ad, k, dst);\n if (encryptedMessage) {\n return {\n plaintext: encryptedMessage,\n valid: true\n };\n } else {\n return {\n plaintext: (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(0),\n valid: false\n };\n }\n }\n decryptAndHash(ss, ciphertext) {\n let plaintext;\n let valid = true;\n if (this.hasKey(ss.cs)) {\n ({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext));\n } else {\n plaintext = ciphertext;\n }\n this.mixHash(ss, ciphertext);\n return {\n plaintext,\n valid\n };\n }\n dh(privateKey, publicKey) {\n try {\n const derivedU8 = this.crypto.generateX25519SharedKey(privateKey, publicKey);\n if (derivedU8.length === 32) {\n return derivedU8;\n }\n return derivedU8.subarray(0, 32);\n } catch (e) {\n const err = e;\n this.log.error(\"error deriving shared key\", err);\n return (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(32);\n }\n }\n mixHash(ss, data) {\n ss.h = this.getHash(ss.h, data);\n }\n getHash(a, b) {\n const u = this.crypto.hashSHA256(new uint8arraylist__WEBPACK_IMPORTED_MODULE_0__.Uint8ArrayList(a, b));\n return u;\n }\n mixKey(ss, ikm) {\n const [ck, tempK] = this.crypto.getHKDF(ss.ck, ikm);\n ss.cs = this.initializeKey(tempK);\n ss.ck = ck;\n }\n initializeKey(k) {\n return {\n k,\n n: new _nonce_js__WEBPACK_IMPORTED_MODULE_4__.Nonce()\n };\n }\n // Symmetric state related\n initializeSymmetric(protocolName) {\n const protocolNameBytes = (0,uint8arrays__WEBPACK_IMPORTED_MODULE_1__.fromString)(protocolName, \"utf-8\");\n const h = this.hashProtocolName(protocolNameBytes);\n const ck = h;\n const key = this.createEmptyKey();\n const cs = this.initializeKey(key);\n return {\n cs,\n ck,\n h\n };\n }\n hashProtocolName(protocolName) {\n if (protocolName.length <= 32) {\n const h = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(32);\n h.set(protocolName);\n return h;\n } else {\n return this.getHash(protocolName, (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(0));\n }\n }\n split(ss) {\n const [tempk1, tempk2] = this.crypto.getHKDF(ss.ck, (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(0));\n const cs1 = this.initializeKey(tempk1);\n const cs2 = this.initializeKey(tempk2);\n return {\n cs1,\n cs2\n };\n }\n writeMessageRegular(cs, payload) {\n const ciphertext = this.encryptWithAd(cs, (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(0), payload);\n const ne = this.createEmptyKey();\n const ns = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(0);\n return {\n ne,\n ns,\n ciphertext\n };\n }\n readMessageRegular(cs, message) {\n return this.decryptWithAd(cs, (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_2__.alloc)(0), message.ciphertext);\n }\n} //# sourceMappingURL=abstract-handshake.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvaGFuZHNoYWtlcy9hYnN0cmFjdC1oYW5kc2hha2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWdEO0FBQ2lCO0FBQ0o7QUFDRztBQUM1QjtBQUM3QixNQUFNUTtJQUdUQyxZQUFZQyxVQUFVLEVBQUVDLE1BQU0sQ0FBRTtRQUM1QixJQUFJLENBQUNDLEdBQUcsR0FBR0YsV0FBV0csTUFBTSxDQUFDQyxZQUFZLENBQUM7UUFDMUMsSUFBSSxDQUFDSCxNQUFNLEdBQUdBO0lBQ2xCO0lBQ0FJLGNBQWNDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxTQUFTLEVBQUU7UUFDN0IsTUFBTUMsSUFBSSxJQUFJLENBQUNDLE9BQU8sQ0FBQ0osR0FBR0ssQ0FBQyxFQUFFTCxHQUFHTSxDQUFDLEVBQUVMLElBQUlDO1FBQ3ZDRixHQUFHTSxDQUFDLENBQUNDLFNBQVM7UUFDZCxPQUFPSjtJQUNYO0lBQ0FLLGNBQWNSLEVBQUUsRUFBRUMsRUFBRSxFQUFFUSxVQUFVLEVBQUVDLEdBQUcsRUFBRTtRQUNuQyxNQUFNLEVBQUVSLFNBQVMsRUFBRVMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDQyxPQUFPLENBQUNaLEdBQUdLLENBQUMsRUFBRUwsR0FBR00sQ0FBQyxFQUFFTCxJQUFJUSxZQUFZQztRQUN0RSxJQUFJQyxPQUNBWCxHQUFHTSxDQUFDLENBQUNDLFNBQVM7UUFDbEIsT0FBTztZQUFFTDtZQUFXUztRQUFNO0lBQzlCO0lBQ0EsdUJBQXVCO0lBQ3ZCRSxPQUFPYixFQUFFLEVBQUU7UUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDYyxVQUFVLENBQUNkLEdBQUdLLENBQUM7SUFDaEM7SUFDQVUsaUJBQWlCO1FBQ2IsT0FBTzNCLHdEQUFlQSxDQUFDO0lBQzNCO0lBQ0EwQixXQUFXVCxDQUFDLEVBQUU7UUFDVixNQUFNVyxXQUFXLElBQUksQ0FBQ0QsY0FBYztRQUNwQyxPQUFPekIs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LE1BQU0rQyxLQUFLMUUsd0RBQWVBLENBQUM7UUFDM0IsT0FBTztZQUFFeUU7WUFBSUM7WUFBSXJEO1FBQVc7SUFDaEM7SUFDQXNELG1CQUFtQi9ELEVBQUUsRUFBRWdFLE9BQU8sRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQ3hELGFBQWEsQ0FBQ1IsSUFBSVosd0RBQWVBLENBQUMsSUFBSTRFLFFBQVF2RCxVQUFVO0lBQ3hFO0FBQ0osRUFDQSw4Q0FBOEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9kaXN0L3NyYy9oYW5kc2hha2VzL2Fic3RyYWN0LWhhbmRzaGFrZS5qcz80N2E2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVpbnQ4QXJyYXlMaXN0IH0gZnJvbSAndWludDhhcnJheWxpc3QnO1xuaW1wb3J0IHsgZnJvbVN0cmluZyBhcyB1aW50OEFycmF5RnJvbVN0cmluZyB9IGZyb20gJ3VpbnQ4YXJyYXlzJztcbmltcG9ydCB7IGFsbG9jIGFzIHVpbnQ4QXJyYXlBbGxvYyB9IGZyb20gJ3VpbnQ4YXJyYXlzL2FsbG9jJztcbmltcG9ydCB7IGVxdWFscyBhcyB1aW50OEFycmF5RXF1YWxzIH0gZnJvbSAndWludDhhcnJheXMvZXF1YWxzJztcbmltcG9ydCB7IE5vbmNlIH0gZnJvbSAnLi4vbm9uY2UuanMnO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0SGFuZHNoYWtlIHtcbiAgICBjcnlwdG87XG4gICAgbG9nO1xuICAgIGNvbnN0cnVjdG9yKGNvbXBvbmVudHMsIGNyeXB0bykge1xuICAgICAgICB0aGlzLmxvZyA9IGNvbXBvbmVudHMubG9nZ2VyLmZvckNvbXBvbmVudCgnbGlicDJwOm5vaXNlOmFic3RyYWN0LWhhbmRzaGFrZScpO1xuICAgICAgICB0aGlzLmNyeXB0byA9IGNyeXB0bztcbiAgICB9XG4gICAgZW5jcnlwdFdpdGhBZChjcywgYWQsIHBsYWludGV4dCkge1xuICAgICAgICBjb25zdCBlID0gdGhpcy5lbmNyeXB0KGNzLmssIGNzLm4sIGFkLCBwbGFpbnRleHQpO1xuICAgICAgICBjcy5uLmluY3JlbWVudCgpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgZGVjcnlwdFdpdGhBZChjcywgYWQsIGNpcGhlcnRleHQsIGRzdCkge1xuICAgICAgICBjb25zdCB7IHBsYWludGV4dCwgdmFsaWQgfSA9IHRoaXMuZGVjcnlwdChjcy5rLCBjcy5uLCBhZCwgY2lwaGVydGV4dCwgZHN0KTtcbiAgICAgICAgaWYgKHZhbGlkKVxuICAgICAgICAgICAgY3Mubi5pbmNyZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIHsgcGxhaW50ZXh0LCB2YWxpZCB9O1xuICAgIH1cbiAgICAvLyBDaXBoZXIgc3RhdGUgcmVsYXRlZFxuICAgIGhhc0tleShjcykge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNFbXB0eUtleShjcy5rKTtcbiAgICB9XG4gICAgY3JlYXRlRW1wdHlLZXkoKSB7XG4gICAgICAgIHJldHVybiB1aW50OEFycmF5QWxsb2MoMzIpO1xuICAgIH1cbiAgICBpc0VtcHR5S2V5KGspIHtcbiAgICAgICAgY29uc3QgZW1wdHlLZXkgPSB0aGlzLmNyZWF0ZUVtcHR5S2V5KCk7XG4gICAgICAgIHJldHVybiB1aW50OEFycmF5RXF1YWxzKGVtcHR5S2V5LCBrKTtcbiAgICB9XG4gICAgZW5jcnlwdChrLCBuLCBhZCwgcGxhaW50ZXh0KSB7XG4gICAgICAgIG4uYXNzZXJ0VmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3J5cHRvLmNoYUNoYTIwUG9seTEzMDVFbmNyeXB0KHBsYWludGV4dCwgbi5nZXRCeXRlcygpLCBhZCwgayk7XG4gICAgfVxuICAgIGVuY3J5cHRBbmRIYXNoKHNzLCBwbGFpbnRleHQpIHtcbiAgICAgICAgbGV0IGNpcGhlcnRleHQ7XG4gICAgICAgIGlmICh0aGlzLmhhc0tleShzcy5jcykpIHtcbiAgICAgICAgICAgIGNpcGhlcnRleHQgPSB0aGlzLmVuY3J5cHRXaXRoQWQoc3MuY3MsIHNzLmgsIHBsYWludGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gcGxhaW50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWl4SGFzaChzcywgY2lwaGVydGV4dCk7XG4gICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuICAgIH1cbiAgICBkZWNyeXB0KGssIG4sIGFkLCBjaXBoZXJ0ZXh0LCBkc3QpIHtcbiAgICAgICAgbi5hc3NlcnRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWRNZXNzYWdlID0gdGhpcy5jcnlwdG8uY2hhQ2hhMjBQb2x5MTMwNURlY3J5cHQoY2lwaGVydGV4dCwgbi5nZXRCeXRlcygpLCBhZCwgaywgZHN0KTtcbiAgICAgICAgaWYgKGVuY3J5cHRlZE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGxhaW50ZXh0OiBlbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwbGFpbnRleHQ6IHVpbnQ4QXJyYXlBbGxvYygwKSxcbiAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVjcnlwdEFuZEhhc2goc3MsIGNpcGhlcnRleHQpIHtcbiAgICAgICAgbGV0IHBsYWludGV4dDtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzS2V5KHNzLmNzKSkge1xuICAgICAgICAgICAgKHsgcGxhaW50ZXh0LCB2YWxpZCB9ID0gdGhpcy5kZWNyeXB0V2l0aEFkKHNzLmNzLCBzcy5oLCBjaXBoZXJ0ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwbGFpbnRleHQgPSBjaXBoZXJ0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWl4SGFzaChzcywgY2lwaGVydGV4dCk7XG4gICAgICAgIHJldHVybiB7IHBsYWludGV4dCwgdmFsaWQgfTtcbiAgICB9XG4gICAgZGgocHJpdmF0ZUtleSwgcHVibGljS2V5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXJpdmVkVTggPSB0aGlzLmNyeXB0by5nZW5lcmF0ZVgyNTUxOVNoYXJlZEtleShwcml2YXRlS2V5LCBwdWJsaWNLZXkpO1xuICAgICAgICAgICAgaWYgKGRlcml2ZWRVOC5sZW5ndGggPT09IDMyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRVODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVkVTguc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBlO1xuICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoJ2Vycm9yIGRlcml2aW5nIHNoYXJlZCBrZXknLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIHVpbnQ4QXJyYXlBbGxvYygzMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWl4SGFzaChzcywgZGF0YSkge1xuICAgICAgICBzcy5oID0gdGhpcy5nZXRIYXNoKHNzLmgsIGRhdGEpO1xuICAgIH1cbiAgICBnZXRIYXNoKGEsIGIpIHtcbiAgICAgICAgY29uc3QgdSA9IHRoaXMuY3J5cHRvLmhhc2hTSEEyNTYobmV3IFVpbnQ4QXJyYXlMaXN0KGEsIGIpKTtcbiAgICAgICAgcmV0dXJuIHU7XG4gICAgfVxuICAgIG1peEtleShzcywgaWttKSB7XG4gICAgICAgIGNvbnN0IFtjaywgdGVtcEtdID0gdGhpcy5jcnlwdG8uZ2V0SEtERihzcy5jaywgaWttKTtcbiAgICAgICAgc3MuY3MgPSB0aGlzLmluaXRpYWxpemVLZXkodGVtcEspO1xuICAgICAgICBzcy5jayA9IGNrO1xuICAgIH1cbiAgICBpbml0aWFsaXplS2V5KGspIHtcbiAgICAgICAgcmV0dXJuIHsgaywgbjogbmV3IE5vbmNlKCkgfTtcbiAgICB9XG4gICAgLy8gU3ltbWV0cmljIHN0YXRlIHJlbGF0ZWRcbiAgICBpbml0aWFsaXplU3ltbWV0cmljKHByb3RvY29sTmFtZSkge1xuICAgICAgICBjb25zdCBwcm90b2NvbE5hbWVCeXRlcyA9IHVpbnQ4QXJyYXlGcm9tU3RyaW5nKHByb3RvY29sTmFtZSwgJ3V0Zi04Jyk7XG4gICAgICAgIGNvbnN0IGggPSB0aGlzLmhhc2hQcm90b2NvbE5hbWUocHJvdG9jb2xOYW1lQnl0ZXMpO1xuICAgICAgICBjb25zdCBjayA9IGg7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY3JlYXRlRW1wdHlLZXkoKTtcbiAgICAgICAgY29uc3QgY3MgPSB0aGlzLmluaXRpYWxpemVLZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIHsgY3MsIGNrLCBoIH07XG4gICAgfVxuICAgIGhhc2hQcm90b2NvbE5hbWUocHJvdG9jb2xOYW1lKSB7XG4gICAgICAgIGlmIChwcm90b2NvbE5hbWUubGVuZ3RoIDw9IDMyKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gdWludDhBcnJheUFsbG9jKDMyKTtcbiAgICAgICAgICAgIGguc2V0KHByb3RvY29sTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gaDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhhc2gocHJvdG9jb2xOYW1lLCB1aW50OEFycmF5QWxsb2MoMCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNwbGl0KHNzKSB7XG4gICAgICAgIGNvbnN0IFt0ZW1wazEsIHRlbXBrMl0gPSB0aGlzLmNyeXB0by5nZXRIS0RGKHNzLmNrLCB1aW50OEFycmF5QWxsb2MoMCkpO1xuICAgICAgICBjb25zdCBjczEgPSB0aGlzLmluaXRpYWxpemVLZXkodGVtcGsxKTtcbiAgICAgICAgY29uc3QgY3MyID0gdGhpcy5pbml0aWFsaXplS2V5KHRlbXBrMik7XG4gICAgICAgIHJldHVybiB7IGNzMSwgY3MyIH07XG4gICAgfVxuICAgIHdyaXRlTWVzc2FnZVJlZ3VsYXIoY3MsIHBheWxvYWQpIHtcbiAgICAgICAgY29uc3QgY2lwaGVydGV4dCA9IHRoaXMuZW5jcnlwdFdpdGhBZChjcywgdWludDhBcnJheUFsbG9jKDApLCBwYXlsb2FkKTtcbiAgICAgICAgY29uc3QgbmUgPSB0aGlzLmNyZWF0ZUVtcHR5S2V5KCk7XG4gICAgICAgIGNvbnN0IG5zID0gdWludDhBcnJheUFsbG9jKDApO1xuICAgICAgICByZXR1cm4geyBuZSwgbnMsIGNpcGhlcnRleHQgfTtcbiAgICB9XG4gICAgcmVhZE1lc3NhZ2VSZWd1bGFyKGNzLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRXaXRoQWQoY3MsIHVpbnQ4QXJyYXlBbGxvYygwKSwgbWVzc2FnZS5jaXBoZXJ0ZXh0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hYnN0cmFjdC1oYW5kc2hha2UuanMubWFwIl0sIm5hbWVzIjpbIlVpbnQ4QXJyYXlMaXN0IiwiZnJvbVN0cmluZyIsInVpbnQ4QXJyYXlGcm9tU3RyaW5nIiwiYWxsb2MiLCJ1aW50OEFycmF5QWxsb2MiLCJlcXVhbHMiLCJ1aW50OEFycmF5RXF1YWxzIiwiTm9uY2UiLCJBYnN0cmFjdEhhbmRzaGFrZSIsImNvbnN0cnVjdG9yIiwiY29tcG9uZW50cyIsImNyeXB0byIsImxvZyIsImxvZ2dlciIsImZvckNvbXBvbmVudCIsImVuY3J5cHRXaXRoQWQiLCJjcyIsImFkIiwicGxhaW50ZXh0IiwiZSIsImVuY3J5cHQiLCJrIiwibiIsImluY3JlbWVudCIsImRlY3J5cHRXaXRoQWQiLCJjaXBoZXJ0ZXh0IiwiZHN0IiwidmFsaWQiLCJkZWNyeXB0IiwiaGFzS2V5IiwiaXNFbXB0eUtleSIsImNyZWF0ZUVtcHR5S2V5IiwiZW1wdHlLZXkiLCJhc3NlcnRWYWx1ZSIsImNoYUNoYTIwUG9seTEzMDVFbmNyeXB0IiwiZ2V0Qnl0ZXMiLCJlbmNyeXB0QW5kSGFzaCIsInNzIiwiaCIsIm1peEhhc2giLCJlbmNyeXB0ZWRNZXNzYWdlIiwiY2hhQ2hhMjBQb2x5MTMwNURlY3J5cHQiLCJkZWNyeXB0QW5kSGFzaCIsImRoIiwicHJpdmF0ZUtleSIsInB1YmxpY0tleSIsImRlcml2ZWRVOCIsImdlbmVyYXRlWDI1NTE5U2hhcmVkS2V5IiwibGVuZ3RoIiwic3ViYXJyYXkiLCJlcnIiLCJlcnJvciIsImRhdGEiLCJnZXRIYXNoIiwiYSIsImIiLCJ1IiwiaGFzaFNIQTI1NiIsIm1peEtleSIsImlrbSIsImNrIiwidGVtcEsiLCJnZXRIS0RGIiwiaW5pdGlhbGl6ZUtleSIsImluaXRpYWxpemVTeW1tZXRyaWMiLCJwcm90b2NvbE5hbWUiLCJwcm90b2NvbE5hbWVCeXRlcyIsImhhc2hQcm90b2NvbE5hbWUiLCJrZXkiLCJzZXQiLCJzcGxpdCIsInRlbXBrMSIsInRlbXBrMiIsImNzMSIsImNzMiIsIndyaXRlTWVzc2FnZVJlZ3VsYXIiLCJwYXlsb2FkIiwibmUiLCJucyIsInJlYWRNZXNzYWdlUmVndWxhciIsIm1lc3NhZ2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/abstract-handshake.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/xx.js":
/*!************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/xx.js ***!
\************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ XX: () => (/* binding */ XX)\n/* harmony export */ });\n/* harmony import */ var uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arrays/alloc */ \"(ssr)/./node_modules/uint8arrays/dist/src/alloc.node.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/utils.js\");\n/* harmony import */ var _abstract_handshake_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./abstract-handshake.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/abstract-handshake.js\");\n\n\n\nclass XX extends _abstract_handshake_js__WEBPACK_IMPORTED_MODULE_2__.AbstractHandshake {\n initializeInitiator(prologue, s, rs, psk) {\n const name = \"Noise_XX_25519_ChaChaPoly_SHA256\";\n const ss = this.initializeSymmetric(name);\n this.mixHash(ss, prologue);\n const re = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(32);\n return {\n ss,\n s,\n rs,\n psk,\n re\n };\n }\n initializeResponder(prologue, s, rs, psk) {\n const name = \"Noise_XX_25519_ChaChaPoly_SHA256\";\n const ss = this.initializeSymmetric(name);\n this.mixHash(ss, prologue);\n const re = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(32);\n return {\n ss,\n s,\n rs,\n psk,\n re\n };\n }\n writeMessageA(hs, payload, e) {\n const ns = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(0);\n if (e !== undefined) {\n hs.e = e;\n } else {\n hs.e = this.crypto.generateX25519KeyPair();\n }\n const ne = hs.e.publicKey;\n this.mixHash(hs.ss, ne);\n const ciphertext = this.encryptAndHash(hs.ss, payload);\n return {\n ne,\n ns,\n ciphertext\n };\n }\n writeMessageB(hs, payload) {\n hs.e = this.crypto.generateX25519KeyPair();\n const ne = hs.e.publicKey;\n this.mixHash(hs.ss, ne);\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re));\n const spk = hs.s.publicKey;\n const ns = this.encryptAndHash(hs.ss, spk);\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re));\n const ciphertext = this.encryptAndHash(hs.ss, payload);\n return {\n ne,\n ns,\n ciphertext\n };\n }\n writeMessageC(hs, payload) {\n const spk = hs.s.publicKey;\n const ns = this.encryptAndHash(hs.ss, spk);\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re));\n const ciphertext = this.encryptAndHash(hs.ss, payload);\n const ne = this.createEmptyKey();\n const messageBuffer = {\n ne,\n ns,\n ciphertext\n };\n const { cs1, cs2 } = this.split(hs.ss);\n return {\n h: hs.ss.h,\n messageBuffer,\n cs1,\n cs2\n };\n }\n readMessageA(hs, message) {\n if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.isValidPublicKey)(message.ne)) {\n hs.re = message.ne;\n }\n this.mixHash(hs.ss, hs.re);\n return this.decryptAndHash(hs.ss, message.ciphertext);\n }\n readMessageB(hs, message) {\n if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.isValidPublicKey)(message.ne)) {\n hs.re = message.ne;\n }\n this.mixHash(hs.ss, hs.re);\n if (!hs.e) {\n throw new Error(\"Handshake state `e` param is missing.\");\n }\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re));\n const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns);\n if (valid1 && (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.isValidPublicKey)(ns)) {\n hs.rs = ns;\n }\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs));\n const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext);\n return {\n plaintext,\n valid: valid1 && valid2\n };\n }\n readMessageC(hs, message) {\n const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns);\n if (valid1 && (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.isValidPublicKey)(ns)) {\n hs.rs = ns;\n }\n if (!hs.e) {\n throw new Error(\"Handshake state `e` param is missing.\");\n }\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs));\n const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext);\n const { cs1, cs2 } = this.split(hs.ss);\n return {\n h: hs.ss.h,\n plaintext,\n valid: valid1 && valid2,\n cs1,\n cs2\n };\n }\n initSession(initiator, prologue, s) {\n const psk = this.createEmptyKey();\n const rs = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(32); // no static key yet\n let hs;\n if (initiator) {\n hs = this.initializeInitiator(prologue, s, rs, psk);\n } else {\n hs = this.initializeResponder(prologue, s, rs, psk);\n }\n return {\n hs,\n i: initiator,\n mc: 0\n };\n }\n sendMessage(session, message, ephemeral) {\n let messageBuffer;\n if (session.mc === 0) {\n messageBuffer = this.writeMessageA(session.hs, message, ephemeral);\n } else if (session.mc === 1) {\n messageBuffer = this.writeMessageB(session.hs, message);\n } else if (session.mc === 2) {\n const { h, messageBuffer: resultingBuffer, cs1, cs2 } = this.writeMessageC(session.hs, message);\n messageBuffer = resultingBuffer;\n session.h = h;\n session.cs1 = cs1;\n session.cs2 = cs2;\n } else if (session.mc > 2) {\n if (session.i) {\n if (!session.cs1) {\n throw new Error(\"CS1 (cipher state) is not defined\");\n }\n messageBuffer = this.writeMessageRegular(session.cs1, message);\n } else {\n if (!session.cs2) {\n throw new Error(\"CS2 (cipher state) is not defined\");\n }\n messageBuffer = this.writeMessageRegular(session.cs2, message);\n }\n } else {\n throw new Error(\"Session invalid.\");\n }\n session.mc++;\n return messageBuffer;\n }\n recvMessage(session, message) {\n let plaintext = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(0);\n let valid = false;\n if (session.mc === 0) {\n ({ plaintext, valid } = this.readMessageA(session.hs, message));\n } else if (session.mc === 1) {\n ({ plaintext, valid } = this.readMessageB(session.hs, message));\n } else if (session.mc === 2) {\n const { h, plaintext: resultingPlaintext, valid: resultingValid, cs1, cs2 } = this.readMessageC(session.hs, message);\n plaintext = resultingPlaintext;\n valid = resultingValid;\n session.h = h;\n session.cs1 = cs1;\n session.cs2 = cs2;\n }\n session.mc++;\n return {\n plaintext,\n valid\n };\n }\n} //# sourceMappingURL=xx.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvaGFuZHNoYWtlcy94eC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTZEO0FBQ2Q7QUFDYTtBQUNyRCxNQUFNSSxXQUFXRCxxRUFBaUJBO0lBQ3JDRSxvQkFBb0JDLFFBQVEsRUFBRUMsQ0FBQyxFQUFFQyxFQUFFLEVBQUVDLEdBQUcsRUFBRTtRQUN0QyxNQUFNQyxPQUFPO1FBQ2IsTUFBTUMsS0FBSyxJQUFJLENBQUNDLG1CQUFtQixDQUFDRjtRQUNwQyxJQUFJLENBQUNHLE9BQU8sQ0FBQ0YsSUFBSUw7UUFDakIsTUFBTVEsS0FBS2Isd0RBQWVBLENBQUM7UUFDM0IsT0FBTztZQUFFVTtZQUFJSjtZQUFHQztZQUFJQztZQUFLSztRQUFHO0lBQ2hDO0lBQ0FDLG9CQUFvQlQsUUFBUSxFQUFFQyxDQUFDLEVBQUVDLEVBQUUsRUFBRUMsR0FBRyxFQUFFO1FBQ3RDLE1BQU1DLE9BQU87UUFDYixNQUFNQyxLQUFLLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNGO1FBQ3BDLElBQUksQ0FBQ0csT0FBTyxDQUFDRixJQUFJTDtRQUNqQixNQUFNUSxLQUFLYix3REFBZUEsQ0FBQztRQUMzQixPQUFPO1lBQUVVO1lBQUlKO1lBQUdDO1lBQUlDO1lBQUtLO1FBQUc7SUFDaEM7SUFDQUUsY0FBY0MsRUFBRSxFQUFFQyxPQUFPLEVBQUVDLENBQUMsRUFBRTtRQUMxQixNQUFNQyxLQUFLbkIsd0RBQWVBLENBQUM7UUFDM0IsSUFBSWtCLE1BQU1FLFdBQVc7WUFDakJKLEdBQUdFLENBQUMsR0FBR0E7UUFDWCxPQUNLO1lBQ0RGLEdBQUdFLENBQUMsR0FBRyxJQUFJLENBQUNHLE1BQU0sQ0FBQ0MscUJBQXFCO1FBQzVDO1FBQ0EsTUFBTUMsS0FBS1AsR0FBR0UsQ0FBQyxDQUFDTSxTQUFTO1FBQ3pCLElBQUksQ0FBQ1osT0FBTyxDQUFDSSxHQUFHTixFQUFFLEVBQUVhO1FBQ3BCLE1BQU1F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QUV6QixHQUFHLEVBQUVDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQ1ksWUFBWSxDQUFDTSxRQUFRdEMsRUFBRSxFQUFFd0I7WUFDNUdJLFlBQVllO1lBQ1pkLFFBQVFlO1lBQ1JOLFFBQVFoQixDQUFDLEdBQUdBO1lBQ1pnQixRQUFRbkIsR0FBRyxHQUFHQTtZQUNkbUIsUUFBUWxCLEdBQUcsR0FBR0E7UUFDbEI7UUFDQWtCLFFBQVFGLEVBQUU7UUFDVixPQUFPO1lBQUVSO1lBQVdDO1FBQU07SUFDOUI7QUFDSixFQUNBLDhCQUE4QiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL2Rpc3Qvc3JjL2hhbmRzaGFrZXMveHguanM/MzJmOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbGxvYyBhcyB1aW50OEFycmF5QWxsb2MgfSBmcm9tICd1aW50OGFycmF5cy9hbGxvYyc7XG5pbXBvcnQgeyBpc1ZhbGlkUHVibGljS2V5IH0gZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYW5kc2hha2UgfSBmcm9tICcuL2Fic3RyYWN0LWhhbmRzaGFrZS5qcyc7XG5leHBvcnQgY2xhc3MgWFggZXh0ZW5kcyBBYnN0cmFjdEhhbmRzaGFrZSB7XG4gICAgaW5pdGlhbGl6ZUluaXRpYXRvcihwcm9sb2d1ZSwgcywgcnMsIHBzaykge1xuICAgICAgICBjb25zdCBuYW1lID0gJ05vaXNlX1hYXzI1NTE5X0NoYUNoYVBvbHlfU0hBMjU2JztcbiAgICAgICAgY29uc3Qgc3MgPSB0aGlzLmluaXRpYWxpemVTeW1tZXRyaWMobmFtZSk7XG4gICAgICAgIHRoaXMubWl4SGFzaChzcywgcHJvbG9ndWUpO1xuICAgICAgICBjb25zdCByZSA9IHVpbnQ4QXJyYXlBbGxvYygzMik7XG4gICAgICAgIHJldHVybiB7IHNzLCBzLCBycywgcHNrLCByZSB9O1xuICAgIH1cbiAgICBpbml0aWFsaXplUmVzcG9uZGVyKHByb2xvZ3VlLCBzLCBycywgcHNrKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAnTm9pc2VfWFhfMjU1MTlfQ2hhQ2hhUG9seV9TSEEyNTYnO1xuICAgICAgICBjb25zdCBzcyA9IHRoaXMuaW5pdGlhbGl6ZVN5bW1ldHJpYyhuYW1lKTtcbiAgICAgICAgdGhpcy5taXhIYXNoKHNzLCBwcm9sb2d1ZSk7XG4gICAgICAgIGNvbnN0IHJlID0gdWludDhBcnJheUFsbG9jKDMyKTtcbiAgICAgICAgcmV0dXJuIHsgc3MsIHMsIHJzLCBwc2ssIHJlIH07XG4gICAgfVxuICAgIHdyaXRlTWVzc2FnZUEoaHMsIHBheWxvYWQsIGUpIHtcbiAgICAgICAgY29uc3QgbnMgPSB1aW50OEFycmF5QWxsb2MoMCk7XG4gICAgICAgIGlmIChlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhzLmUgPSBlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaHMuZSA9IHRoaXMuY3J5cHRvLmdlbmVyYXRlWDI1NTE5S2V5UGFpcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5lID0gaHMuZS5wdWJsaWNLZXk7XG4gICAgICAgIHRoaXMubWl4SGFzaChocy5zcywgbmUpO1xuICAgICAgICBjb25zdCBjaXBoZXJ0ZXh0ID0gdGhpcy5lbmNyeXB0QW5kSGFzaChocy5zcywgcGF5bG9hZCk7XG4gICAgICAgIHJldHVybiB7IG5lLCBucywgY2lwaGVydGV4dCB9O1xuICAgIH1cbiAgICB3cml0ZU1lc3NhZ2VCKGhzLCBwYXlsb2FkKSB7XG4gICAgICAgIGhzLmUgPSB0aGlzLmNyeXB0by5nZW5lcmF0ZVgyNTUxOUtleVBhaXIoKTtcbiAgICAgICAgY29uc3QgbmUgPSBocy5lLnB1YmxpY0tleTtcbiAgICAgICAgdGhpcy5taXhIYXNoKGhzLnNzLCBuZSk7XG4gICAgICAgIHRoaXMubWl4S2V5KGhzLnNzLCB0aGlzLmRoKGhzLmUucHJpdmF0ZUtleSwgaHMucmUpKTtcbiAgICAgICAgY29uc3Qgc3BrID0gaHMucy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IG5zID0gdGhpcy5lbmNyeXB0QW5kSGFzaChocy5zcywgc3BrKTtcbiAgICAgICAgdGhpcy5taXhLZXkoaHMuc3MsIHRoaXMuZGgoaHMucy5wcml2YXRlS2V5LCBocy5yZSkpO1xuICAgICAgICBjb25zdCBjaXBoZXJ0ZXh0ID0gdGhpcy5lbmNyeXB0QW5kSGFzaChocy5zcywgcGF5bG9hZCk7XG4gICAgICAgIHJldHVybiB7IG5lLCBucywgY2lwaGVydGV4dCB9O1xuICAgIH1cbiAgICB3cml0ZU1lc3NhZ2VDKGhzLCBwYXlsb2FkKSB7XG4gICAgICAgIGNvbnN0IHNwayA9IGhzLnMucHVibGljS2V5O1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuZW5jcnlwdEFuZEhhc2goaHMuc3MsIHNwayk7XG4gICAgICAgIHRoaXMubWl4S2V5KGhzLnNzLCB0aGlzLmRoKGhzLnMucHJpdmF0ZUtleSwgaHMucmUpKTtcbiAgICAgICAgY29uc3QgY2lwaGVydGV4dCA9IHRoaXMuZW5jcnlwdEFuZEhhc2goaHMuc3MsIHBheWxvYWQpO1xuICAgICAgICBjb25zdCBuZSA9IHRoaXMuY3JlYXRlRW1wdHlLZXkoKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZUJ1ZmZlciA9IHsgbmUsIG5zLCBjaXBoZXJ0ZXh0IH07XG4gICAgICAgIGNvbnN0IHsgY3MxLCBjczIgfSA9IHRoaXMuc3BsaXQoaHMuc3MpO1xuICAgICAgICByZXR1cm4geyBoOiBocy5zcy5oLCBtZXNzYWdlQnVmZmVyLCBjczEsIGNzMiB9O1xuICAgIH1cbiAgICByZWFkTWVzc2FnZUEoaHMsIG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKGlzVmFsaWRQdWJsaWNLZXkobWVzc2FnZS5uZSkpIHtcbiAgICAgICAgICAgIGhzLnJlID0gbWVzc2FnZS5uZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1peEhhc2goaHMuc3MsIGhzLnJlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFuZEhhc2goaHMuc3MsIG1lc3NhZ2UuY2lwaGVydGV4dCk7XG4gICAgfVxuICAgIHJlYWRNZXNzYWdlQihocywgbWVzc2FnZSkge1xuICAgICAgICBpZiAoaXNWYWxpZFB1YmxpY0tleShtZXNzYWdlLm5lKSkge1xuICAgICAgICAgICAgaHMucmUgPSBtZXNzYWdlLm5lO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWl4SGFzaChocy5zcywgaHMucmUpO1xuICAgICAgICBpZiAoIWhzLmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGFuZHNoYWtlIHN0YXRlIGBlYCBwYXJhbSBpcyBtaXNzaW5nLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWl4S2V5KGhzLnNzLCB0aGlzLmRoKGhzLmUucHJpdmF0ZUtleSwgaHMucmUpKTtcbiAgICAgICAgY29uc3QgeyBwbGFpbnRleHQ6IG5zLCB2YWxpZDogdmFsaWQxIH0gPSB0aGlzLmRlY3J5cHRBbmRIYXNoKGhzLnNzLCBtZXNzYWdlLm5zKTtcbiAgICAgICAgaWYgKHZhbGlkMSAmJiBpc1ZhbGlkUHVibGljS2V5KG5zKSkge1xuICAgICAgICAgICAgaHMucnMgPSBucztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1peEtleShocy5zcywgdGhpcy5kaChocy5lLnByaXZhdGVLZXksIGhzLnJzKSk7XG4gICAgICAgIGNvbnN0IHsgcGxhaW50ZXh0LCB2YWxpZDogdmFsaWQyIH0gPSB0aGlzLmRlY3J5cHRBbmRIYXNoKGhzLnNzLCBtZXNzYWdlLmNpcGhlcnRleHQpO1xuICAgICAgICByZXR1cm4geyBwbGFpbnRleHQsIHZhbGlkOiAodmFsaWQxICYmIHZhbGlkMikgfTtcbiAgICB9XG4gICAgcmVhZE1lc3NhZ2VDKGhzLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHsgcGxhaW50ZXh0OiBucywgdmFsaWQ6IHZhbGlkMSB9ID0gdGhpcy5kZWNyeXB0QW5kSGFzaChocy5zcywgbWVzc2FnZS5ucyk7XG4gICAgICAgIGlmICh2YWxpZDEgJiYgaXNWYWxpZFB1YmxpY0tleShucykpIHtcbiAgICAgICAgICAgIGhzLnJzID0gbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFocy5lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhbmRzaGFrZSBzdGF0ZSBgZWAgcGFyYW0gaXMgbWlzc2luZy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1peEtleShocy5zcywgdGhpcy5kaChocy5lLnByaXZhdGVLZXksIGhzLnJzKSk7XG4gICAgICAgIGNvbnN0IHsgcGxhaW50ZXh0LCB2YWxpZDogdmFsaWQyIH0gPSB0aGlzLmRlY3J5cHRBbmRIYXNoKGhzLnNzLCBtZXNzYWdlLmNpcGhlcnRleHQpO1xuICAgICAgICBjb25zdCB7IGNzMSwgY3MyIH0gPSB0aGlzLnNwbGl0KGhzLnNzKTtcbiAgICAgICAgcmV0dXJuIHsgaDogaHMuc3MuaCwgcGxhaW50ZXh0LCB2YWxpZDogKHZhbGlkMSAmJiB2YWxpZDIpLCBjczEsIGNzMiB9O1xuICAgIH1cbiAgICBpbml0U2Vzc2lvbihpbml0aWF0b3IsIHByb2xvZ3VlLCBzKSB7XG4gICAgICAgIGNvbnN0IHBzayA9IHRoaXMuY3JlYXRlRW1wdHlLZXkoKTtcbiAgICAgICAgY29uc3QgcnMgPSB1aW50OEFycmF5QWxsb2MoMzIpOyAvLyBubyBzdGF0aWMga2V5IHlldFxuICAgICAgICBsZXQgaHM7XG4gICAgICAgIGlmIChpbml0aWF0b3IpIHtcbiAgICAgICAgICAgIGhzID0gdGhpcy5pbml0aWFsaXplSW5pdGlhdG9yKHByb2xvZ3VlLCBzLCBycywgcHNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhzID0gdGhpcy5pbml0aWFsaXplUmVzcG9uZGVyKHByb2xvZ3VlLCBzLCBycywgcHNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaHMsXG4gICAgICAgICAgICBpOiBpbml0aWF0b3IsXG4gICAgICAgICAgICBtYzogMFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzZW5kTWVzc2FnZShzZXNzaW9uLCBtZXNzYWdlLCBlcGhlbWVyYWwpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2VCdWZmZXI7XG4gICAgICAgIGlmIChzZXNzaW9uLm1jID09PSAwKSB7XG4gICAgICAgICAgICBtZXNzYWdlQnVmZmVyID0gdGhpcy53cml0ZU1lc3NhZ2VBKHNlc3Npb24uaHMsIG1lc3NhZ2UsIGVwaGVtZXJhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vzc2lvbi5tYyA9PT0gMSkge1xuICAgICAgICAgICAgbWVzc2FnZUJ1ZmZlciA9IHRoaXMud3JpdGVNZXNzYWdlQihzZXNzaW9uLmhzLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZXNzaW9uLm1jID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCB7IGgsIG1lc3NhZ2VCdWZmZXI6IHJlc3VsdGluZ0J1ZmZlciwgY3MxLCBjczIgfSA9IHRoaXMud3JpdGVNZXNzYWdlQyhzZXNzaW9uLmhzLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXIgPSByZXN1bHRpbmdCdWZmZXI7XG4gICAgICAgICAgICBzZXNzaW9uLmggPSBoO1xuICAgICAgICAgICAgc2Vzc2lvbi5jczEgPSBjczE7XG4gICAgICAgICAgICBzZXNzaW9uLmNzMiA9IGNzMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZXNzaW9uLm1jID4gMikge1xuICAgICAgICAgICAgaWYgKHNlc3Npb24uaSkge1xuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbi5jczEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDUzEgKGNpcGhlciBzdGF0ZSkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWVzc2FnZUJ1ZmZlciA9IHRoaXMud3JpdGVNZXNzYWdlUmVndWxhcihzZXNzaW9uLmNzMSwgbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24uY3MyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ1MyIChjaXBoZXIgc3RhdGUpIGlzIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXIgPSB0aGlzLndyaXRlTWVzc2FnZVJlZ3VsYXIoc2Vzc2lvbi5jczIsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uIGludmFsaWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbi5tYysrO1xuICAgICAgICByZXR1cm4gbWVzc2FnZUJ1ZmZlcjtcbiAgICB9XG4gICAgcmVjdk1lc3NhZ2Uoc2Vzc2lvbiwgbWVzc2FnZSkge1xuICAgICAgICBsZXQgcGxhaW50ZXh0ID0gdWludDhBcnJheUFsbG9jKDApO1xuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHNlc3Npb24ubWMgPT09IDApIHtcbiAgICAgICAgICAgICh7IHBsYWludGV4dCwgdmFsaWQgfSA9IHRoaXMucmVhZE1lc3NhZ2VBKHNlc3Npb24uaHMsIG1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZXNzaW9uLm1jID09PSAxKSB7XG4gICAgICAgICAgICAoeyBwbGFpbnRleHQsIHZhbGlkIH0gPSB0aGlzLnJlYWRNZXNzYWdlQihzZXNzaW9uLmhzLCBtZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vzc2lvbi5tYyA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgeyBoLCBwbGFpbnRleHQ6IHJlc3VsdGluZ1BsYWludGV4dCwgdmFsaWQ6IHJlc3VsdGluZ1ZhbGlkLCBjczEsIGNzMiB9ID0gdGhpcy5yZWFkTWVzc2FnZUMoc2Vzc2lvbi5ocywgbWVzc2FnZSk7XG4gICAgICAgICAgICBwbGFpbnRleHQgPSByZXN1bHRpbmdQbGFpbnRleHQ7XG4gICAgICAgICAgICB2YWxpZCA9IHJlc3VsdGluZ1ZhbGlkO1xuICAgICAgICAgICAgc2Vzc2lvbi5oID0gaDtcbiAgICAgICAgICAgIHNlc3Npb24uY3MxID0gY3MxO1xuICAgICAgICAgICAgc2Vzc2lvbi5jczIgPSBjczI7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbi5tYysrO1xuICAgICAgICByZXR1cm4geyBwbGFpbnRleHQsIHZhbGlkIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eHguanMubWFwIl0sIm5hbWVzIjpbImFsbG9jIiwidWludDhBcnJheUFsbG9jIiwiaXNWYWxpZFB1YmxpY0tleSIsIkFic3RyYWN0SGFuZHNoYWtlIiwiWFgiLCJpbml0aWFsaXplSW5pdGlhdG9yIiwicHJvbG9ndWUiLCJzIiwicnMiLCJwc2siLCJuYW1lIiwic3MiLCJpbml0aWFsaXplU3ltbWV0cmljIiwibWl4SGFzaCIsInJlIiwiaW5pdGlhbGl6ZVJlc3BvbmRlciIsIndyaXRlTWVzc2FnZUEiLCJocyIsInBheWxvYWQiLCJlIiwibnMiLCJ1bmRlZmluZWQiLCJjcnlwdG8iLCJnZW5lcmF0ZVgyNTUxOUtleVBhaXIiLCJuZSIsInB1YmxpY0tleSIsImNpcGhlcnRleHQiLCJlbmNyeXB0QW5kSGFzaCIsIndyaXRlTWVzc2FnZUIiLCJtaXhLZXkiLCJkaCIsInByaXZhdGVLZXkiLCJzcGsiLCJ3cml0ZU1lc3NhZ2VDIiwiY3JlYXRlRW1wdHlLZXkiLCJtZXNzYWdlQnVmZmVyIiwiY3MxIiwiY3MyIiwic3BsaXQiLCJoIiwicmVhZE1lc3NhZ2VBIiwibWVzc2FnZSIsImRlY3J5cHRBbmRIYXNoIiwicmVhZE1lc3NhZ2VCIiwiRXJyb3IiLCJwbGFpbnRleHQiLCJ2YWxpZCIsInZhbGlkMSIsInZhbGlkMiIsInJlYWRNZXNzYWdlQyIsImluaXRTZXNzaW9uIiwiaW5pdGlhdG9yIiwiaSIsIm1jIiwic2VuZE1lc3NhZ2UiLCJzZXNzaW9uIiwiZXBoZW1lcmFsIiwicmVzdWx0aW5nQnVmZmVyIiwid3JpdGVNZXNzYWdlUmVndWxhciIsInJlY3ZNZXNzYWdlIiwicmVzdWx0aW5nUGxhaW50ZXh0IiwicmVzdWx0aW5nVmFsaWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshakes/xx.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/index.js":
/*!****************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/index.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ noise: () => (/* binding */ noise),\n/* harmony export */ pureJsCrypto: () => (/* reexport safe */ _crypto_js_js__WEBPACK_IMPORTED_MODULE_1__.pureJsCrypto)\n/* harmony export */ });\n/* harmony import */ var _noise_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./noise.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/noise.js\");\n/* harmony import */ var _crypto_js_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./crypto/js.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/js.js\");\n\n\nfunction noise(init = {}) {\n return (components)=>new _noise_js__WEBPACK_IMPORTED_MODULE_0__.Noise(components, init);\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFtQztBQUNXO0FBQ3ZDLFNBQVNFLE1BQU1DLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLE9BQU8sQ0FBQ0MsYUFBZSxJQUFJSiw0Q0FBS0EsQ0FBQ0ksWUFBWUQ7QUFDakQsRUFDQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9kaXN0L3NyYy9pbmRleC5qcz9hMTE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vaXNlIH0gZnJvbSAnLi9ub2lzZS5qcyc7XG5leHBvcnQgeyBwdXJlSnNDcnlwdG8gfSBmcm9tICcuL2NyeXB0by9qcy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gbm9pc2UoaW5pdCA9IHt9KSB7XG4gICAgcmV0dXJuIChjb21wb25lbnRzKSA9PiBuZXcgTm9pc2UoY29tcG9uZW50cywgaW5pdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiTm9pc2UiLCJwdXJlSnNDcnlwdG8iLCJub2lzZSIsImluaXQiLCJjb21wb25lbnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/logger.js":
/*!*****************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/logger.js ***!
\*****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ logCipherState: () => (/* binding */ logCipherState),\n/* harmony export */ logLocalEphemeralKeys: () => (/* binding */ logLocalEphemeralKeys),\n/* harmony export */ logLocalStaticKeys: () => (/* binding */ logLocalStaticKeys),\n/* harmony export */ logRemoteEphemeralKey: () => (/* binding */ logRemoteEphemeralKey),\n/* harmony export */ logRemoteStaticKey: () => (/* binding */ logRemoteStaticKey)\n/* harmony export */ });\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/constants.js\");\n\n\nfunction logLocalStaticKeys(s, keyLogger) {\n if (!keyLogger.enabled || !_constants_js__WEBPACK_IMPORTED_MODULE_1__.DUMP_SESSION_KEYS) {\n return;\n }\n keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(s.publicKey, \"hex\")}`);\n keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(s.privateKey, \"hex\")}`);\n}\nfunction logLocalEphemeralKeys(e, keyLogger) {\n if (!keyLogger.enabled || !_constants_js__WEBPACK_IMPORTED_MODULE_1__.DUMP_SESSION_KEYS) {\n return;\n }\n if (e) {\n keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(e.publicKey, \"hex\")}`);\n keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(e.privateKey, \"hex\")}`);\n } else {\n keyLogger(\"Missing local ephemeral keys.\");\n }\n}\nfunction logRemoteStaticKey(rs, keyLogger) {\n if (!keyLogger.enabled || !_constants_js__WEBPACK_IMPORTED_MODULE_1__.DUMP_SESSION_KEYS) {\n return;\n }\n keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(rs.subarray(), \"hex\")}`);\n}\nfunction logRemoteEphemeralKey(re, keyLogger) {\n if (!keyLogger.enabled || !_constants_js__WEBPACK_IMPORTED_MODULE_1__.DUMP_SESSION_KEYS) {\n return;\n }\n keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(re.subarray(), \"hex\")}`);\n}\nfunction logCipherState(session, keyLogger) {\n if (!keyLogger.enabled || !_constants_js__WEBPACK_IMPORTED_MODULE_1__.DUMP_SESSION_KEYS) {\n return;\n }\n if (session.cs1 && session.cs2) {\n keyLogger(`CIPHER_STATE_1 ${session.cs1.n.getUint64()} ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(session.cs1.k, \"hex\")}`);\n keyLogger(`CIPHER_STATE_2 ${session.cs2.n.getUint64()} ${(0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_0__.toString)(session.cs2.k, \"hex\")}`);\n } else {\n keyLogger(\"Missing cipher state.\");\n }\n} //# sourceMappingURL=logger.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvbG9nZ2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBdUU7QUFDcEI7QUFDNUMsU0FBU0csbUJBQW1CQyxDQUFDLEVBQUVDLFNBQVM7SUFDM0MsSUFBSSxDQUFDQSxVQUFVQyxPQUFPLElBQUksQ0FBQ0osNERBQWlCQSxFQUFFO1FBQzFDO0lBQ0o7SUFDQUcsVUFBVSxDQUFDLHdCQUF3QixFQUFFSiwrREFBa0JBLENBQUNHLEVBQUVHLFNBQVMsRUFBRSxPQUFPLENBQUM7SUFDN0VGLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRUosK0RBQWtCQSxDQUFDRyxFQUFFSSxVQUFVLEVBQUUsT0FBTyxDQUFDO0FBQ25GO0FBQ08sU0FBU0Msc0JBQXNCQyxDQUFDLEVBQUVMLFNBQVM7SUFDOUMsSUFBSSxDQUFDQSxVQUFVQyxPQUFPLElBQUksQ0FBQ0osNERBQWlCQSxFQUFFO1FBQzFDO0lBQ0o7SUFDQSxJQUFJUSxHQUFHO1FBQ0hMLFVBQVUsQ0FBQywyQkFBMkIsRUFBRUosK0RBQWtCQSxDQUFDUyxFQUFFSCxTQUFTLEVBQUUsT0FBTyxDQUFDO1FBQ2hGRixVQUFVLENBQUMsNEJBQTRCLEVBQUVKLCtEQUFrQkEsQ0FBQ1MsRUFBRUYsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUN0RixPQUNLO1FBQ0RILFVBQVU7SUFDZDtBQUNKO0FBQ08sU0FBU00sbUJBQW1CQyxFQUFFLEVBQUVQLFNBQVM7SUFDNUMsSUFBSSxDQUFDQSxVQUFVQyxPQUFPLElBQUksQ0FBQ0osNERBQWlCQSxFQUFFO1FBQzFDO0lBQ0o7SUFDQUcsVUFBVSxDQUFDLHlCQUF5QixFQUFFSiwrREFBa0JBLENBQUNXLEdBQUdDLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDcEY7QUFDTyxTQUFTQyxzQkFBc0JDLEVBQUUsRUFBRVYsU0FBUztJQUMvQyxJQUFJLENBQUNBLFVBQVVDLE9BQU8sSUFBSSxDQUFDSiw0REFBaUJBLEVBQUU7UUFDMUM7SUFDSjtJQUNBRyxVQUFVLENBQUMsNEJBQTRCLEVBQUVKLCtEQUFrQkEsQ0FBQ2MsR0FBR0YsUUFBUSxJQUFJLE9BQU8sQ0FBQztBQUN2RjtBQUNPLFNBQVNHLGVBQWVDLE9BQU8sRUFBRVosU0FBUztJQUM3QyxJQUFJLENBQUNBLFVBQVVDLE9BQU8sSUFBSSxDQUFDSiw0REFBaUJBLEVBQUU7UUFDMUM7SUFDSjtJQUNBLElBQUllLFFBQVFDLEdBQUcsSUFBSUQsUUFBUUUsR0FBRyxFQUFFO1FBQzVCZCxVQUFVLENBQUMsZUFBZSxFQUFFWSxRQUFRQyxHQUFHLENBQUNFLENBQUMsQ0FBQ0MsU0FBUyxHQUFHLENBQUMsRUFBRXBCLCtEQUFrQkEsQ0FBQ2dCLFFBQVFDLEdBQUcsQ0FBQ0ksQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUNuR2pCLFVBQVUsQ0FBQyxlQUFlLEVBQUVZLFFBQVFFLEdBQUcsQ0FBQ0MsQ0FBQyxDQUFDQyxTQUFTLEdBQUcsQ0FBQyxFQUFFcEIsK0RBQWtCQSxDQUFDZ0IsUUFBUUUsR0FBRyxDQUFDRyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3ZHLE9BQ0s7UUFDRGpCLFVBQVU7SUFDZDtBQUNKLEVBQ0Esa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvbG9nZ2VyLmpzP2RkMWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9TdHJpbmcgYXMgdWludDhBcnJheVRvU3RyaW5nIH0gZnJvbSAndWludDhhcnJheXMvdG8tc3RyaW5nJztcbmltcG9ydCB7IERVTVBfU0VTU0lPTl9LRVlTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ0xvY2FsU3RhdGljS2V5cyhzLCBrZXlMb2dnZXIpIHtcbiAgICBpZiAoIWtleUxvZ2dlci5lbmFibGVkIHx8ICFEVU1QX1NFU1NJT05fS0VZUykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGtleUxvZ2dlcihgTE9DQUxfU1RBVElDX1BVQkxJQ19LRVkgJHt1aW50OEFycmF5VG9TdHJpbmcocy5wdWJsaWNLZXksICdoZXgnKX1gKTtcbiAgICBrZXlMb2dnZXIoYExPQ0FMX1NUQVRJQ19QUklWQVRFX0tFWSAke3VpbnQ4QXJyYXlUb1N0cmluZyhzLnByaXZhdGVLZXksICdoZXgnKX1gKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb2dMb2NhbEVwaGVtZXJhbEtleXMoZSwga2V5TG9nZ2VyKSB7XG4gICAgaWYgKCFrZXlMb2dnZXIuZW5hYmxlZCB8fCAhRFVNUF9TRVNTSU9OX0tFWVMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZSkge1xuICAgICAgICBrZXlMb2dnZXIoYExPQ0FMX1BVQkxJQ19FUEhFTUVSQUxfS0VZICR7dWludDhBcnJheVRvU3RyaW5nKGUucHVibGljS2V5LCAnaGV4Jyl9YCk7XG4gICAgICAgIGtleUxvZ2dlcihgTE9DQUxfUFJJVkFURV9FUEhFTUVSQUxfS0VZICR7dWludDhBcnJheVRvU3RyaW5nKGUucHJpdmF0ZUtleSwgJ2hleCcpfWApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAga2V5TG9nZ2VyKCdNaXNzaW5nIGxvY2FsIGVwaGVtZXJhbCBrZXlzLicpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBsb2dSZW1vdGVTdGF0aWNLZXkocnMsIGtleUxvZ2dlcikge1xuICAgIGlmICgha2V5TG9nZ2VyLmVuYWJsZWQgfHwgIURVTVBfU0VTU0lPTl9LRVlTKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAga2V5TG9nZ2VyKGBSRU1PVEVfU1RBVElDX1BVQkxJQ19LRVkgJHt1aW50OEFycmF5VG9TdHJpbmcocnMuc3ViYXJyYXkoKSwgJ2hleCcpfWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvZ1JlbW90ZUVwaGVtZXJhbEtleShyZSwga2V5TG9nZ2VyKSB7XG4gICAgaWYgKCFrZXlMb2dnZXIuZW5hYmxlZCB8fCAhRFVNUF9TRVNTSU9OX0tFWVMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBrZXlMb2dnZXIoYFJFTU9URV9FUEhFTUVSQUxfUFVCTElDX0tFWSAke3VpbnQ4QXJyYXlUb1N0cmluZyhyZS5zdWJhcnJheSgpLCAnaGV4Jyl9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gbG9nQ2lwaGVyU3RhdGUoc2Vzc2lvbiwga2V5TG9nZ2VyKSB7XG4gICAgaWYgKCFrZXlMb2dnZXIuZW5hYmxlZCB8fCAhRFVNUF9TRVNTSU9OX0tFWVMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2Vzc2lvbi5jczEgJiYgc2Vzc2lvbi5jczIpIHtcbiAgICAgICAga2V5TG9nZ2VyKGBDSVBIRVJfU1RBVEVfMSAke3Nlc3Npb24uY3MxLm4uZ2V0VWludDY0KCl9ICR7dWludDhBcnJheVRvU3RyaW5nKHNlc3Npb24uY3MxLmssICdoZXgnKX1gKTtcbiAgICAgICAga2V5TG9nZ2VyKGBDSVBIRVJfU1RBVEVfMiAke3Nlc3Npb24uY3MyLm4uZ2V0VWludDY0KCl9ICR7dWludDhBcnJheVRvU3RyaW5nKHNlc3Npb24uY3MyLmssICdoZXgnKX1gKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGtleUxvZ2dlcignTWlzc2luZyBjaXBoZXIgc3RhdGUuJyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9nZ2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJ0b1N0cmluZyIsInVpbnQ4QXJyYXlUb1N0cmluZyIsIkRVTVBfU0VTU0lPTl9LRVlTIiwibG9nTG9jYWxTdGF0aWNLZXlzIiwicyIsImtleUxvZ2dlciIsImVuYWJsZWQiLCJwdWJsaWNLZXkiLCJwcml2YXRlS2V5IiwibG9nTG9jYWxFcGhlbWVyYWxLZXlzIiwiZSIsImxvZ1JlbW90ZVN0YXRpY0tleSIsInJzIiwic3ViYXJyYXkiLCJsb2dSZW1vdGVFcGhlbWVyYWxLZXkiLCJyZSIsImxvZ0NpcGhlclN0YXRlIiwic2Vzc2lvbiIsImNzMSIsImNzMiIsIm4iLCJnZXRVaW50NjQiLCJrIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/logger.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/metrics.js":
/*!******************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/metrics.js ***!
\******************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ registerMetrics: () => (/* binding */ registerMetrics)\n/* harmony export */ });\nfunction registerMetrics(metrics) {\n return {\n xxHandshakeSuccesses: metrics.registerCounter(\"libp2p_noise_xxhandshake_successes_total\", {\n help: \"Total count of noise xxHandshakes successes_\"\n }),\n xxHandshakeErrors: metrics.registerCounter(\"libp2p_noise_xxhandshake_error_total\", {\n help: \"Total count of noise xxHandshakes errors\"\n }),\n encryptedPackets: metrics.registerCounter(\"libp2p_noise_encrypted_packets_total\", {\n help: \"Total count of noise encrypted packets successfully\"\n }),\n decryptedPackets: metrics.registerCounter(\"libp2p_noise_decrypted_packets_total\", {\n help: \"Total count of noise decrypted packets\"\n }),\n decryptErrors: metrics.registerCounter(\"libp2p_noise_decrypt_errors_total\", {\n help: \"Total count of noise decrypt errors\"\n })\n };\n} //# sourceMappingURL=metrics.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvbWV0cmljcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8sU0FBU0EsZ0JBQWdCQyxPQUFPO0lBQ25DLE9BQU87UUFDSEMsc0JBQXNCRCxRQUFRRSxlQUFlLENBQUMsNENBQTRDO1lBQ3RGQyxNQUFNO1FBQ1Y7UUFDQUMsbUJBQW1CSixRQUFRRSxlQUFlLENBQUMsd0NBQXdDO1lBQy9FQyxNQUFNO1FBQ1Y7UUFDQUUsa0JBQWtCTCxRQUFRRSxlQUFlLENBQUMsd0NBQXdDO1lBQzlFQyxNQUFNO1FBQ1Y7UUFDQUcsa0JBQWtCTixRQUFRRSxlQUFlLENBQUMsd0NBQXdDO1lBQzlFQyxNQUFNO1FBQ1Y7UUFDQUksZUFBZVAsUUFBUUUsZUFBZSxDQUFDLHFDQUFxQztZQUN4RUMsTUFBTTtRQUNWO0lBQ0o7QUFDSixFQUNBLG1DQUFtQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL2Rpc3Qvc3JjL21ldHJpY3MuanM/MzY4MyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZXRyaWNzKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4eEhhbmRzaGFrZVN1Y2Nlc3NlczogbWV0cmljcy5yZWdpc3RlckNvdW50ZXIoJ2xpYnAycF9ub2lzZV94eGhhbmRzaGFrZV9zdWNjZXNzZXNfdG90YWwnLCB7XG4gICAgICAgICAgICBoZWxwOiAnVG90YWwgY291bnQgb2Ygbm9pc2UgeHhIYW5kc2hha2VzIHN1Y2Nlc3Nlc18nXG4gICAgICAgIH0pLFxuICAgICAgICB4eEhhbmRzaGFrZUVycm9yczogbWV0cmljcy5yZWdpc3RlckNvdW50ZXIoJ2xpYnAycF9ub2lzZV94eGhhbmRzaGFrZV9lcnJvcl90b3RhbCcsIHtcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBub2lzZSB4eEhhbmRzaGFrZXMgZXJyb3JzJ1xuICAgICAgICB9KSxcbiAgICAgICAgZW5jcnlwdGVkUGFja2V0czogbWV0cmljcy5yZWdpc3RlckNvdW50ZXIoJ2xpYnAycF9ub2lzZV9lbmNyeXB0ZWRfcGFja2V0c190b3RhbCcsIHtcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBub2lzZSBlbmNyeXB0ZWQgcGFja2V0cyBzdWNjZXNzZnVsbHknXG4gICAgICAgIH0pLFxuICAgICAgICBkZWNyeXB0ZWRQYWNrZXRzOiBtZXRyaWNzLnJlZ2lzdGVyQ291bnRlcignbGlicDJwX25vaXNlX2RlY3J5cHRlZF9wYWNrZXRzX3RvdGFsJywge1xuICAgICAgICAgICAgaGVscDogJ1RvdGFsIGNvdW50IG9mIG5vaXNlIGRlY3J5cHRlZCBwYWNrZXRzJ1xuICAgICAgICB9KSxcbiAgICAgICAgZGVjcnlwdEVycm9yczogbWV0cmljcy5yZWdpc3RlckNvdW50ZXIoJ2xpYnAycF9ub2lzZV9kZWNyeXB0X2Vycm9yc190b3RhbCcsIHtcbiAgICAgICAgICAgIGhlbHA6ICdUb3RhbCBjb3VudCBvZiBub2lzZSBkZWNyeXB0IGVycm9ycydcbiAgICAgICAgfSlcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0cmljcy5qcy5tYXAiXSwibmFtZXMiOlsicmVnaXN0ZXJNZXRyaWNzIiwibWV0cmljcyIsInh4SGFuZHNoYWtlU3VjY2Vzc2VzIiwicmVnaXN0ZXJDb3VudGVyIiwiaGVscCIsInh4SGFuZHNoYWtlRXJyb3JzIiwiZW5jcnlwdGVkUGFja2V0cyIsImRlY3J5cHRlZFBhY2tldHMiLCJkZWNyeXB0RXJyb3JzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/metrics.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/noise.js":
/*!****************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/noise.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Noise: () => (/* binding */ Noise)\n/* harmony export */ });\n/* harmony import */ var it_length_prefixed__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! it-length-prefixed */ \"(ssr)/./node_modules/it-length-prefixed/dist/src/index.js\");\n/* harmony import */ var it_length_prefixed_stream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! it-length-prefixed-stream */ \"(ssr)/./node_modules/it-length-prefixed-stream/dist/src/index.js\");\n/* harmony import */ var it_pair_duplex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! it-pair/duplex */ \"(ssr)/./node_modules/it-pair/dist/src/duplex.js\");\n/* harmony import */ var it_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! it-pipe */ \"(ssr)/./node_modules/it-pipe/dist/src/index.js\");\n/* harmony import */ var uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! uint8arrays/alloc */ \"(ssr)/./node_modules/uint8arrays/dist/src/alloc.node.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/constants.js\");\n/* harmony import */ var _crypto_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./crypto/index.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/index.js\");\n/* harmony import */ var _crypto_streaming_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./crypto/streaming.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/crypto/streaming.js\");\n/* harmony import */ var _encoder_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./encoder.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/encoder.js\");\n/* harmony import */ var _handshake_xx_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./handshake-xx.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/handshake-xx.js\");\n/* harmony import */ var _metrics_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./metrics.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/metrics.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/utils.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nclass Noise {\n constructor(components, init = {}){\n this.protocol = \"/noise\";\n const { staticNoiseKey, extensions, crypto, prologueBytes } = init;\n const { metrics } = components;\n this.components = components;\n this.crypto = crypto ?? _crypto_index_js__WEBPACK_IMPORTED_MODULE_6__.defaultCrypto;\n this.extensions = extensions;\n this.metrics = metrics ? (0,_metrics_js__WEBPACK_IMPORTED_MODULE_10__.registerMetrics)(metrics) : undefined;\n if (staticNoiseKey) {\n // accepts x25519 private key of length 32\n this.staticKeys = this.crypto.generateX25519KeyPairFromSeed(staticNoiseKey);\n } else {\n this.staticKeys = this.crypto.generateX25519KeyPair();\n }\n this.prologue = prologueBytes ?? (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_4__.alloc)(0);\n }\n /**\n * Encrypt outgoing data to the remote party (handshake as initiator)\n *\n * @param {PeerId} localPeer - PeerId of the receiving peer\n * @param {Stream} connection - streaming iterable duplex that will be encrypted\n * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer.\n * @returns {Promise<SecuredConnection<Stream, NoiseExtensions>>}\n */ async secureOutbound(localPeer, connection, remotePeer) {\n const wrappedConnection = (0,it_length_prefixed_stream__WEBPACK_IMPORTED_MODULE_1__.lpStream)(connection, {\n lengthEncoder: _encoder_js__WEBPACK_IMPORTED_MODULE_8__.uint16BEEncode,\n lengthDecoder: _encoder_js__WEBPACK_IMPORTED_MODULE_8__.uint16BEDecode,\n maxDataLength: _constants_js__WEBPACK_IMPORTED_MODULE_5__.NOISE_MSG_MAX_LENGTH_BYTES\n });\n const handshake = await this.performHandshake({\n connection: wrappedConnection,\n isInitiator: true,\n localPeer,\n remotePeer\n });\n const conn = await this.createSecureConnection(wrappedConnection, handshake);\n connection.source = conn.source;\n connection.sink = conn.sink;\n return {\n conn: connection,\n remoteExtensions: handshake.remoteExtensions,\n remotePeer: handshake.remotePeer\n };\n }\n /**\n * Decrypt incoming data (handshake as responder).\n *\n * @param {PeerId} localPeer - PeerId of the receiving peer.\n * @param {Stream} connection - streaming iterable duplex that will be encrypted.\n * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades.\n * @returns {Promise<SecuredConnection<Stream, NoiseExtensions>>}\n */ async secureInbound(localPeer, connection, remotePeer) {\n const wrappedConnection = (0,it_length_prefixed_stream__WEBPACK_IMPORTED_MODULE_1__.lpStream)(connection, {\n lengthEncoder: _encoder_js__WEBPACK_IMPORTED_MODULE_8__.uint16BEEncode,\n lengthDecoder: _encoder_js__WEBPACK_IMPORTED_MODULE_8__.uint16BEDecode,\n maxDataLength: _constants_js__WEBPACK_IMPORTED_MODULE_5__.NOISE_MSG_MAX_LENGTH_BYTES\n });\n const handshake = await this.performHandshake({\n connection: wrappedConnection,\n isInitiator: false,\n localPeer,\n remotePeer\n });\n const conn = await this.createSecureConnection(wrappedConnection, handshake);\n connection.source = conn.source;\n connection.sink = conn.sink;\n return {\n conn: connection,\n remotePeer: handshake.remotePeer,\n remoteExtensions: handshake.remoteExtensions\n };\n }\n /**\n * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails.\n * If noise pipes disabled or remote peer static key is unknown, use XX.\n *\n * @param {HandshakeParams} params\n */ async performHandshake(params) {\n const payload = await (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.getPayload)(params.localPeer, this.staticKeys.publicKey, this.extensions);\n // run XX handshake\n return this.performXXHandshake(params, payload);\n }\n async performXXHandshake(params, payload) {\n const { isInitiator, remotePeer, connection } = params;\n const handshake = new _handshake_xx_js__WEBPACK_IMPORTED_MODULE_9__.XXHandshake(this.components, isInitiator, payload, this.prologue, this.crypto, this.staticKeys, connection, remotePeer);\n try {\n await handshake.propose();\n await handshake.exchange();\n await handshake.finish();\n this.metrics?.xxHandshakeSuccesses.increment();\n } catch (e) {\n this.metrics?.xxHandshakeErrors.increment();\n if (e instanceof Error) {\n e.message = `Error occurred during XX handshake: ${e.message}`;\n throw e;\n }\n }\n return handshake;\n }\n async createSecureConnection(connection, handshake) {\n // Create encryption box/unbox wrapper\n const [secure, user] = (0,it_pair_duplex__WEBPACK_IMPORTED_MODULE_2__.duplexPair)();\n const network = connection.unwrap();\n await (0,it_pipe__WEBPACK_IMPORTED_MODULE_3__.pipe)(secure, (0,_crypto_streaming_js__WEBPACK_IMPORTED_MODULE_7__.encryptStream)(handshake, this.metrics), network, (source)=>(0,it_length_prefixed__WEBPACK_IMPORTED_MODULE_0__.decode)(source, {\n lengthDecoder: _encoder_js__WEBPACK_IMPORTED_MODULE_8__.uint16BEDecode\n }), (0,_crypto_streaming_js__WEBPACK_IMPORTED_MODULE_7__.decryptStream)(handshake, this.metrics), secure // pipe to the wrapper\n );\n return user;\n }\n} //# sourceMappingURL=noise.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvbm9pc2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUE0QztBQUNTO0FBQ1Q7QUFDYjtBQUM4QjtBQUNEO0FBQ1Y7QUFDbUI7QUFDUDtBQUNkO0FBQ0Q7QUFDUDtBQUNqQyxNQUFNZTtJQVFUQyxZQUFZQyxVQUFVLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLENBQUU7YUFQbkNDLFdBQVc7UUFRUCxNQUFNLEVBQUVDLGNBQWMsRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLGFBQWEsRUFBRSxHQUFHTDtRQUM5RCxNQUFNLEVBQUVNLE9BQU8sRUFBRSxHQUFHUDtRQUNwQixJQUFJLENBQUNBLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDSyxNQUFNLEdBQUdBLFVBQVVmLDJEQUFhQTtRQUNyQyxJQUFJLENBQUNjLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDRyxPQUFPLEdBQUdBLFVBQVVYLDZEQUFlQSxDQUFDVyxXQUFXQztRQUNwRCxJQUFJTCxnQkFBZ0I7WUFDaEIsMENBQTBDO1lBQzFDLElBQUksQ0FBQ00sVUFBVSxHQUFHLElBQUksQ0FBQ0osTUFBTSxDQUFDSyw2QkFBNkIsQ0FBQ1A7UUFDaEUsT0FDSztZQUNELElBQUksQ0FBQ00sVUFBVSxHQUFHLElBQUksQ0FBQ0osTUFBTSxDQUFDTSxxQkFBcUI7UUFDdkQ7UUFDQSxJQUFJLENBQUNDLFFBQVEsR0FBR04saUJBQWlCbEIsd0RBQWVBLENBQUM7SUFDckQ7SUFDQTs7Ozs7OztLQU9DLEdBQ0QsTUFBTXlCLGVBQWVDLFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUU7UUFDcEQsTUFBTUMsb0JBQW9CakMsbUVBQVFBLENBQUMrQixZQUFZO1lBQzNDRyxlQUFleEIsdURBQWNBO1lBQzdCeUIsZUFBZTFCLHVEQUFjQTtZQUM3QjJCLGVBQWUvQixxRUFBMEJBO1FBQzdDO1FBQ0EsTUFBTWdD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LENBQUNkLE9BQU8sR0FDckNvQyxPQUFPLHNCQUFzQjs7UUFFN0IsT0FBT0M7SUFDWDtBQUNKLEVBQ0EsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvbm9pc2UuanM/MWY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdpdC1sZW5ndGgtcHJlZml4ZWQnO1xuaW1wb3J0IHsgbHBTdHJlYW0gfSBmcm9tICdpdC1sZW5ndGgtcHJlZml4ZWQtc3RyZWFtJztcbmltcG9ydCB7IGR1cGxleFBhaXIgfSBmcm9tICdpdC1wYWlyL2R1cGxleCc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAnaXQtcGlwZSc7XG5pbXBvcnQgeyBhbGxvYyBhcyB1aW50OEFycmF5QWxsb2MgfSBmcm9tICd1aW50OGFycmF5cy9hbGxvYyc7XG5pbXBvcnQgeyBOT0lTRV9NU0dfTUFYX0xFTkdUSF9CWVRFUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGRlZmF1bHRDcnlwdG8gfSBmcm9tICcuL2NyeXB0by9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZWNyeXB0U3RyZWFtLCBlbmNyeXB0U3RyZWFtIH0gZnJvbSAnLi9jcnlwdG8vc3RyZWFtaW5nLmpzJztcbmltcG9ydCB7IHVpbnQxNkJFRGVjb2RlLCB1aW50MTZCRUVuY29kZSB9IGZyb20gJy4vZW5jb2Rlci5qcyc7XG5pbXBvcnQgeyBYWEhhbmRzaGFrZSB9IGZyb20gJy4vaGFuZHNoYWtlLXh4LmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyTWV0cmljcyB9IGZyb20gJy4vbWV0cmljcy5qcyc7XG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi91dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgTm9pc2Uge1xuICAgIHByb3RvY29sID0gJy9ub2lzZSc7XG4gICAgY3J5cHRvO1xuICAgIHByb2xvZ3VlO1xuICAgIHN0YXRpY0tleXM7XG4gICAgZXh0ZW5zaW9ucztcbiAgICBtZXRyaWNzO1xuICAgIGNvbXBvbmVudHM7XG4gICAgY29uc3RydWN0b3IoY29tcG9uZW50cywgaW5pdCA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdGljTm9pc2VLZXksIGV4dGVuc2lvbnMsIGNyeXB0bywgcHJvbG9ndWVCeXRlcyB9ID0gaW5pdDtcbiAgICAgICAgY29uc3QgeyBtZXRyaWNzIH0gPSBjb21wb25lbnRzO1xuICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgICAgICB0aGlzLmNyeXB0byA9IGNyeXB0byA/PyBkZWZhdWx0Q3J5cHRvO1xuICAgICAgICB0aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zO1xuICAgICAgICB0aGlzLm1ldHJpY3MgPSBtZXRyaWNzID8gcmVnaXN0ZXJNZXRyaWNzKG1ldHJpY3MpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc3RhdGljTm9pc2VLZXkpIHtcbiAgICAgICAgICAgIC8vIGFjY2VwdHMgeDI1NTE5IHByaXZhdGUga2V5IG9mIGxlbmd0aCAzMlxuICAgICAgICAgICAgdGhpcy5zdGF0aWNLZXlzID0gdGhpcy5jcnlwdG8uZ2VuZXJhdGVYMjU1MTlLZXlQYWlyRnJvbVNlZWQoc3RhdGljTm9pc2VLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0aWNLZXlzID0gdGhpcy5jcnlwdG8uZ2VuZXJhdGVYMjU1MTlLZXlQYWlyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9sb2d1ZSA9IHByb2xvZ3VlQnl0ZXMgPz8gdWludDhBcnJheUFsbG9jKDApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbmNyeXB0IG91dGdvaW5nIGRhdGEgdG8gdGhlIHJlbW90ZSBwYXJ0eSAoaGFuZHNoYWtlIGFzIGluaXRpYXRvcilcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGVlcklkfSBsb2NhbFBlZXIgLSBQZWVySWQgb2YgdGhlIHJlY2VpdmluZyBwZWVyXG4gICAgICogQHBhcmFtIHtTdHJlYW19IGNvbm5lY3Rpb24gLSBzdHJlYW1pbmcgaXRlcmFibGUgZHVwbGV4IHRoYXQgd2lsbCBiZSBlbmNyeXB0ZWRcbiAgICAgKiBAcGFyYW0ge1BlZXJJZH0gcmVtb3RlUGVlciAtIFBlZXJJZCBvZiB0aGUgcmVtb3RlIHBlZXIuIFVzZWQgdG8gdmFsaWRhdGUgdGhlIGludGVncml0eSBvZiB0aGUgcmVtb3RlIHBlZXIuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U2VjdXJlZENvbm5lY3Rpb248U3RyZWFtLCBOb2lzZUV4dGVuc2lvbnM+Pn1cbiAgICAgKi9cbiAgICBhc3luYyBzZWN1cmVPdXRib3VuZChsb2NhbFBlZXIsIGNvbm5lY3Rpb24sIHJlbW90ZVBlZXIpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZENvbm5lY3Rpb24gPSBscFN0cmVhbShjb25uZWN0aW9uLCB7XG4gICAgICAgICAgICBsZW5ndGhFbmNvZGVyOiB1aW50MTZCRUVuY29kZSxcbiAgICAgICAgICAgIGxlbmd0aERlY29kZXI6IHVpbnQxNkJFRGVjb2RlLFxuICAgICAgICAgICAgbWF4RGF0YUxlbmd0aDogTk9JU0VfTVNHX01BWF9MRU5HVEhfQllURVNcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhbmRzaGFrZSA9IGF3YWl0IHRoaXMucGVyZm9ybUhhbmRzaGFrZSh7XG4gICAgICAgICAgICBjb25uZWN0aW9uOiB3cmFwcGVkQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGlzSW5pdGlhdG9yOiB0cnVlLFxuICAgICAgICAgICAgbG9jYWxQZWVyLFxuICAgICAgICAgICAgcmVtb3RlUGVlclxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IHRoaXMuY3JlYXRlU2VjdXJlQ29ubmVjdGlvbih3cmFwcGVkQ29ubmVjdGlvbiwgaGFuZHNoYWtlKTtcbiAgICAgICAgY29ubmVjdGlvbi5zb3VyY2UgPSBjb25uLnNvdXJjZTtcbiAgICAgICAgY29ubmVjdGlvbi5zaW5rID0gY29ubi5zaW5rO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29ubjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHJlbW90ZUV4dGVuc2lvbnM6IGhhbmRzaGFrZS5yZW1vdGVFeHRlbnNpb25zLFxuICAgICAgICAgICAgcmVtb3RlUGVlcjogaGFuZHNoYWtlLnJlbW90ZVBlZXJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjcnlwdCBpbmNvbWluZyBkYXRhIChoYW5kc2hha2UgYXMgcmVzcG9uZGVyKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UGVlcklkfSBsb2NhbFBlZXIgLSBQZWVySWQgb2YgdGhlIHJlY2VpdmluZyBwZWVyLlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBjb25uZWN0aW9uIC0gc3RyZWFtaW5nIGl0ZXJhYmxlIGR1cGxleCB0aGF0IHdpbGwgYmUgZW5jcnlwdGVkLlxuICAgICAqIEBwYXJhbSB7UGVlcklkfSByZW1vdGVQZWVyIC0gb3B0aW9uYWwgUGVlcklkIG9mIHRoZSBpbml0aWF0aW5nIHBlZXIsIGlmIGtub3duLiBUaGlzIG1heSBvbmx5IGV4aXN0IGR1cmluZyB0cmFuc3BvcnQgdXBncmFkZXMuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8U2VjdXJlZENvbm5lY3Rpb248U3RyZWFtLCBOb2lzZUV4dGVuc2lvbnM+Pn1cbiAgICAgKi9cbiAgICBhc3luYyBzZWN1cmVJbmJvdW5kKGxvY2FsUGVlciwgY29ubmVjdGlvbiwgcmVtb3RlUGVlcikge1xuICAgICAgICBjb25zdCB3cmFwcGVkQ29ubmVjdGlvbiA9IGxwU3RyZWFtKGNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgIGxlbmd0aEVuY29kZXI6IHVpbnQxNkJFRW5jb2RlLFxuICAgICAgICAgICAgbGVuZ3RoRGVjb2RlcjogdWludDE2QkVEZWNvZGUsXG4gICAgICAgICAgICBtYXhEYXRhTGVuZ3RoOiBOT0lTRV9NU0dfTUFYX0xFTkdUSF9CWVRFU1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaGFuZHNoYWtlID0gYXdhaXQgdGhpcy5wZXJmb3JtSGFuZHNoYWtlKHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHdyYXBwZWRDb25uZWN0aW9uLFxuICAgICAgICAgICAgaXNJbml0aWF0b3I6IGZhbHNlLFxuICAgICAgICAgICAgbG9jYWxQZWVyLFxuICAgICAgICAgICAgcmVtb3RlUGVlclxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IHRoaXMuY3JlYXRlU2VjdXJlQ29ubmVjdGlvbih3cmFwcGVkQ29ubmVjdGlvbiwgaGFuZHNoYWtlKTtcbiAgICAgICAgY29ubmVjdGlvbi5zb3VyY2UgPSBjb25uLnNvdXJjZTtcbiAgICAgICAgY29ubmVjdGlvbi5zaW5rID0gY29ubi5zaW5rO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29ubjogY29ubmVjdGlvbixcbiAgICAgICAgICAgIHJlbW90ZVBlZXI6IGhhbmRzaGFrZS5yZW1vdGVQZWVyLFxuICAgICAgICAgICAgcmVtb3RlRXh0ZW5zaW9uczogaGFuZHNoYWtlLnJlbW90ZUV4dGVuc2lvbnNcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgTm9pc2UgcGlwZXMgc3VwcG9ydGVkLCB0cmllcyBJSyBoYW5kc2hha2UgZmlyc3Qgd2l0aCBYWCBhcyBmYWxsYmFjayBpZiBpdCBmYWlscy5cbiAgICAgKiBJZiBub2lzZSBwaXBlcyBkaXNhYmxlZCBvciByZW1vdGUgcGVlciBzdGF0aWMga2V5IGlzIHVua25vd24sIHVzZSBYWC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SGFuZHNoYWtlUGFyYW1zfSBwYXJhbXNcbiAgICAgKi9cbiAgICBhc3luYyBwZXJmb3JtSGFuZHNoYWtlKHBhcmFtcykge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgZ2V0UGF5bG9hZChwYXJhbXMubG9jYWxQZWVyLCB0aGlzLnN0YXRpY0tleXMucHVibGljS2V5LCB0aGlzLmV4dGVuc2lvbnMpO1xuICAgICAgICAvLyBydW4gWFggaGFuZHNoYWtlXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1YWEhhbmRzaGFrZShwYXJhbXMsIHBheWxvYWQpO1xuICAgIH1cbiAgICBhc3luYyBwZXJmb3JtWFhIYW5kc2hha2UocGFyYW1zLCBwYXlsb2FkKSB7XG4gICAgICAgIGNvbnN0IHsgaXNJbml0aWF0b3IsIHJlbW90ZVBlZXIsIGNvbm5lY3Rpb24gfSA9IHBhcmFtcztcbiAgICAgICAgY29uc3QgaGFuZHNoYWtlID0gbmV3IFhYSGFuZHNoYWtlKHRoaXMuY29tcG9uZW50cywgaXNJbml0aWF0b3IsIHBheWxvYWQsIHRoaXMucHJvbG9ndWUsIHRoaXMuY3J5cHRvLCB0aGlzLnN0YXRpY0tleXMsIGNvbm5lY3Rpb24sIHJlbW90ZVBlZXIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgaGFuZHNoYWtlLnByb3Bvc2UoKTtcbiAgICAgICAgICAgIGF3YWl0IGhhbmRzaGFrZS5leGNoYW5nZSgpO1xuICAgICAgICAgICAgYXdhaXQgaGFuZHNoYWtlLmZpbmlzaCgpO1xuICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy54eEhhbmRzaGFrZVN1Y2Nlc3Nlcy5pbmNyZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5tZXRyaWNzPy54eEhhbmRzaGFrZUVycm9ycy5pbmNyZW1lbnQoKTtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPSBgRXJyb3Igb2NjdXJyZWQgZHVyaW5nIFhYIGhhbmRzaGFrZTogJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kc2hha2U7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVNlY3VyZUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgaGFuZHNoYWtlKSB7XG4gICAgICAgIC8vIENyZWF0ZSBlbmNyeXB0aW9uIGJveC91bmJveCB3cmFwcGVyXG4gICAgICAgIGNvbnN0IFtzZWN1cmUsIHVzZXJdID0gZHVwbGV4UGFpcigpO1xuICAgICAgICBjb25zdCBuZXR3b3JrID0gY29ubmVjdGlvbi51bndyYXAoKTtcbiAgICAgICAgYXdhaXQgcGlwZShzZWN1cmUsIC8vIHdyaXRlIHRvIHdyYXBwZXJcbiAgICAgICAgZW5jcnlwdFN0cmVhbShoYW5kc2hha2UsIHRoaXMubWV0cmljcyksIC8vIGVuY3J5cHQgZGF0YSArIHByZWZpeCB3aXRoIG1lc3NhZ2UgbGVuZ3RoXG4gICAgICAgIG5ldHdvcmssIC8vIHNlbmQgdG8gdGhlIHJlbW90ZSBwZWVyXG4gICAgICAgIChzb3VyY2UpID0+IGRlY29kZShzb3VyY2UsIHsgbGVuZ3RoRGVjb2RlcjogdWludDE2QkVEZWNvZGUgfSksIC8vIHJlYWQgbWVzc2FnZSBsZW5ndGggcHJlZml4XG4gICAgICAgIGRlY3J5cHRTdHJlYW0oaGFuZHNoYWtlLCB0aGlzLm1ldHJpY3MpLCAvLyBkZWNyeXB0IHRoZSBpbmNvbWluZyBkYXRhXG4gICAgICAgIHNlY3VyZSAvLyBwaXBlIHRvIHRoZSB3cmFwcGVyXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vaXNlLmpzLm1hcCJdLCJuYW1lcyI6WyJkZWNvZGUiLCJscFN0cmVhbSIsImR1cGxleFBhaXIiLCJwaXBlIiwiYWxsb2MiLCJ1aW50OEFycmF5QWxsb2MiLCJOT0lTRV9NU0dfTUFYX0xFTkdUSF9CWVRFUyIsImRlZmF1bHRDcnlwdG8iLCJkZWNyeXB0U3RyZWFtIiwiZW5jcnlwdFN0cmVhbSIsInVpbnQxNkJFRGVjb2RlIiwidWludDE2QkVFbmNvZGUiLCJYWEhhbmRzaGFrZSIsInJlZ2lzdGVyTWV0cmljcyIsImdldFBheWxvYWQiLCJOb2lzZSIsImNvbnN0cnVjdG9yIiwiY29tcG9uZW50cyIsImluaXQiLCJwcm90b2NvbCIsInN0YXRpY05vaXNlS2V5IiwiZXh0ZW5zaW9ucyIsImNyeXB0byIsInByb2xvZ3VlQnl0ZXMiLCJtZXRyaWNzIiwidW5kZWZpbmVkIiwic3RhdGljS2V5cyIsImdlbmVyYXRlWDI1NTE5S2V5UGFpckZyb21TZWVkIiwiZ2VuZXJhdGVYMjU1MTlLZXlQYWlyIiwicHJvbG9ndWUiLCJzZWN1cmVPdXRib3VuZCIsImxvY2FsUGVlciIsImNvbm5lY3Rpb24iLCJyZW1vdGVQZWVyIiwid3JhcHBlZENvbm5lY3Rpb24iLCJsZW5ndGhFbmNvZGVyIiwibGVuZ3RoRGVjb2RlciIsIm1heERhdGFMZW5ndGgiLCJoYW5kc2hha2UiLCJwZXJmb3JtSGFuZHNoYWtlIiwiaXNJbml0aWF0b3IiLCJjb25uIiwiY3JlYXRlU2VjdXJlQ29ubmVjdGlvbiIsInNvdXJjZSIsInNpbmsiLCJyZW1vdGVFeHRlbnNpb25zIiwic2VjdXJlSW5ib3VuZCIsInBhcmFtcyIsInBheWxvYWQiLCJwdWJsaWNLZXkiLCJwZXJmb3JtWFhIYW5kc2hha2UiLCJwcm9wb3NlIiwiZXhjaGFuZ2UiLCJmaW5pc2giLCJ4eEhhbmRzaGFrZVN1Y2Nlc3NlcyIsImluY3JlbWVudCIsImUiLCJ4eEhhbmRzaGFrZUVycm9ycyIsIkVycm9yIiwibWVzc2FnZSIsInNlY3VyZSIsInVzZXIiLCJuZXR3b3JrIiwidW53cmFwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/noise.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/nonce.js":
/*!****************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/nonce.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MAX_NONCE: () => (/* binding */ MAX_NONCE),\n/* harmony export */ MIN_NONCE: () => (/* binding */ MIN_NONCE),\n/* harmony export */ Nonce: () => (/* binding */ Nonce)\n/* harmony export */ });\n/* harmony import */ var uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arrays/alloc */ \"(ssr)/./node_modules/uint8arrays/dist/src/alloc.node.js\");\n\nconst MIN_NONCE = 0;\n// For performance reasons, the nonce is represented as a JS `number`\n// Although JS `number` can safely represent integers up to 2 ** 53 - 1, we choose to only use\n// 4 bytes to store the data for performance reason.\n// This is a slight deviation from the noise spec, which describes the max nonce as 2 ** 64 - 2\n// The effect is that this implementation will need a new handshake to be performed after fewer messages are exchanged than other implementations with full uint64 nonces.\n// this MAX_NONCE is still a large number of messages, so the practical effect of this is negligible.\nconst MAX_NONCE = 0xffffffff;\nconst ERR_MAX_NONCE = \"Cipherstate has reached maximum n, a new handshake must be performed\";\n/**\n * The nonce is an uint that's increased over time.\n * Maintaining different representations help improve performance.\n */ class Nonce {\n constructor(n = MIN_NONCE){\n this.n = n;\n this.bytes = (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_0__.alloc)(12);\n this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength);\n this.view.setUint32(4, n, true);\n }\n increment() {\n this.n++;\n // Even though we're treating the nonce as 8 bytes, RFC7539 specifies 12 bytes for a nonce.\n this.view.setUint32(4, this.n, true);\n }\n getBytes() {\n return this.bytes;\n }\n getUint64() {\n return this.n;\n }\n assertValue() {\n if (this.n > MAX_NONCE) {\n throw new Error(ERR_MAX_NONCE);\n }\n }\n} //# sourceMappingURL=nonce.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvbm9uY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE2RDtBQUN0RCxNQUFNRSxZQUFZLEVBQUU7QUFDM0IscUVBQXFFO0FBQ3JFLDhGQUE4RjtBQUM5RixvREFBb0Q7QUFDcEQsK0ZBQStGO0FBQy9GLDBLQUEwSztBQUMxSyxxR0FBcUc7QUFDOUYsTUFBTUMsWUFBWSxXQUFXO0FBQ3BDLE1BQU1DLGdCQUFnQjtBQUN0Qjs7O0NBR0MsR0FDTSxNQUFNQztJQUlUQyxZQUFZQyxJQUFJTCxTQUFTLENBQUU7UUFDdkIsSUFBSSxDQUFDSyxDQUFDLEdBQUdBO1FBQ1QsSUFBSSxDQUFDQyxLQUFLLEdBQUdQLHdEQUFlQSxDQUFDO1FBQzdCLElBQUksQ0FBQ1EsSUFBSSxHQUFHLElBQUlDLFNBQVMsSUFBSSxDQUFDRixLQUFLLENBQUNHLE1BQU0sRUFBRSxJQUFJLENBQUNILEtBQUssQ0FBQ0ksVUFBVSxFQUFFLElBQUksQ0FBQ0osS0FBSyxDQUFDSyxVQUFVO1FBQ3hGLElBQUksQ0FBQ0osSUFBSSxDQUFDSyxTQUFTLENBQUMsR0FBR1AsR0FBRztJQUM5QjtJQUNBUSxZQUFZO1FBQ1IsSUFBSSxDQUFDUixDQUFDO1FBQ04sMkZBQTJGO1FBQzNGLElBQUksQ0FBQ0UsSUFBSSxDQUFDSyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUNQLENBQUMsRUFBRTtJQUNuQztJQUNBUyxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUNSLEtBQUs7SUFDckI7SUFDQVMsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDVixDQUFDO0lBQ2pCO0lBQ0FXLGNBQWM7UUFDVixJQUFJLElBQUksQ0FBQ1gsQ0FBQyxHQUFHSixXQUFXO1lBQ3BCLE1BQU0sSUFBSWdCLE1BQU1mO1FBQ3BCO0lBQ0o7QUFDSixFQUNBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL2Rpc3Qvc3JjL25vbmNlLmpzP2EyNWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWxsb2MgYXMgdWludDhBcnJheUFsbG9jIH0gZnJvbSAndWludDhhcnJheXMvYWxsb2MnO1xuZXhwb3J0IGNvbnN0IE1JTl9OT05DRSA9IDA7XG4vLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhlIG5vbmNlIGlzIHJlcHJlc2VudGVkIGFzIGEgSlMgYG51bWJlcmBcbi8vIEFsdGhvdWdoIEpTIGBudW1iZXJgIGNhbiBzYWZlbHkgcmVwcmVzZW50IGludGVnZXJzIHVwIHRvIDIgKiogNTMgLSAxLCB3ZSBjaG9vc2UgdG8gb25seSB1c2Vcbi8vIDQgYnl0ZXMgdG8gc3RvcmUgdGhlIGRhdGEgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbi5cbi8vIFRoaXMgaXMgYSBzbGlnaHQgZGV2aWF0aW9uIGZyb20gdGhlIG5vaXNlIHNwZWMsIHdoaWNoIGRlc2NyaWJlcyB0aGUgbWF4IG5vbmNlIGFzIDIgKiogNjQgLSAyXG4vLyBUaGUgZWZmZWN0IGlzIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIG5lZWQgYSBuZXcgaGFuZHNoYWtlIHRvIGJlIHBlcmZvcm1lZCBhZnRlciBmZXdlciBtZXNzYWdlcyBhcmUgZXhjaGFuZ2VkIHRoYW4gb3RoZXIgaW1wbGVtZW50YXRpb25zIHdpdGggZnVsbCB1aW50NjQgbm9uY2VzLlxuLy8gdGhpcyBNQVhfTk9OQ0UgaXMgc3RpbGwgYSBsYXJnZSBudW1iZXIgb2YgbWVzc2FnZXMsIHNvIHRoZSBwcmFjdGljYWwgZWZmZWN0IG9mIHRoaXMgaXMgbmVnbGlnaWJsZS5cbmV4cG9ydCBjb25zdCBNQVhfTk9OQ0UgPSAweGZmZmZmZmZmO1xuY29uc3QgRVJSX01BWF9OT05DRSA9ICdDaXBoZXJzdGF0ZSBoYXMgcmVhY2hlZCBtYXhpbXVtIG4sIGEgbmV3IGhhbmRzaGFrZSBtdXN0IGJlIHBlcmZvcm1lZCc7XG4vKipcbiAqIFRoZSBub25jZSBpcyBhbiB1aW50IHRoYXQncyBpbmNyZWFzZWQgb3ZlciB0aW1lLlxuICogTWFpbnRhaW5pbmcgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBoZWxwIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb25jZSB7XG4gICAgbjtcbiAgICBieXRlcztcbiAgICB2aWV3O1xuICAgIGNvbnN0cnVjdG9yKG4gPSBNSU5fTk9OQ0UpIHtcbiAgICAgICAgdGhpcy5uID0gbjtcbiAgICAgICAgdGhpcy5ieXRlcyA9IHVpbnQ4QXJyYXlBbGxvYygxMik7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmJ5dGVzLmJ1ZmZlciwgdGhpcy5ieXRlcy5ieXRlT2Zmc2V0LCB0aGlzLmJ5dGVzLmJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLnZpZXcuc2V0VWludDMyKDQsIG4sIHRydWUpO1xuICAgIH1cbiAgICBpbmNyZW1lbnQoKSB7XG4gICAgICAgIHRoaXMubisrO1xuICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSdyZSB0cmVhdGluZyB0aGUgbm9uY2UgYXMgOCBieXRlcywgUkZDNzUzOSBzcGVjaWZpZXMgMTIgYnl0ZXMgZm9yIGEgbm9uY2UuXG4gICAgICAgIHRoaXMudmlldy5zZXRVaW50MzIoNCwgdGhpcy5uLCB0cnVlKTtcbiAgICB9XG4gICAgZ2V0Qnl0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ5dGVzO1xuICAgIH1cbiAgICBnZXRVaW50NjQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm47XG4gICAgfVxuICAgIGFzc2VydFZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5uID4gTUFYX05PTkNFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJSX01BWF9OT05DRSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub25jZS5qcy5tYXAiXSwibmFtZXMiOlsiYWxsb2MiLCJ1aW50OEFycmF5QWxsb2MiLCJNSU5fTk9OQ0UiLCJNQVhfTk9OQ0UiLCJFUlJfTUFYX05PTkNFIiwiTm9uY2UiLCJjb25zdHJ1Y3RvciIsIm4iLCJieXRlcyIsInZpZXciLCJEYXRhVmlldyIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwic2V0VWludDMyIiwiaW5jcmVtZW50IiwiZ2V0Qnl0ZXMiLCJnZXRVaW50NjQiLCJhc3NlcnRWYWx1ZSIsIkVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/nonce.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/proto/payload.js":
/*!************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/proto/payload.js ***!
\************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoiseExtensions: () => (/* binding */ NoiseExtensions),\n/* harmony export */ NoiseHandshakePayload: () => (/* binding */ NoiseHandshakePayload)\n/* harmony export */ });\n/* harmony import */ var protons_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! protons-runtime */ \"(ssr)/./node_modules/protons-runtime/dist/src/index.js\");\n/* harmony import */ var uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays/alloc */ \"(ssr)/./node_modules/uint8arrays/dist/src/alloc.node.js\");\n/* eslint-disable import/export */ /* eslint-disable complexity */ /* eslint-disable @typescript-eslint/no-namespace */ /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */ /* eslint-disable @typescript-eslint/no-empty-interface */ \n\nvar NoiseExtensions;\n(function(NoiseExtensions) {\n let _codec;\n NoiseExtensions.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.webtransportCerthashes != null) {\n for (const value of obj.webtransportCerthashes){\n w.uint32(10);\n w.bytes(value);\n }\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length)=>{\n const obj = {\n webtransportCerthashes: []\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.webtransportCerthashes.push(reader.bytes());\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n NoiseExtensions.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, NoiseExtensions.codec());\n };\n NoiseExtensions.decode = (buf)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, NoiseExtensions.codec());\n };\n})(NoiseExtensions || (NoiseExtensions = {}));\nvar NoiseHandshakePayload;\n(function(NoiseHandshakePayload) {\n let _codec;\n NoiseHandshakePayload.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.identityKey != null && obj.identityKey.byteLength > 0) {\n w.uint32(10);\n w.bytes(obj.identityKey);\n }\n if (obj.identitySig != null && obj.identitySig.byteLength > 0) {\n w.uint32(18);\n w.bytes(obj.identitySig);\n }\n if (obj.extensions != null) {\n w.uint32(34);\n NoiseExtensions.codec().encode(obj.extensions, w);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length)=>{\n const obj = {\n identityKey: (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_1__.alloc)(0),\n identitySig: (0,uint8arrays_alloc__WEBPACK_IMPORTED_MODULE_1__.alloc)(0)\n };\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n {\n obj.identityKey = reader.bytes();\n break;\n }\n case 2:\n {\n obj.identitySig = reader.bytes();\n break;\n }\n case 4:\n {\n obj.extensions = NoiseExtensions.codec().decode(reader, reader.uint32());\n break;\n }\n default:\n {\n reader.skipType(tag & 7);\n break;\n }\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n NoiseHandshakePayload.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, NoiseHandshakePayload.codec());\n };\n NoiseHandshakePayload.decode = (buf)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, NoiseHandshakePayload.codec());\n };\n})(NoiseHandshakePayload || (NoiseHandshakePayload = {})); //# sourceMappingURL=payload.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvcHJvdG8vcGF5bG9hZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsZ0NBQWdDLEdBQ2hDLDZCQUE2QixHQUM3QixrREFBa0QsR0FDbEQsNEVBQTRFLEdBQzVFLHdEQUF3RCxHQUNnQjtBQUNYO0FBQ3RELElBQUlLLGdCQUFnQjtBQUMxQixVQUFVQSxlQUFlO0lBQ3RCLElBQUlDO0lBQ0pELGdCQUFnQkUsS0FBSyxHQUFHO1FBQ3BCLElBQUlELFVBQVUsTUFBTTtZQUNoQkEsU0FBU0osd0RBQU9BLENBQUMsQ0FBQ00sS0FBS0MsR0FBR0MsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLElBQUlBLEtBQUtDLGVBQWUsS0FBSyxPQUFPO29CQUNoQ0YsRUFBRUcsSUFBSTtnQkFDVjtnQkFDQSxJQUFJSixJQUFJSyxzQkFBc0IsSUFBSSxNQUFNO29CQUNwQyxLQUFLLE1BQU1DLFNBQVNOLElBQUlLLHNCQUFzQixDQUFFO3dCQUM1Q0osRUFBRU0sTUFBTSxDQUFDO3dCQUNUTixFQUFFTyxLQUFLLENBQUNGO29CQUNaO2dCQUNKO2dCQUNBLElBQUlKLEtBQUtDLGVBQWUsS0FBSyxPQUFPO29CQUNoQ0YsRUFBRVEsTUFBTTtnQkFDWjtZQUNKLEdBQUcsQ0FBQ0MsUUFBUUM7Z0JBQ1IsTUFBTVgsTUFBTTtvQkFDUkssd0JBQXdCLEVBQUU7Z0JBQzlCO2dCQUNBLE1BQU1PLE1BQU1ELFVBQVUsT0FBT0QsT0FBT0csR0FBRyxHQUFHSCxPQUFPSSxHQUFHLEdBQUdIO2dCQUN2RCxNQUFPRCxPQUFPSSxHQUFHLEdBQUdGLElBQUs7b0JBQ3JCLE1BQU1HLE1BQU1MLE9BQU9ILE1BQU07b0JBQ3pCLE9BQVFRLFFBQVE7d0JBQ1osS0FBSzs0QkFBRztnQ0FDSmYsSUFBSUssc0JBQXNCLENBQUNXLElBQUksQ0FBQ04sT0FBT0YsS0FBSztnQ0FDNUM7NEJBQ0o7d0JBQ0E7NEJBQVM7Z0NBQ0xFLE9BQU9PLFFBQVEsQ0FBQ0YsTUFBTTtnQ0FDdEI7NEJBQ0o7b0JBQ0o7Z0JBQ0o7Z0JBQ0EsT0FBT2Y7WUFDWDtRQUNKO1FBQ0EsT0FBT0Y7SUFDWDtJQUNBRCxnQkFBZ0JxQixNQUFNLEdBQUcsQ0FBQ2xCO1FBQ3RCLE9BQU9QLDhEQUFhQSxDQUFDTyxLQUFLSCxnQkFBZ0JFLEtBQUs7SUFDbkQ7SUFDQUYsZ0JBQWdCc0IsTUFBTSxHQUFHLENBQUNDO1FBQ3RCLE9BQU81Qiw4REFBYUEsQ0FBQzRCLEtBQUt2QixnQkFBZ0JFLEtBQUs7SUFDbkQ7QUFDSixHQUFHRixtQkFBb0JBLENBQUFBLGtCQUFrQixDQUFDO0FBQ25DLElBQUl3QixzQkFBc0I7QUFDaEMsVUFBVUEscUJBQXFCO0lBQzVCLElBQUl2QjtJQUNKdUIsc0JBQXNCdEIsS0FBSyxHQUFHO1FBQzFCLElBQUlELFVBQVUsTUFBTTtZQUNoQkEsU0FBU0osd0RBQU9BLENBQUMsQ0FBQ00sS0FBS0MsR0FBR0MsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLElBQUlBLEtBQUtDLGVBQWUsS0FBSyxPQUFPO29CQUNoQ0YsRUFBRUcsSUFBSTtnQkFDVjtnQkFDQSxJQUFLSixJQUFJc0IsV0FBVyxJQUFJLFFBQVF0QixJQUFJc0IsV0FBVyxDQUFDQyxVQUFVLEdBQUcsR0FBSTtvQkFDN0R0QixFQUFFTSxNQUFNLENBQUM7b0JBQ1ROLEVBQUVPLEtBQUssQ0FBQ1IsSUFBSXNCLFdBQVc7Z0JBQzNCO2dCQUNBLElBQUt0QixJQUFJd0IsV0FBVyxJQUFJLFFBQVF4QixJQUFJd0IsV0FBVyxDQUFDRCxVQUFVLEdBQUcsR0FBSTtvQkFDN0R0QixFQUFFTSxNQUFNLENBQUM7b0JBQ1ROLEVBQUVPLEtBQUssQ0FBQ1IsSUFBSXdCLFdBQVc7Z0JBQzNCO2dCQUNBLElBQUl4QixJQUFJeUIsVUFBVSxJQUFJLE1BQU07b0JBQ3hCeEIsRUFBRU0sTUFBTSxDQUFDO29CQUNUVixnQkFBZ0JFLEtBQUssR0FBR21CLE1BQU0sQ0FBQ2xCLElBQUl5QixVQUFVLEVBQUV4QjtnQkFDbkQ7Z0JBQ0EsSUFBSUMsS0FBS0MsZUFBZSxLQUFLLE9BQU87b0JBQ2hDRixFQUFFUSxNQUFNO2dCQUNaO1lBQ0osR0FBRyxDQUFDQyxRQUFRQztnQkFDUixNQUFNWCxNQUFNO29CQUNSc0IsYUFBYTFCLHdEQUFlQSxDQUFDO29CQUM3QjRCLGFBQWE1Qix3REFBZUEsQ0FBQztnQkFDakM7Z0JBQ0EsTUFBTWdCLE1BQU1ELFVBQVUsT0FBT0QsT0FBT0csR0FBRyxHQUFHSCxPQUFPSSxHQUFHLEdBQUdIO2dCQUN2RCxNQUFPRCxPQUFPSSxHQUFHLEdBQUdGLElBQUs7b0JBQ3JCLE1BQU1HLE1BQU1MLE9BQU9ILE1BQU07b0JBQ3pCLE9BQVFRLFFBQVE7d0JBQ1osS0FBSzs0QkFBRztnQ0FDSmYsSUFBSXNCLFdBQVcsR0FBR1osT0FBT0YsS0FBSztnQ0FDOUI7NEJBQ0o7d0JBQ0EsS0FBSzs0QkFBRztnQ0FDSlIsSUFBSXdCLFdBQVcsR0FBR2QsT0FBT0YsS0FBSztnQ0FDOUI7NEJBQ0o7d0JBQ0EsS0FBSzs0QkFBRztnQ0FDSlIsSUFBSXlCLFVBQVUsR0FBRzVCLGdCQUFnQkUsS0FBSyxHQUFHb0IsTUFBTSxDQUFDVCxRQUFRQSxPQUFPSCxNQUFNO2dDQUNyRTs0QkFDSjt3QkFDQTs0QkFBUztnQ0FDTEcsT0FBT08sUUFBUSxDQUFDRixNQUFNO2dDQUN0Qjs0QkFDSjtvQkFDSjtnQkFDSjtnQkFDQSxPQUFPZjtZQUNYO1FBQ0o7UUFDQSxPQUFPRjtJQUNYO0lBQ0F1QixzQkFBc0JILE1BQU0sR0FBRyxDQUFDbEI7UUFDNUIsT0FBT1AsOERBQWFBLENBQUNPLEtBQUtxQixzQkFBc0J0QixLQUFLO0lBQ3pEO0lBQ0FzQixzQkFBc0JGLE1BQU0sR0FBRyxDQUFDQztRQUM1QixPQUFPNUIsOERBQWFBLENBQUM0QixLQUFLQyxzQkFBc0J0QixLQUFLO0lBQ3pEO0FBQ0osR0FBR3NCLHlCQUEwQkEsQ0FBQUEsd0JBQXdCLENBQUMsS0FDdEQsbUNBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvcHJvdG8vcGF5bG9hZC5qcz9kMTEzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9leHBvcnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1ib29sZWFuLWxpdGVyYWwtY29tcGFyZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqL1xuaW1wb3J0IHsgZGVjb2RlTWVzc2FnZSwgZW5jb2RlTWVzc2FnZSwgbWVzc2FnZSB9IGZyb20gJ3Byb3RvbnMtcnVudGltZSc7XG5pbXBvcnQgeyBhbGxvYyBhcyB1aW50OEFycmF5QWxsb2MgfSBmcm9tICd1aW50OGFycmF5cy9hbGxvYyc7XG5leHBvcnQgdmFyIE5vaXNlRXh0ZW5zaW9ucztcbihmdW5jdGlvbiAoTm9pc2VFeHRlbnNpb25zKSB7XG4gICAgbGV0IF9jb2RlYztcbiAgICBOb2lzZUV4dGVuc2lvbnMuY29kZWMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgX2NvZGVjID0gbWVzc2FnZSgob2JqLCB3LCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JqLndlYnRyYW5zcG9ydENlcnRoYXNoZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iai53ZWJ0cmFuc3BvcnRDZXJ0aGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3LmJ5dGVzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHcubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKHJlYWRlciwgbGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgICAgICAgICB3ZWJ0cmFuc3BvcnRDZXJ0aGFzaGVzOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gbGVuZ3RoID09IG51bGwgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoud2VidHJhbnNwb3J0Q2VydGhhc2hlcy5wdXNoKHJlYWRlci5ieXRlcygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfY29kZWM7XG4gICAgfTtcbiAgICBOb2lzZUV4dGVuc2lvbnMuZW5jb2RlID0gKG9iaikgPT4ge1xuICAgICAgICByZXR1cm4gZW5jb2RlTWVzc2FnZShvYmosIE5vaXNlRXh0ZW5zaW9ucy5jb2RlYygpKTtcbiAgICB9O1xuICAgIE5vaXNlRXh0ZW5zaW9ucy5kZWNvZGUgPSAoYnVmKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWNvZGVNZXNzYWdlKGJ1ZiwgTm9pc2VFeHRlbnNpb25zLmNvZGVjKCkpO1xuICAgIH07XG59KShOb2lzZUV4dGVuc2lvbnMgfHwgKE5vaXNlRXh0ZW5zaW9ucyA9IHt9KSk7XG5leHBvcnQgdmFyIE5vaXNlSGFuZHNoYWtlUGF5bG9hZDtcbihmdW5jdGlvbiAoTm9pc2VIYW5kc2hha2VQYXlsb2FkKSB7XG4gICAgbGV0IF9jb2RlYztcbiAgICBOb2lzZUhhbmRzaGFrZVBheWxvYWQuY29kZWMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChfY29kZWMgPT0gbnVsbCkge1xuICAgICAgICAgICAgX2NvZGVjID0gbWVzc2FnZSgob2JqLCB3LCBvcHRzID0ge30pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHcuZm9yaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKG9iai5pZGVudGl0eUtleSAhPSBudWxsICYmIG9iai5pZGVudGl0eUtleS5ieXRlTGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTApO1xuICAgICAgICAgICAgICAgICAgICB3LmJ5dGVzKG9iai5pZGVudGl0eUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgob2JqLmlkZW50aXR5U2lnICE9IG51bGwgJiYgb2JqLmlkZW50aXR5U2lnLmJ5dGVMZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICB3LnVpbnQzMigxOCk7XG4gICAgICAgICAgICAgICAgICAgIHcuYnl0ZXMob2JqLmlkZW50aXR5U2lnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5leHRlbnNpb25zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMzQpO1xuICAgICAgICAgICAgICAgICAgICBOb2lzZUV4dGVuc2lvbnMuY29kZWMoKS5lbmNvZGUob2JqLmV4dGVuc2lvbnMsIHcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0cy5sZW5ndGhEZWxpbWl0ZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHcubGRlbGltKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKHJlYWRlciwgbGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZGVudGl0eUtleTogdWludDhBcnJheUFsbG9jKDApLFxuICAgICAgICAgICAgICAgICAgICBpZGVudGl0eVNpZzogdWludDhBcnJheUFsbG9jKDApXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBsZW5ndGggPT0gbnVsbCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5pZGVudGl0eUtleSA9IHJlYWRlci5ieXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmlkZW50aXR5U2lnID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZXh0ZW5zaW9ucyA9IE5vaXNlRXh0ZW5zaW9ucy5jb2RlYygpLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NvZGVjO1xuICAgIH07XG4gICAgTm9pc2VIYW5kc2hha2VQYXlsb2FkLmVuY29kZSA9IChvYmopID0+IHtcbiAgICAgICAgcmV0dXJuIGVuY29kZU1lc3NhZ2Uob2JqLCBOb2lzZUhhbmRzaGFrZVBheWxvYWQuY29kZWMoKSk7XG4gICAgfTtcbiAgICBOb2lzZUhhbmRzaGFrZVBheWxvYWQuZGVjb2RlID0gKGJ1ZikgPT4ge1xuICAgICAgICByZXR1cm4gZGVjb2RlTWVzc2FnZShidWYsIE5vaXNlSGFuZHNoYWtlUGF5bG9hZC5jb2RlYygpKTtcbiAgICB9O1xufSkoTm9pc2VIYW5kc2hha2VQYXlsb2FkIHx8IChOb2lzZUhhbmRzaGFrZVBheWxvYWQgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF5bG9hZC5qcy5tYXAiXSwibmFtZXMiOlsiZGVjb2RlTWVzc2FnZSIsImVuY29kZU1lc3NhZ2UiLCJtZXNzYWdlIiwiYWxsb2MiLCJ1aW50OEFycmF5QWxsb2MiLCJOb2lzZUV4dGVuc2lvbnMiLCJfY29kZWMiLCJjb2RlYyIsIm9iaiIsInciLCJvcHRzIiwibGVuZ3RoRGVsaW1pdGVkIiwiZm9yayIsIndlYnRyYW5zcG9ydENlcnRoYXNoZXMiLCJ2YWx1ZSIsInVpbnQzMiIsImJ5dGVzIiwibGRlbGltIiwicmVhZGVyIiwibGVuZ3RoIiwiZW5kIiwibGVuIiwicG9zIiwidGFnIiwicHVzaCIsInNraXBUeXBlIiwiZW5jb2RlIiwiZGVjb2RlIiwiYnVmIiwiTm9pc2VIYW5kc2hha2VQYXlsb2FkIiwiaWRlbnRpdHlLZXkiLCJieXRlTGVuZ3RoIiwiaWRlbnRpdHlTaWciLCJleHRlbnNpb25zIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/proto/payload.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/utils.js":
/*!****************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/dist/src/utils.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createHandshakePayload: () => (/* binding */ createHandshakePayload),\n/* harmony export */ decodePayload: () => (/* binding */ decodePayload),\n/* harmony export */ getHandshakePayload: () => (/* binding */ getHandshakePayload),\n/* harmony export */ getPayload: () => (/* binding */ getPayload),\n/* harmony export */ getPeerIdFromPayload: () => (/* binding */ getPeerIdFromPayload),\n/* harmony export */ isValidPublicKey: () => (/* binding */ isValidPublicKey),\n/* harmony export */ signPayload: () => (/* binding */ signPayload),\n/* harmony export */ verifySignedPayload: () => (/* binding */ verifySignedPayload)\n/* harmony export */ });\n/* harmony import */ var _libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libp2p/crypto/keys */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/index.js\");\n/* harmony import */ var _libp2p_peer_id__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @libp2p/peer-id */ \"(ssr)/./node_modules/@libp2p/peer-id/dist/src/index.js\");\n/* harmony import */ var uint8arraylist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arraylist */ \"(ssr)/./node_modules/uint8arraylist/dist/src/index.js\");\n/* harmony import */ var uint8arrays_concat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uint8arrays/concat */ \"(ssr)/./node_modules/uint8arrays/dist/src/concat.node.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n/* harmony import */ var _proto_payload_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./proto/payload.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/proto/payload.js\");\n\n\n\n\n\n\nasync function getPayload(localPeer, staticPublicKey, extensions) {\n const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey));\n if (localPeer.publicKey == null) {\n throw new Error(\"PublicKey was missing from local PeerId\");\n }\n return createHandshakePayload(localPeer.publicKey, signedPayload, extensions);\n}\nfunction createHandshakePayload(libp2pPublicKey, signedPayload, extensions) {\n return _proto_payload_js__WEBPACK_IMPORTED_MODULE_4__.NoiseHandshakePayload.encode({\n identityKey: libp2pPublicKey,\n identitySig: signedPayload,\n extensions: extensions ?? {\n webtransportCerthashes: []\n }\n }).subarray();\n}\nasync function signPayload(peerId, payload) {\n if (peerId.privateKey == null) {\n throw new Error(\"PrivateKey was missing from PeerId\");\n }\n const privateKey = await (0,_libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_0__.unmarshalPrivateKey)(peerId.privateKey);\n return privateKey.sign(payload);\n}\nasync function getPeerIdFromPayload(payload) {\n return (0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_5__.peerIdFromKeys)(payload.identityKey);\n}\nfunction decodePayload(payload) {\n return _proto_payload_js__WEBPACK_IMPORTED_MODULE_4__.NoiseHandshakePayload.decode(payload);\n}\nfunction getHandshakePayload(publicKey) {\n const prefix = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_3__.fromString)(\"noise-libp2p-static-key:\");\n if (publicKey instanceof Uint8Array) {\n return (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_2__.concat)([\n prefix,\n publicKey\n ], prefix.length + publicKey.length);\n }\n publicKey.prepend(prefix);\n return publicKey;\n}\n/**\n * Verifies signed payload, throws on any irregularities.\n *\n * @param {bytes} noiseStaticKey - owner's noise static key\n * @param {bytes} payload - decoded payload\n * @param {PeerId} remotePeer - owner's libp2p peer ID\n * @returns {Promise<PeerId>} - peer ID of payload owner\n */ async function verifySignedPayload(noiseStaticKey, payload, remotePeer) {\n // Unmarshaling from PublicKey protobuf\n const payloadPeerId = await (0,_libp2p_peer_id__WEBPACK_IMPORTED_MODULE_5__.peerIdFromKeys)(payload.identityKey);\n if (!payloadPeerId.equals(remotePeer)) {\n throw new Error(`Payload identity key ${payloadPeerId.toString()} does not match expected remote peer ${remotePeer.toString()}`);\n }\n const generatedPayload = getHandshakePayload(noiseStaticKey);\n if (payloadPeerId.publicKey == null) {\n throw new Error(\"PublicKey was missing from PeerId\");\n }\n if (payload.identitySig == null) {\n throw new Error(\"Signature was missing from message\");\n }\n const publicKey = (0,_libp2p_crypto_keys__WEBPACK_IMPORTED_MODULE_0__.unmarshalPublicKey)(payloadPeerId.publicKey);\n const valid = await publicKey.verify(generatedPayload, payload.identitySig);\n if (!valid) {\n throw new Error(\"Static key doesn't match to peer that signed payload!\");\n }\n return payloadPeerId;\n}\nfunction isValidPublicKey(pk) {\n if (!(pk instanceof Uint8Array) && !(0,uint8arraylist__WEBPACK_IMPORTED_MODULE_1__.isUint8ArrayList)(pk)) {\n return false;\n }\n if (pk.byteLength !== 32) {\n return false;\n }\n return true;\n} //# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2UvZGlzdC9zcmMvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOEU7QUFDN0I7QUFDQztBQUNjO0FBQ2E7QUFDbEI7QUFDcEQsZUFBZVMsV0FBV0MsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLFVBQVU7SUFDbkUsTUFBTUMsZ0JBQWdCLE1BQU1DLFlBQVlKLFdBQVdLLG9CQUFvQko7SUFDdkUsSUFBSUQsVUFBVU0sU0FBUyxJQUFJLE1BQU07UUFDN0IsTUFBTSxJQUFJQyxNQUFNO0lBQ3BCO0lBQ0EsT0FBT0MsdUJBQXVCUixVQUFVTSxTQUFTLEVBQUVILGVBQWVEO0FBQ3RFO0FBQ08sU0FBU00sdUJBQXVCQyxlQUFlLEVBQUVOLGFBQWEsRUFBRUQsVUFBVTtJQUM3RSxPQUFPSixvRUFBcUJBLENBQUNZLE1BQU0sQ0FBQztRQUNoQ0MsYUFBYUY7UUFDYkcsYUFBYVQ7UUFDYkQsWUFBWUEsY0FBYztZQUFFVyx3QkFBd0IsRUFBRTtRQUFDO0lBQzNELEdBQUdDLFFBQVE7QUFDZjtBQUNPLGVBQWVWLFlBQVlXLE1BQU0sRUFBRUMsT0FBTztJQUM3QyxJQUFJRCxPQUFPRSxVQUFVLElBQUksTUFBTTtRQUMzQixNQUFNLElBQUlWLE1BQU07SUFDcEI7SUFDQSxNQUFNVSxhQUFhLE1BQU0xQix3RUFBbUJBLENBQUN3QixPQUFPRSxVQUFVO0lBQzlELE9BQU9BLFdBQVdDLElBQUksQ0FBQ0Y7QUFDM0I7QUFDTyxlQUFlRyxxQkFBcUJILE9BQU87SUFDOUMsT0FBT3hCLCtEQUFjQSxDQUFDd0IsUUFBUUwsV0FBVztBQUM3QztBQUNPLFNBQVNTLGNBQWNKLE9BQU87SUFDakMsT0FBT2xCLG9FQUFxQkEsQ0FBQ3VCLE1BQU0sQ0FBQ0w7QUFDeEM7QUFDTyxTQUFTWCxvQkFBb0JDLFNBQVM7SUFDekMsTUFBTWdCLFNBQVN6QixtRUFBb0JBLENBQUM7SUFDcEMsSUFBSVMscUJBQXFCaUIsWUFBWTtRQUNqQyxPQUFPNUIsMERBQWdCQSxDQUFDO1lBQUMyQjtZQUFRaEI7U0FBVSxFQUFFZ0IsT0FBT0UsTUFBTSxHQUFHbEIsVUFBVWtCLE1BQU07SUFDakY7SUFDQWxCLFVBQVVtQixPQUFPLENBQUNIO0lBQ2xCLE9BQU9oQjtBQUNYO0FBQ0E7Ozs7Ozs7Q0FPQyxHQUNNLGVBQWVvQixvQkFBb0JDLGNBQWMsRUFBRVgsT0FBTyxFQUFFWSxVQUFVO0lBQ3pFLHVDQUF1QztJQUN2QyxNQUFNQyxnQkFBZ0IsTUFBTXJDLCtEQUFjQSxDQUFDd0IsUUFBUUwsV0FBVztJQUM5RCxJQUFJLENBQUNrQixjQUFjQyxNQUFNLENBQUNGLGFBQWE7UUFDbkMsTUFBTSxJQUFJckIsTUFBTSxDQUFDLHFCQUFxQixFQUFFc0IsY0FBY0UsUUFBUSxHQUFHLHFDQUFxQyxFQUFFSCxXQUFXRyxRQUFRLEdBQUcsQ0FBQztJQUNuSTtJQUNBLE1BQU1DLG1CQUFtQjNCLG9CQUFvQnNCO0lBQzdDLElBQUlFLGNBQWN2QixTQUFTLElBQUksTUFBTTtRQUNqQyxNQUFNLElBQUlDLE1BQU07SUFDcEI7SUFDQSxJQUFJUyxRQUFRSixXQUFXLElBQUksTUFBTTtRQUM3QixNQUFNLElBQUlMLE1BQU07SUFDcEI7SUFDQSxNQUFNRCxZQUFZaEIsdUVBQWtCQSxDQUFDdUMsY0FBY3ZCLFNBQVM7SUFDNUQsTUFBTTJCLFFBQVEsTUFBTTNCLFVBQVU0QixNQUFNLENBQUNGLGtCQUFrQmhCLFFBQVFKLFdBQVc7SUFDMUUsSUFBSSxDQUFDcUIsT0FBTztRQUNSLE1BQU0sSUFBSTFCLE1BQU07SUFDcEI7SUFDQSxPQUFPc0I7QUFDWDtBQUNPLFNBQVNNLGlCQUFpQkMsRUFBRTtJQUMvQixJQUFJLENBQUVBLENBQUFBLGNBQWNiLFVBQVMsS0FBTSxDQUFFOUIsZ0VBQWdCQSxDQUFDMkMsS0FBTTtRQUN4RCxPQUFPO0lBQ1g7SUFDQSxJQUFJQSxHQUFHQyxVQUFVLEtBQUssSUFBSTtRQUN0QixPQUFPO0lBQ1g7SUFDQSxPQUFPO0FBQ1gsRUFDQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9kaXN0L3NyYy91dGlscy5qcz84NjA2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVubWFyc2hhbFB1YmxpY0tleSwgdW5tYXJzaGFsUHJpdmF0ZUtleSB9IGZyb20gJ0BsaWJwMnAvY3J5cHRvL2tleXMnO1xuaW1wb3J0IHsgcGVlcklkRnJvbUtleXMgfSBmcm9tICdAbGlicDJwL3BlZXItaWQnO1xuaW1wb3J0IHsgaXNVaW50OEFycmF5TGlzdCB9IGZyb20gJ3VpbnQ4YXJyYXlsaXN0JztcbmltcG9ydCB7IGNvbmNhdCBhcyB1aW50OEFycmF5Q29uY2F0IH0gZnJvbSAndWludDhhcnJheXMvY29uY2F0JztcbmltcG9ydCB7IGZyb21TdHJpbmcgYXMgdWludDhBcnJheUZyb21TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy9mcm9tLXN0cmluZyc7XG5pbXBvcnQgeyBOb2lzZUhhbmRzaGFrZVBheWxvYWQgfSBmcm9tICcuL3Byb3RvL3BheWxvYWQuanMnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBheWxvYWQobG9jYWxQZWVyLCBzdGF0aWNQdWJsaWNLZXksIGV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBzaWduZWRQYXlsb2FkID0gYXdhaXQgc2lnblBheWxvYWQobG9jYWxQZWVyLCBnZXRIYW5kc2hha2VQYXlsb2FkKHN0YXRpY1B1YmxpY0tleSkpO1xuICAgIGlmIChsb2NhbFBlZXIucHVibGljS2V5ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQdWJsaWNLZXkgd2FzIG1pc3NpbmcgZnJvbSBsb2NhbCBQZWVySWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUhhbmRzaGFrZVBheWxvYWQobG9jYWxQZWVyLnB1YmxpY0tleSwgc2lnbmVkUGF5bG9hZCwgZXh0ZW5zaW9ucyk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGFuZHNoYWtlUGF5bG9hZChsaWJwMnBQdWJsaWNLZXksIHNpZ25lZFBheWxvYWQsIGV4dGVuc2lvbnMpIHtcbiAgICByZXR1cm4gTm9pc2VIYW5kc2hha2VQYXlsb2FkLmVuY29kZSh7XG4gICAgICAgIGlkZW50aXR5S2V5OiBsaWJwMnBQdWJsaWNLZXksXG4gICAgICAgIGlkZW50aXR5U2lnOiBzaWduZWRQYXlsb2FkLFxuICAgICAgICBleHRlbnNpb25zOiBleHRlbnNpb25zID8/IHsgd2VidHJhbnNwb3J0Q2VydGhhc2hlczogW10gfVxuICAgIH0pLnN1YmFycmF5KCk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnblBheWxvYWQocGVlcklkLCBwYXlsb2FkKSB7XG4gICAgaWYgKHBlZXJJZC5wcml2YXRlS2V5ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlS2V5IHdhcyBtaXNzaW5nIGZyb20gUGVlcklkJyk7XG4gICAgfVxuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBhd2FpdCB1bm1hcnNoYWxQcml2YXRlS2V5KHBlZXJJZC5wcml2YXRlS2V5KTtcbiAgICByZXR1cm4gcHJpdmF0ZUtleS5zaWduKHBheWxvYWQpO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlZXJJZEZyb21QYXlsb2FkKHBheWxvYWQpIHtcbiAgICByZXR1cm4gcGVlcklkRnJvbUtleXMocGF5bG9hZC5pZGVudGl0eUtleSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGF5bG9hZChwYXlsb2FkKSB7XG4gICAgcmV0dXJuIE5vaXNlSGFuZHNoYWtlUGF5bG9hZC5kZWNvZGUocGF5bG9hZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0SGFuZHNoYWtlUGF5bG9hZChwdWJsaWNLZXkpIHtcbiAgICBjb25zdCBwcmVmaXggPSB1aW50OEFycmF5RnJvbVN0cmluZygnbm9pc2UtbGlicDJwLXN0YXRpYy1rZXk6Jyk7XG4gICAgaWYgKHB1YmxpY0tleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIHVpbnQ4QXJyYXlDb25jYXQoW3ByZWZpeCwgcHVibGljS2V5XSwgcHJlZml4Lmxlbmd0aCArIHB1YmxpY0tleS5sZW5ndGgpO1xuICAgIH1cbiAgICBwdWJsaWNLZXkucHJlcGVuZChwcmVmaXgpO1xuICAgIHJldHVybiBwdWJsaWNLZXk7XG59XG4vKipcbiAqIFZlcmlmaWVzIHNpZ25lZCBwYXlsb2FkLCB0aHJvd3Mgb24gYW55IGlycmVndWxhcml0aWVzLlxuICpcbiAqIEBwYXJhbSB7Ynl0ZXN9IG5vaXNlU3RhdGljS2V5IC0gb3duZXIncyBub2lzZSBzdGF0aWMga2V5XG4gKiBAcGFyYW0ge2J5dGVzfSBwYXlsb2FkIC0gZGVjb2RlZCBwYXlsb2FkXG4gKiBAcGFyYW0ge1BlZXJJZH0gcmVtb3RlUGVlciAtIG93bmVyJ3MgbGlicDJwIHBlZXIgSURcbiAqIEByZXR1cm5zIHtQcm9taXNlPFBlZXJJZD59IC0gcGVlciBJRCBvZiBwYXlsb2FkIG93bmVyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlTaWduZWRQYXlsb2FkKG5vaXNlU3RhdGljS2V5LCBwYXlsb2FkLCByZW1vdGVQZWVyKSB7XG4gICAgLy8gVW5tYXJzaGFsaW5nIGZyb20gUHVibGljS2V5IHByb3RvYnVmXG4gICAgY29uc3QgcGF5bG9hZFBlZXJJZCA9IGF3YWl0IHBlZXJJZEZyb21LZXlzKHBheWxvYWQuaWRlbnRpdHlLZXkpO1xuICAgIGlmICghcGF5bG9hZFBlZXJJZC5lcXVhbHMocmVtb3RlUGVlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXlsb2FkIGlkZW50aXR5IGtleSAke3BheWxvYWRQZWVySWQudG9TdHJpbmcoKX0gZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVtb3RlIHBlZXIgJHtyZW1vdGVQZWVyLnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGdlbmVyYXRlZFBheWxvYWQgPSBnZXRIYW5kc2hha2VQYXlsb2FkKG5vaXNlU3RhdGljS2V5KTtcbiAgICBpZiAocGF5bG9hZFBlZXJJZC5wdWJsaWNLZXkgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1B1YmxpY0tleSB3YXMgbWlzc2luZyBmcm9tIFBlZXJJZCcpO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZC5pZGVudGl0eVNpZyA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lnbmF0dXJlIHdhcyBtaXNzaW5nIGZyb20gbWVzc2FnZScpO1xuICAgIH1cbiAgICBjb25zdCBwdWJsaWNLZXkgPSB1bm1hcnNoYWxQdWJsaWNLZXkocGF5bG9hZFBlZXJJZC5wdWJsaWNLZXkpO1xuICAgIGNvbnN0IHZhbGlkID0gYXdhaXQgcHVibGljS2V5LnZlcmlmeShnZW5lcmF0ZWRQYXlsb2FkLCBwYXlsb2FkLmlkZW50aXR5U2lnKTtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRpYyBrZXkgZG9lc24ndCBtYXRjaCB0byBwZWVyIHRoYXQgc2lnbmVkIHBheWxvYWQhXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZFBlZXJJZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHVibGljS2V5KHBrKSB7XG4gICAgaWYgKCEocGsgaW5zdGFuY2VvZiBVaW50OEFycmF5KSAmJiAhKGlzVWludDhBcnJheUxpc3QocGspKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChway5ieXRlTGVuZ3RoICE9PSAzMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIl0sIm5hbWVzIjpbInVubWFyc2hhbFB1YmxpY0tleSIsInVubWFyc2hhbFByaXZhdGVLZXkiLCJwZWVySWRGcm9tS2V5cyIsImlzVWludDhBcnJheUxpc3QiLCJjb25jYXQiLCJ1aW50OEFycmF5Q29uY2F0IiwiZnJvbVN0cmluZyIsInVpbnQ4QXJyYXlGcm9tU3RyaW5nIiwiTm9pc2VIYW5kc2hha2VQYXlsb2FkIiwiZ2V0UGF5bG9hZCIsImxvY2FsUGVlciIsInN0YXRpY1B1YmxpY0tleSIsImV4dGVuc2lvbnMiLCJzaWduZWRQYXlsb2FkIiwic2lnblBheWxvYWQiLCJnZXRIYW5kc2hha2VQYXlsb2FkIiwicHVibGljS2V5IiwiRXJyb3IiLCJjcmVhdGVIYW5kc2hha2VQYXlsb2FkIiwibGlicDJwUHVibGljS2V5IiwiZW5jb2RlIiwiaWRlbnRpdHlLZXkiLCJpZGVudGl0eVNpZyIsIndlYnRyYW5zcG9ydENlcnRoYXNoZXMiLCJzdWJhcnJheSIsInBlZXJJZCIsInBheWxvYWQiLCJwcml2YXRlS2V5Iiwic2lnbiIsImdldFBlZXJJZEZyb21QYXlsb2FkIiwiZGVjb2RlUGF5bG9hZCIsImRlY29kZSIsInByZWZpeCIsIlVpbnQ4QXJyYXkiLCJsZW5ndGgiLCJwcmVwZW5kIiwidmVyaWZ5U2lnbmVkUGF5bG9hZCIsIm5vaXNlU3RhdGljS2V5IiwicmVtb3RlUGVlciIsInBheWxvYWRQZWVySWQiLCJlcXVhbHMiLCJ0b1N0cmluZyIsImdlbmVyYXRlZFBheWxvYWQiLCJ2YWxpZCIsInZlcmlmeSIsImlzVmFsaWRQdWJsaWNLZXkiLCJwayIsImJ5dGVMZW5ndGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/dist/src/utils.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/ciphers/aes-gcm.js":
/*!******************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/ciphers/aes-gcm.js ***!
\******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ create: () => (/* binding */ create)\n/* harmony export */ });\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays/concat */ \"(ssr)/./node_modules/uint8arrays/dist/src/concat.node.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n\n\n\n// Based off of code from https://github.com/luke-park/SecureCompatibleEncryptionExamples\nfunction create(opts) {\n const algorithm = opts?.algorithm ?? \"aes-128-gcm\";\n const keyLength = opts?.keyLength ?? 16;\n const nonceLength = opts?.nonceLength ?? 12;\n const digest = opts?.digest ?? \"sha256\";\n const saltLength = opts?.saltLength ?? 16;\n const iterations = opts?.iterations ?? 32767;\n const algorithmTagLength = opts?.algorithmTagLength ?? 16;\n function encryptWithKey(data, key) {\n const nonce = crypto__WEBPACK_IMPORTED_MODULE_0__.randomBytes(nonceLength);\n // Create the cipher instance.\n const cipher = crypto__WEBPACK_IMPORTED_MODULE_0__.createCipheriv(algorithm, key, nonce);\n // Encrypt and prepend nonce.\n const ciphertext = (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__.concat)([\n cipher.update(data),\n cipher.final()\n ]);\n // @ts-expect-error getAuthTag is not a function\n return (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__.concat)([\n nonce,\n ciphertext,\n cipher.getAuthTag()\n ]);\n }\n /**\n * Uses the provided password to derive a pbkdf2 key. The key\n * will then be used to encrypt the data.\n */ async function encrypt(data, password) {\n // Generate a 128-bit salt using a CSPRNG.\n const salt = crypto__WEBPACK_IMPORTED_MODULE_0__.randomBytes(saltLength);\n if (typeof password === \"string\") {\n password = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__.fromString)(password);\n }\n // Derive a key using PBKDF2.\n const key = crypto__WEBPACK_IMPORTED_MODULE_0__.pbkdf2Sync(password, salt, iterations, keyLength, digest);\n // Encrypt and prepend salt.\n return (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__.concat)([\n salt,\n encryptWithKey(Uint8Array.from(data), key)\n ]);\n }\n /**\n * Decrypts the given cipher text with the provided key. The `key` should\n * be a cryptographically safe key and not a plaintext password. To use\n * a plaintext password, use `decrypt`. The options used to create\n * this decryption cipher must be the same as those used to create\n * the encryption cipher.\n */ function decryptWithKey(ciphertextAndNonce, key) {\n // Create Uint8Arrays of nonce, ciphertext and tag.\n const nonce = ciphertextAndNonce.subarray(0, nonceLength);\n const ciphertext = ciphertextAndNonce.subarray(nonceLength, ciphertextAndNonce.length - algorithmTagLength);\n const tag = ciphertextAndNonce.subarray(ciphertext.length + nonceLength);\n // Create the cipher instance.\n const cipher = crypto__WEBPACK_IMPORTED_MODULE_0__.createDecipheriv(algorithm, key, nonce);\n // Decrypt and return result.\n // @ts-expect-error getAuthTag is not a function\n cipher.setAuthTag(tag);\n return (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__.concat)([\n cipher.update(ciphertext),\n cipher.final()\n ]);\n }\n /**\n * Uses the provided password to derive a pbkdf2 key. The key\n * will then be used to decrypt the data. The options used to create\n * this decryption cipher must be the same as those used to create\n * the encryption cipher.\n *\n * @param {Uint8Array} data - The data to decrypt\n * @param {string|Uint8Array} password - A plain password\n */ async function decrypt(data, password) {\n // Create Uint8Arrays of salt and ciphertextAndNonce.\n const salt = data.subarray(0, saltLength);\n const ciphertextAndNonce = data.subarray(saltLength);\n if (typeof password === \"string\") {\n password = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__.fromString)(password);\n }\n // Derive the key using PBKDF2.\n const key = crypto__WEBPACK_IMPORTED_MODULE_0__.pbkdf2Sync(password, salt, iterations, keyLength, digest);\n // Decrypt and return result.\n return decryptWithKey(ciphertextAndNonce, key);\n }\n const cipher = {\n encrypt,\n decrypt\n };\n return cipher;\n} //# sourceMappingURL=aes-gcm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2NpcGhlcnMvYWVzLWdjbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTRCO0FBQ29DO0FBQ2E7QUFDN0UseUZBQXlGO0FBQ2xGLFNBQVNLLE9BQU9DLElBQUk7SUFDdkIsTUFBTUMsWUFBWUQsTUFBTUMsYUFBYTtJQUNyQyxNQUFNQyxZQUFZRixNQUFNRSxhQUFhO0lBQ3JDLE1BQU1DLGNBQWNILE1BQU1HLGVBQWU7SUFDekMsTUFBTUMsU0FBU0osTUFBTUksVUFBVTtJQUMvQixNQUFNQyxhQUFhTCxNQUFNSyxjQUFjO0lBQ3ZDLE1BQU1DLGFBQWFOLE1BQU1NLGNBQWM7SUFDdkMsTUFBTUMscUJBQXFCUCxNQUFNTyxzQkFBc0I7SUFDdkQsU0FBU0MsZUFBZUMsSUFBSSxFQUFFQyxHQUFHO1FBQzdCLE1BQU1DLFFBQVFqQiwrQ0FBa0IsQ0FBQ1M7UUFDakMsOEJBQThCO1FBQzlCLE1BQU1VLFNBQVNuQixrREFBcUIsQ0FBQ08sV0FBV1MsS0FBS0M7UUFDckQsNkJBQTZCO1FBQzdCLE1BQU1JLGFBQWFuQiwwREFBZ0JBLENBQUM7WUFBQ2lCLE9BQU9HLE1BQU0sQ0FBQ1A7WUFBT0ksT0FBT0ksS0FBSztTQUFHO1FBQ3pFLGdEQUFnRDtRQUNoRCxPQUFPckIsMERBQWdCQSxDQUFDO1lBQUNlO1lBQU9JO1lBQVlGLE9BQU9LLFVBQVU7U0FBRztJQUNwRTtJQUNBOzs7S0FHQyxHQUNELGVBQWVDLFFBQVFWLElBQUksRUFBRVcsUUFBUTtRQUNqQywwQ0FBMEM7UUFDMUMsTUFBTUMsT0FBTzNCLCtDQUFrQixDQUFDVztRQUNoQyxJQUFJLE9BQU9lLGFBQWEsVUFBVTtZQUM5QkEsV0FBV3RCLG1FQUFvQkEsQ0FBQ3NCO1FBQ3BDO1FBQ0EsNkJBQTZCO1FBQzdCLE1BQU1WLE1BQU1oQiw4Q0FBaUIsQ0FBQzBCLFVBQVVDLE1BQU1mLFlBQVlKLFdBQVdFO1FBQ3JFLDRCQUE0QjtRQUM1QixPQUFPUiwwREFBZ0JBLENBQUM7WUFBQ3lCO1lBQU1iLGVBQWVlLFdBQVdDLElBQUksQ0FBQ2YsT0FBT0M7U0FBSztJQUM5RTtJQUNBOzs7Ozs7S0FNQyxHQUNELFNBQVNlLGVBQWVDLGtCQUFrQixFQUFFaEIsR0FBRztRQUMzQyxtREFBbUQ7UUFDbkQsTUFBTUMsUUFBUWUsbUJBQW1CQyxRQUFRLENBQUMsR0FBR3hCO1FBQzdDLE1BQU1ZLGFBQWFXLG1CQUFtQkMsUUFBUSxDQUFDeEIsYUFBYXVCLG1CQUFtQkUsTUFBTSxHQUFHckI7UUFDeEYsTUFBTXNCLE1BQU1ILG1CQUFtQkMsUUFBUSxDQUFDWixXQUFXYSxNQUFNLEdBQUd6QjtRQUM1RCw4QkFBOEI7UUFDOUIsTUFBTVUsU0FBU25CLG9EQUF1QixDQUFDTyxXQUFXUyxLQUFLQztRQUN2RCw2QkFBNkI7UUFDN0IsZ0RBQWdEO1FBQ2hERSxPQUFPa0IsVUFBVSxDQUFDRjtRQUNsQixPQUFPakMsMERBQWdCQSxDQUFDO1lBQUNpQixPQUFPRyxNQUFNLENBQUNEO1lBQWFGLE9BQU9JLEtBQUs7U0FBRztJQUN2RTtJQUNBOzs7Ozs7OztLQVFDLEdBQ0QsZUFBZWUsUUFBUXZCLElBQUksRUFBRVcsUUFBUTtRQUNqQyxxREFBcUQ7UUFDckQsTUFBTUMsT0FBT1osS0FBS2tCLFFBQVEsQ0FBQyxHQUFHdEI7UUFDOUIsTUFBTXFCLHFCQUFxQmpCLEtBQUtrQixRQUFRLENBQUN0QjtRQUN6QyxJQUFJLE9BQU9lLGFBQWEsVUFBVTtZQUM5QkEsV0FBV3RCLG1FQUFvQkEsQ0FBQ3NCO1FBQ3BDO1FBQ0EsK0JBQStCO1FBQy9CLE1BQU1WLE1BQU1oQiw4Q0FBaUIsQ0FBQzBCLFVBQVVDLE1BQU1mLFlBQVlKLFdBQVdFO1FBQ3JFLDZCQUE2QjtRQUM3QixPQUFPcUIsZUFBZUMsb0JBQW9CaEI7SUFDOUM7SUFDQSxNQUFNRyxTQUFTO1FBQ1hNO1FBQ0FhO0lBQ0o7SUFDQSxPQUFPbkI7QUFDWCxFQUNBLG1DQUFtQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL25vZGVfbW9kdWxlcy9AbGlicDJwL2NyeXB0by9kaXN0L3NyYy9jaXBoZXJzL2Flcy1nY20uanM/NzhmOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBjb25jYXQgYXMgdWludDhBcnJheUNvbmNhdCB9IGZyb20gJ3VpbnQ4YXJyYXlzL2NvbmNhdCc7XG5pbXBvcnQgeyBmcm9tU3RyaW5nIGFzIHVpbnQ4QXJyYXlGcm9tU3RyaW5nIH0gZnJvbSAndWludDhhcnJheXMvZnJvbS1zdHJpbmcnO1xuLy8gQmFzZWQgb2ZmIG9mIGNvZGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbHVrZS1wYXJrL1NlY3VyZUNvbXBhdGlibGVFbmNyeXB0aW9uRXhhbXBsZXNcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUob3B0cykge1xuICAgIGNvbnN0IGFsZ29yaXRobSA9IG9wdHM/LmFsZ29yaXRobSA/PyAnYWVzLTEyOC1nY20nO1xuICAgIGNvbnN0IGtleUxlbmd0aCA9IG9wdHM/LmtleUxlbmd0aCA/PyAxNjtcbiAgICBjb25zdCBub25jZUxlbmd0aCA9IG9wdHM/Lm5vbmNlTGVuZ3RoID8/IDEyO1xuICAgIGNvbnN0IGRpZ2VzdCA9IG9wdHM/LmRpZ2VzdCA/PyAnc2hhMjU2JztcbiAgICBjb25zdCBzYWx0TGVuZ3RoID0gb3B0cz8uc2FsdExlbmd0aCA/PyAxNjtcbiAgICBjb25zdCBpdGVyYXRpb25zID0gb3B0cz8uaXRlcmF0aW9ucyA/PyAzMjc2NztcbiAgICBjb25zdCBhbGdvcml0aG1UYWdMZW5ndGggPSBvcHRzPy5hbGdvcml0aG1UYWdMZW5ndGggPz8gMTY7XG4gICAgZnVuY3Rpb24gZW5jcnlwdFdpdGhLZXkoZGF0YSwga2V5KSB7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKG5vbmNlTGVuZ3RoKTtcbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBjaXBoZXIgaW5zdGFuY2UuXG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihhbGdvcml0aG0sIGtleSwgbm9uY2UpO1xuICAgICAgICAvLyBFbmNyeXB0IGFuZCBwcmVwZW5kIG5vbmNlLlxuICAgICAgICBjb25zdCBjaXBoZXJ0ZXh0ID0gdWludDhBcnJheUNvbmNhdChbY2lwaGVyLnVwZGF0ZShkYXRhKSwgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBnZXRBdXRoVGFnIGlzIG5vdCBhIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiB1aW50OEFycmF5Q29uY2F0KFtub25jZSwgY2lwaGVydGV4dCwgY2lwaGVyLmdldEF1dGhUYWcoKV0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVc2VzIHRoZSBwcm92aWRlZCBwYXNzd29yZCB0byBkZXJpdmUgYSBwYmtkZjIga2V5LiBUaGUga2V5XG4gICAgICogd2lsbCB0aGVuIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgZGF0YS5cbiAgICAgKi9cbiAgICBhc3luYyBmdW5jdGlvbiBlbmNyeXB0KGRhdGEsIHBhc3N3b3JkKSB7XG4gICAgICAgIC8vIEdlbmVyYXRlIGEgMTI4LWJpdCBzYWx0IHVzaW5nIGEgQ1NQUk5HLlxuICAgICAgICBjb25zdCBzYWx0ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKHNhbHRMZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIHBhc3N3b3JkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGFzc3dvcmQgPSB1aW50OEFycmF5RnJvbVN0cmluZyhwYXNzd29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVyaXZlIGEga2V5IHVzaW5nIFBCS0RGMi5cbiAgICAgICAgY29uc3Qga2V5ID0gY3J5cHRvLnBia2RmMlN5bmMocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleUxlbmd0aCwgZGlnZXN0KTtcbiAgICAgICAgLy8gRW5jcnlwdCBhbmQgcHJlcGVuZCBzYWx0LlxuICAgICAgICByZXR1cm4gdWludDhBcnJheUNvbmNhdChbc2FsdCwgZW5jcnlwdFdpdGhLZXkoVWludDhBcnJheS5mcm9tKGRhdGEpLCBrZXkpXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlY3J5cHRzIHRoZSBnaXZlbiBjaXBoZXIgdGV4dCB3aXRoIHRoZSBwcm92aWRlZCBrZXkuIFRoZSBga2V5YCBzaG91bGRcbiAgICAgKiBiZSBhIGNyeXB0b2dyYXBoaWNhbGx5IHNhZmUga2V5IGFuZCBub3QgYSBwbGFpbnRleHQgcGFzc3dvcmQuIFRvIHVzZVxuICAgICAqIGEgcGxhaW50ZXh0IHBhc3N3b3JkLCB1c2UgYGRlY3J5cHRgLiBUaGUgb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZVxuICAgICAqIHRoaXMgZGVjcnlwdGlvbiBjaXBoZXIgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aG9zZSB1c2VkIHRvIGNyZWF0ZVxuICAgICAqIHRoZSBlbmNyeXB0aW9uIGNpcGhlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWNyeXB0V2l0aEtleShjaXBoZXJ0ZXh0QW5kTm9uY2UsIGtleSkge1xuICAgICAgICAvLyBDcmVhdGUgVWludDhBcnJheXMgb2Ygbm9uY2UsIGNpcGhlcnRleHQgYW5kIHRhZy5cbiAgICAgICAgY29uc3Qgbm9uY2UgPSBjaXBoZXJ0ZXh0QW5kTm9uY2Uuc3ViYXJyYXkoMCwgbm9uY2VMZW5ndGgpO1xuICAgICAgICBjb25zdCBjaXBoZXJ0ZXh0ID0gY2lwaGVydGV4dEFuZE5vbmNlLnN1YmFycmF5KG5vbmNlTGVuZ3RoLCBjaXBoZXJ0ZXh0QW5kTm9uY2UubGVuZ3RoIC0gYWxnb3JpdGhtVGFnTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgdGFnID0gY2lwaGVydGV4dEFuZE5vbmNlLnN1YmFycmF5KGNpcGhlcnRleHQubGVuZ3RoICsgbm9uY2VMZW5ndGgpO1xuICAgICAgICAvLyBDcmVhdGUgdGhlIGNpcGhlciBpbnN0YW5jZS5cbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIG5vbmNlKTtcbiAgICAgICAgLy8gRGVjcnlwdCBhbmQgcmV0dXJuIHJlc3VsdC5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBnZXRBdXRoVGFnIGlzIG5vdCBhIGZ1bmN0aW9uXG4gICAgICAgIGNpcGhlci5zZXRBdXRoVGFnKHRhZyk7XG4gICAgICAgIHJldHVybiB1aW50OEFycmF5Q29uY2F0KFtjaXBoZXIudXBkYXRlKGNpcGhlcnRleHQpLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVc2VzIHRoZSBwcm92aWRlZCBwYXNzd29yZCB0byBkZXJpdmUgYSBwYmtkZjIga2V5LiBUaGUga2V5XG4gICAgICogd2lsbCB0aGVuIGJlIHVzZWQgdG8gZGVjcnlwdCB0aGUgZGF0YS4gVGhlIG9wdGlvbnMgdXNlZCB0byBjcmVhdGVcbiAgICAgKiB0aGlzIGRlY3J5cHRpb24gY2lwaGVyIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhvc2UgdXNlZCB0byBjcmVhdGVcbiAgICAgKiB0aGUgZW5jcnlwdGlvbiBjaXBoZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGEgLSBUaGUgZGF0YSB0byBkZWNyeXB0XG4gICAgICogQHBhcmFtIHtzdHJpbmd8VWludDhBcnJheX0gcGFzc3dvcmQgLSBBIHBsYWluIHBhc3N3b3JkXG4gICAgICovXG4gICAgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdChkYXRhLCBwYXNzd29yZCkge1xuICAgICAgICAvLyBDcmVhdGUgVWludDhBcnJheXMgb2Ygc2FsdCBhbmQgY2lwaGVydGV4dEFuZE5vbmNlLlxuICAgICAgICBjb25zdCBzYWx0ID0gZGF0YS5zdWJhcnJheSgwLCBzYWx0TGVuZ3RoKTtcbiAgICAgICAgY29uc3QgY2lwaGVydGV4dEFuZE5vbmNlID0gZGF0YS5zdWJhcnJheShzYWx0TGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhc3N3b3JkID0gdWludDhBcnJheUZyb21TdHJpbmcocGFzc3dvcmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERlcml2ZSB0aGUga2V5IHVzaW5nIFBCS0RGMi5cbiAgICAgICAgY29uc3Qga2V5ID0gY3J5cHRvLnBia2RmMlN5bmMocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleUxlbmd0aCwgZGlnZXN0KTtcbiAgICAgICAgLy8gRGVjcnlwdCBhbmQgcmV0dXJuIHJlc3VsdC5cbiAgICAgICAgcmV0dXJuIGRlY3J5cHRXaXRoS2V5KGNpcGhlcnRleHRBbmROb25jZSwga2V5KTtcbiAgICB9XG4gICAgY29uc3QgY2lwaGVyID0ge1xuICAgICAgICBlbmNyeXB0LFxuICAgICAgICBkZWNyeXB0XG4gICAgfTtcbiAgICByZXR1cm4gY2lwaGVyO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWVzLWdjbS5qcy5tYXAiXSwibmFtZXMiOlsiY3J5cHRvIiwiY29uY2F0IiwidWludDhBcnJheUNvbmNhdCIsImZyb21TdHJpbmciLCJ1aW50OEFycmF5RnJvbVN0cmluZyIsImNyZWF0ZSIsIm9wdHMiLCJhbGdvcml0aG0iLCJrZXlMZW5ndGgiLCJub25jZUxlbmd0aCIsImRpZ2VzdCIsInNhbHRMZW5ndGgiLCJpdGVyYXRpb25zIiwiYWxnb3JpdGhtVGFnTGVuZ3RoIiwiZW5jcnlwdFdpdGhLZXkiLCJkYXRhIiwia2V5Iiwibm9uY2UiLCJyYW5kb21CeXRlcyIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiY2lwaGVydGV4dCIsInVwZGF0ZSIsImZpbmFsIiwiZ2V0QXV0aFRhZyIsImVuY3J5cHQiLCJwYXNzd29yZCIsInNhbHQiLCJwYmtkZjJTeW5jIiwiVWludDhBcnJheSIsImZyb20iLCJkZWNyeXB0V2l0aEtleSIsImNpcGhlcnRleHRBbmROb25jZSIsInN1YmFycmF5IiwibGVuZ3RoIiwidGFnIiwiY3JlYXRlRGVjaXBoZXJpdiIsInNldEF1dGhUYWciLCJkZWNyeXB0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/ciphers/aes-gcm.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/index.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/index.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ create: () => (/* binding */ create)\n/* harmony export */ });\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var _lengths_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lengths.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/lengths.js\");\n/**\n * @packageDocumentation\n *\n * Exposes an interface to the Keyed-Hash Message Authentication Code (HMAC) as defined in U.S. Federal Information Processing Standards Publication 198. An HMAC is a cryptographic hash that uses a key to sign a message. The receiver verifies the hash by recomputing it using the same key.\n *\n * @example\n *\n * ```js\n * import { create } from '@libp2p/hmac'\n *\n * const hash = 'SHA1' // 'SHA256' || 'SHA512'\n * const hmac = await crypto.hmac.create(hash, uint8ArrayFromString('secret'))\n * const sig = await hmac.digest(uint8ArrayFromString('hello world'))\n * console.log(sig)\n * ```\n */ \n\nasync function create(hash, secret) {\n const res = {\n async digest (data) {\n const hmac = crypto__WEBPACK_IMPORTED_MODULE_0__.createHmac(hash.toLowerCase(), secret);\n hmac.update(data);\n return hmac.digest();\n },\n length: _lengths_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"][hash]\n };\n return res;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2htYWMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7OztDQWVDLEdBQzJCO0FBQ087QUFDNUIsZUFBZUUsT0FBT0MsSUFBSSxFQUFFQyxNQUFNO0lBQ3JDLE1BQU1DLE1BQU07UUFDUixNQUFNQyxRQUFPQyxJQUFJO1lBQ2IsTUFBTUMsT0FBT1IsOENBQWlCLENBQUNHLEtBQUtPLFdBQVcsSUFBSU47WUFDbkRJLEtBQUtHLE1BQU0sQ0FBQ0o7WUFDWixPQUFPQyxLQUFLRixNQUFNO1FBQ3RCO1FBQ0FNLFFBQVFYLG1EQUFPLENBQUNFLEtBQUs7SUFDekI7SUFDQSxPQUFPRTtBQUNYLEVBQ0EsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2htYWMvaW5kZXguanM/YzI1YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIEV4cG9zZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBLZXllZC1IYXNoIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoSE1BQykgYXMgZGVmaW5lZCBpbiBVLlMuIEZlZGVyYWwgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBTdGFuZGFyZHMgUHVibGljYXRpb24gMTk4LiBBbiBITUFDIGlzIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIHRoYXQgdXNlcyBhIGtleSB0byBzaWduIGEgbWVzc2FnZS4gVGhlIHJlY2VpdmVyIHZlcmlmaWVzIHRoZSBoYXNoIGJ5IHJlY29tcHV0aW5nIGl0IHVzaW5nIHRoZSBzYW1lIGtleS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICdAbGlicDJwL2htYWMnXG4gKlxuICogY29uc3QgaGFzaCA9ICdTSEExJyAvLyAnU0hBMjU2JyB8fCAnU0hBNTEyJ1xuICogY29uc3QgaG1hYyA9IGF3YWl0IGNyeXB0by5obWFjLmNyZWF0ZShoYXNoLCB1aW50OEFycmF5RnJvbVN0cmluZygnc2VjcmV0JykpXG4gKiBjb25zdCBzaWcgPSBhd2FpdCBobWFjLmRpZ2VzdCh1aW50OEFycmF5RnJvbVN0cmluZygnaGVsbG8gd29ybGQnKSlcbiAqIGNvbnNvbGUubG9nKHNpZylcbiAqIGBgYFxuICovXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgbGVuZ3RocyBmcm9tICcuL2xlbmd0aHMuanMnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZShoYXNoLCBzZWNyZXQpIHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICAgIGFzeW5jIGRpZ2VzdChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoaGFzaC50b0xvd2VyQ2FzZSgpLCBzZWNyZXQpO1xuICAgICAgICAgICAgaG1hYy51cGRhdGUoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gaG1hYy5kaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbGVuZ3RoOiBsZW5ndGhzW2hhc2hdXG4gICAgfTtcbiAgICByZXR1cm4gcmVzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbImNyeXB0byIsImxlbmd0aHMiLCJjcmVhdGUiLCJoYXNoIiwic2VjcmV0IiwicmVzIiwiZGlnZXN0IiwiZGF0YSIsImhtYWMiLCJjcmVhdGVIbWFjIiwidG9Mb3dlckNhc2UiLCJ1cGRhdGUiLCJsZW5ndGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/lengths.js":
/*!***************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/lengths.js ***!
\***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n SHA1: 20,\n SHA256: 32,\n SHA512: 64\n}); //# sourceMappingURL=lengths.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2htYWMvbGVuZ3Rocy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWU7SUFDWEEsTUFBTTtJQUNOQyxRQUFRO0lBQ1JDLFFBQVE7QUFDWixDQUFDLEVBQUMsQ0FDRixtQ0FBbUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9ub2RlX21vZHVsZXMvQGxpYnAycC9jcnlwdG8vZGlzdC9zcmMvaG1hYy9sZW5ndGhzLmpzPzNmNTIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICAgIFNIQTE6IDIwLFxuICAgIFNIQTI1NjogMzIsXG4gICAgU0hBNTEyOiA2NFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlbmd0aHMuanMubWFwIl0sIm5hbWVzIjpbIlNIQTEiLCJTSEEyNTYiLCJTSEE1MTIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/lengths.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ecdh.js":
/*!************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ecdh.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ generateEphmeralKeyPair: () => (/* binding */ generateEphmeralKeyPair)\n/* harmony export */ });\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n\n\nconst curves = {\n \"P-256\": \"prime256v1\",\n \"P-384\": \"secp384r1\",\n \"P-521\": \"secp521r1\"\n};\nconst curveTypes = Object.keys(curves);\nconst names = curveTypes.join(\" / \");\n/**\n * Generates an ephemeral public key and returns a function that will compute the shared secret key.\n *\n * Focuses only on ECDH now, but can be made more general in the future.\n */ async function generateEphmeralKeyPair(curve) {\n if (curve !== \"P-256\" && curve !== \"P-384\" && curve !== \"P-521\") {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_1__.CodeError(`Unknown curve: ${curve}. Must be ${names}`, \"ERR_INVALID_CURVE\");\n }\n const ecdh = crypto__WEBPACK_IMPORTED_MODULE_0__.createECDH(curves[curve]);\n ecdh.generateKeys();\n return {\n key: ecdh.getPublicKey(),\n async genSharedKey (theirPub, forcePrivate) {\n if (forcePrivate != null) {\n ecdh.setPrivateKey(forcePrivate.private);\n }\n return ecdh.computeSecret(theirPub);\n }\n };\n} //# sourceMappingURL=ecdh.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvZWNkaC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNEI7QUFDa0I7QUFDOUMsTUFBTUUsU0FBUztJQUNYLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztBQUNiO0FBQ0EsTUFBTUMsYUFBYUMsT0FBT0MsSUFBSSxDQUFDSDtBQUMvQixNQUFNSSxRQUFRSCxXQUFXSSxJQUFJLENBQUM7QUFDOUI7Ozs7Q0FJQyxHQUNNLGVBQWVDLHdCQUF3QkMsS0FBSztJQUMvQyxJQUFJQSxVQUFVLFdBQVdBLFVBQVUsV0FBV0EsVUFBVSxTQUFTO1FBQzdELE1BQU0sSUFBSVIsd0RBQVNBLENBQUMsQ0FBQyxlQUFlLEVBQUVRLE1BQU0sVUFBVSxFQUFFSCxNQUFNLENBQUMsRUFBRTtJQUNyRTtJQUNBLE1BQU1JLE9BQU9WLDhDQUFpQixDQUFDRSxNQUFNLENBQUNPLE1BQU07SUFDNUNDLEtBQUtFLFlBQVk7SUFDakIsT0FBTztRQUNIQyxLQUFLSCxLQUFLSSxZQUFZO1FBQ3RCLE1BQU1DLGNBQWFDLFFBQVEsRUFBRUMsWUFBWTtZQUNyQyxJQUFJQSxnQkFBZ0IsTUFBTTtnQkFDdEJQLEtBQUtRLGFBQWEsQ0FBQ0QsYUFBYUUsT0FBTztZQUMzQztZQUNBLE9BQU9ULEtBQUtVLGFBQWEsQ0FBQ0o7UUFDOUI7SUFDSjtBQUNKLEVBQ0EsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvZWNkaC5qcz9mMzMzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IENvZGVFcnJvciB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmNvbnN0IGN1cnZlcyA9IHtcbiAgICAnUC0yNTYnOiAncHJpbWUyNTZ2MScsXG4gICAgJ1AtMzg0JzogJ3NlY3AzODRyMScsXG4gICAgJ1AtNTIxJzogJ3NlY3A1MjFyMSdcbn07XG5jb25zdCBjdXJ2ZVR5cGVzID0gT2JqZWN0LmtleXMoY3VydmVzKTtcbmNvbnN0IG5hbWVzID0gY3VydmVUeXBlcy5qb2luKCcgLyAnKTtcbi8qKlxuICogR2VuZXJhdGVzIGFuIGVwaGVtZXJhbCBwdWJsaWMga2V5IGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbXB1dGUgdGhlIHNoYXJlZCBzZWNyZXQga2V5LlxuICpcbiAqIEZvY3VzZXMgb25seSBvbiBFQ0RIIG5vdywgYnV0IGNhbiBiZSBtYWRlIG1vcmUgZ2VuZXJhbCBpbiB0aGUgZnV0dXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVFcGhtZXJhbEtleVBhaXIoY3VydmUpIHtcbiAgICBpZiAoY3VydmUgIT09ICdQLTI1NicgJiYgY3VydmUgIT09ICdQLTM4NCcgJiYgY3VydmUgIT09ICdQLTUyMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcihgVW5rbm93biBjdXJ2ZTogJHtjdXJ2ZX0uIE11c3QgYmUgJHtuYW1lc31gLCAnRVJSX0lOVkFMSURfQ1VSVkUnKTtcbiAgICB9XG4gICAgY29uc3QgZWNkaCA9IGNyeXB0by5jcmVhdGVFQ0RIKGN1cnZlc1tjdXJ2ZV0pO1xuICAgIGVjZGguZ2VuZXJhdGVLZXlzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBlY2RoLmdldFB1YmxpY0tleSgpLFxuICAgICAgICBhc3luYyBnZW5TaGFyZWRLZXkodGhlaXJQdWIsIGZvcmNlUHJpdmF0ZSkge1xuICAgICAgICAgICAgaWYgKGZvcmNlUHJpdmF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZWNkaC5zZXRQcml2YXRlS2V5KGZvcmNlUHJpdmF0ZS5wcml2YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlY2RoLmNvbXB1dGVTZWNyZXQodGhlaXJQdWIpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVjZGguanMubWFwIl0sIm5hbWVzIjpbImNyeXB0byIsIkNvZGVFcnJvciIsImN1cnZlcyIsImN1cnZlVHlwZXMiLCJPYmplY3QiLCJrZXlzIiwibmFtZXMiLCJqb2luIiwiZ2VuZXJhdGVFcGhtZXJhbEtleVBhaXIiLCJjdXJ2ZSIsImVjZGgiLCJjcmVhdGVFQ0RIIiwiZ2VuZXJhdGVLZXlzIiwia2V5IiwiZ2V0UHVibGljS2V5IiwiZ2VuU2hhcmVkS2V5IiwidGhlaXJQdWIiLCJmb3JjZVByaXZhdGUiLCJzZXRQcml2YXRlS2V5IiwicHJpdmF0ZSIsImNvbXB1dGVTZWNyZXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ecdh.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519-class.js":
/*!*********************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519-class.js ***!
\*********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Ed25519PrivateKey: () => (/* binding */ Ed25519PrivateKey),\n/* harmony export */ Ed25519PublicKey: () => (/* binding */ Ed25519PublicKey),\n/* harmony export */ generateKeyPair: () => (/* binding */ generateKeyPair),\n/* harmony export */ generateKeyPairFromSeed: () => (/* binding */ generateKeyPairFromSeed),\n/* harmony export */ unmarshalEd25519PrivateKey: () => (/* binding */ unmarshalEd25519PrivateKey),\n/* harmony export */ unmarshalEd25519PublicKey: () => (/* binding */ unmarshalEd25519PublicKey)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var multiformats_bases_base58__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! multiformats/bases/base58 */ \"(ssr)/./node_modules/multiformats/dist/src/bases/base58.js\");\n/* harmony import */ var multiformats_hashes_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! multiformats/hashes/identity */ \"(ssr)/./node_modules/multiformats/dist/src/hashes/identity.js\");\n/* harmony import */ var multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! multiformats/hashes/sha2 */ \"(ssr)/./node_modules/multiformats/dist/src/hashes/sha2.js\");\n/* harmony import */ var uint8arrays_equals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/equals */ \"(ssr)/./node_modules/uint8arrays/dist/src/equals.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/util.js\");\n/* harmony import */ var _ed25519_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ed25519.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519.js\");\n/* harmony import */ var _exporter_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./exporter.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/exporter.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./keys.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/keys.js\");\n\n\n\n\n\n\n\n\n\nclass Ed25519PublicKey {\n constructor(key){\n this._key = ensureKey(key, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.publicKeyLength);\n }\n verify(data, sig) {\n return _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.hashAndVerify(this._key, sig, data);\n }\n marshal() {\n return this._key;\n }\n get bytes() {\n return _keys_js__WEBPACK_IMPORTED_MODULE_7__.PublicKey.encode({\n Type: _keys_js__WEBPACK_IMPORTED_MODULE_7__.KeyType.Ed25519,\n Data: this.marshal()\n }).subarray();\n }\n equals(key) {\n return (0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_3__.equals)(this.bytes, key.bytes);\n }\n hash() {\n const p = multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_2__.sha256.digest(this.bytes);\n if ((0,_util_js__WEBPACK_IMPORTED_MODULE_4__.isPromise)(p)) {\n return p.then(({ bytes })=>bytes);\n }\n return p.bytes;\n }\n}\nclass Ed25519PrivateKey {\n // key - 64 byte Uint8Array containing private key\n // publicKey - 32 byte Uint8Array containing public key\n constructor(key, publicKey){\n this._key = ensureKey(key, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.privateKeyLength);\n this._publicKey = ensureKey(publicKey, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.publicKeyLength);\n }\n sign(message) {\n return _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.hashAndSign(this._key, message);\n }\n get public() {\n return new Ed25519PublicKey(this._publicKey);\n }\n marshal() {\n return this._key;\n }\n get bytes() {\n return _keys_js__WEBPACK_IMPORTED_MODULE_7__.PrivateKey.encode({\n Type: _keys_js__WEBPACK_IMPORTED_MODULE_7__.KeyType.Ed25519,\n Data: this.marshal()\n }).subarray();\n }\n equals(key) {\n return (0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_3__.equals)(this.bytes, key.bytes);\n }\n async hash() {\n const p = multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_2__.sha256.digest(this.bytes);\n let bytes;\n if ((0,_util_js__WEBPACK_IMPORTED_MODULE_4__.isPromise)(p)) {\n ({ bytes } = await p);\n } else {\n bytes = p.bytes;\n }\n return bytes;\n }\n /**\n * Gets the ID of the key.\n *\n * The key id is the base58 encoding of the identity multihash containing its public key.\n * The public key is a protobuf encoding containing a type and the DER encoding\n * of the PKCS SubjectPublicKeyInfo.\n *\n * @returns {Promise<string>}\n */ async id() {\n const encoding = multiformats_hashes_identity__WEBPACK_IMPORTED_MODULE_1__.identity.digest(this.public.bytes);\n return multiformats_bases_base58__WEBPACK_IMPORTED_MODULE_0__.base58btc.encode(encoding.bytes).substring(1);\n }\n /**\n * Exports the key into a password protected `format`\n */ async export(password, format = \"libp2p-key\") {\n if (format === \"libp2p-key\") {\n return (0,_exporter_js__WEBPACK_IMPORTED_MODULE_6__.exporter)(this.bytes, password);\n } else {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.CodeError(`export format '${format}' is not supported`, \"ERR_INVALID_EXPORT_FORMAT\");\n }\n }\n}\nfunction unmarshalEd25519PrivateKey(bytes) {\n // Try the old, redundant public key version\n if (bytes.length > _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.privateKeyLength) {\n bytes = ensureKey(bytes, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.privateKeyLength + _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.publicKeyLength);\n const privateKeyBytes = bytes.subarray(0, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.privateKeyLength);\n const publicKeyBytes = bytes.subarray(_ed25519_js__WEBPACK_IMPORTED_MODULE_5__.privateKeyLength, bytes.length);\n return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes);\n }\n bytes = ensureKey(bytes, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.privateKeyLength);\n const privateKeyBytes = bytes.subarray(0, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.privateKeyLength);\n const publicKeyBytes = bytes.subarray(_ed25519_js__WEBPACK_IMPORTED_MODULE_5__.publicKeyLength);\n return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes);\n}\nfunction unmarshalEd25519PublicKey(bytes) {\n bytes = ensureKey(bytes, _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.publicKeyLength);\n return new Ed25519PublicKey(bytes);\n}\nasync function generateKeyPair() {\n const { privateKey, publicKey } = _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.generateKey();\n return new Ed25519PrivateKey(privateKey, publicKey);\n}\nasync function generateKeyPairFromSeed(seed) {\n const { privateKey, publicKey } = _ed25519_js__WEBPACK_IMPORTED_MODULE_5__.generateKeyFromSeed(seed);\n return new Ed25519PrivateKey(privateKey, publicKey);\n}\nfunction ensureKey(key, length) {\n key = Uint8Array.from(key ?? []);\n if (key.length !== length) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_8__.CodeError(`Key must be a Uint8Array of length ${length}, got ${key.length}`, \"ERR_INVALID_KEY_TYPE\");\n }\n return key;\n} //# sourceMappingURL=ed25519-class.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvZWQyNTUxOS1jbGFzcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOEM7QUFDUTtBQUNFO0FBQ047QUFDYztBQUN6QjtBQUNBO0FBQ0U7QUFDUjtBQUMxQixNQUFNVTtJQUVUQyxZQUFZQyxHQUFHLENBQUU7UUFDYixJQUFJLENBQUNDLElBQUksR0FBR0MsVUFBVUYsS0FBS0wsd0RBQXNCO0lBQ3JEO0lBQ0FTLE9BQU9DLElBQUksRUFBRUMsR0FBRyxFQUFFO1FBQ2QsT0FBT1gsc0RBQW9CLENBQUMsSUFBSSxDQUFDTSxJQUFJLEVBQUVLLEtBQUtEO0lBQ2hEO0lBQ0FHLFVBQVU7UUFDTixPQUFPLElBQUksQ0FBQ1AsSUFBSTtJQUNwQjtJQUNBLElBQUlRLFFBQVE7UUFDUixPQUFPWiwrQ0FBYSxDQUFDYyxNQUFNLENBQUM7WUFDeEJDLE1BQU1mLDZDQUFXLENBQUNpQixPQUFPO1lBQ3pCQyxNQUFNLElBQUksQ0FBQ1AsT0FBTztRQUN0QixHQUFHUSxRQUFRO0lBQ2Y7SUFDQXhCLE9BQU9RLEdBQUcsRUFBRTtRQUNSLE9BQU9QLDBEQUFnQkEsQ0FBQyxJQUFJLENBQUNnQixLQUFLLEVBQUVULElBQUlTLEtBQUs7SUFDakQ7SUFDQVEsT0FBTztRQUNILE1BQU1DLElBQUkzQiw0REFBTUEsQ0FBQzRCLE1BQU0sQ0FBQyxJQUFJLENBQUNWLEtBQUs7UUFDbEMsSUFBSWYsbURBQVNBLENBQUN3QixJQUFJO1lBQ2QsT0FBT0EsRUFBRUUsSUFBSSxDQUFDLENBQUMsRUFBRVgsS0FBSyxFQUFFLEdBQUtBO1FBQ2pDO1FBQ0EsT0FBT1MsRUFBRVQsS0FBSztJQUNsQjtBQUNKO0FBQ08sTUFBTVk7SUFHVCx3REFBd0Q7SUFDeEQsdURBQXVEO0lBQ3ZEdEIsWUFBWUMsR0FBRyxFQUFFc0IsU0FBUyxD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LEVBQUVILFVBQVUsRUFBRXBCLFNBQVMsRUFBRSxHQUFHM0IsNERBQTBCLENBQUNrRDtJQUM3RCxPQUFPLElBQUl4QixrQkFBa0JxQixZQUFZcEI7QUFDN0M7QUFDQSxTQUFTcEIsVUFBVUYsR0FBRyxFQUFFcUMsTUFBTTtJQUMxQnJDLE1BQU0rQyxXQUFXQyxJQUFJLENBQUNoRCxPQUFPLEVBQUU7SUFDL0IsSUFBSUEsSUFBSXFDLE1BQU0sS0FBS0EsUUFBUTtRQUN2QixNQUFNLElBQUlqRCx3REFBU0EsQ0FBQyxDQUFDLG1DQUFtQyxFQUFFaUQsT0FBTyxNQUFNLEVBQUVyQyxJQUFJcUMsTUFBTSxDQUFDLENBQUMsRUFBRTtJQUMzRjtJQUNBLE9BQU9yQztBQUNYLEVBQ0EseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvZWQyNTUxOS1jbGFzcy5qcz9lOTAyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZGVFcnJvciB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmltcG9ydCB7IGJhc2U1OGJ0YyB9IGZyb20gJ211bHRpZm9ybWF0cy9iYXNlcy9iYXNlNTgnO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICdtdWx0aWZvcm1hdHMvaGFzaGVzL2lkZW50aXR5JztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ211bHRpZm9ybWF0cy9oYXNoZXMvc2hhMic7XG5pbXBvcnQgeyBlcXVhbHMgYXMgdWludDhBcnJheUVxdWFscyB9IGZyb20gJ3VpbnQ4YXJyYXlzL2VxdWFscyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICcuL2VkMjU1MTkuanMnO1xuaW1wb3J0IHsgZXhwb3J0ZXIgfSBmcm9tICcuL2V4cG9ydGVyLmpzJztcbmltcG9ydCAqIGFzIHBibSBmcm9tICcuL2tleXMuanMnO1xuZXhwb3J0IGNsYXNzIEVkMjU1MTlQdWJsaWNLZXkge1xuICAgIF9rZXk7XG4gICAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgICAgIHRoaXMuX2tleSA9IGVuc3VyZUtleShrZXksIGNyeXB0by5wdWJsaWNLZXlMZW5ndGgpO1xuICAgIH1cbiAgICB2ZXJpZnkoZGF0YSwgc2lnKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8uaGFzaEFuZFZlcmlmeSh0aGlzLl9rZXksIHNpZywgZGF0YSk7XG4gICAgfVxuICAgIG1hcnNoYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIGdldCBieXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHBibS5QdWJsaWNLZXkuZW5jb2RlKHtcbiAgICAgICAgICAgIFR5cGU6IHBibS5LZXlUeXBlLkVkMjU1MTksXG4gICAgICAgICAgICBEYXRhOiB0aGlzLm1hcnNoYWwoKVxuICAgICAgICB9KS5zdWJhcnJheSgpO1xuICAgIH1cbiAgICBlcXVhbHMoa2V5KSB7XG4gICAgICAgIHJldHVybiB1aW50OEFycmF5RXF1YWxzKHRoaXMuYnl0ZXMsIGtleS5ieXRlcyk7XG4gICAgfVxuICAgIGhhc2goKSB7XG4gICAgICAgIGNvbnN0IHAgPSBzaGEyNTYuZGlnZXN0KHRoaXMuYnl0ZXMpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHApKSB7XG4gICAgICAgICAgICByZXR1cm4gcC50aGVuKCh7IGJ5dGVzIH0pID0+IGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5ieXRlcztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgRWQyNTUxOVByaXZhdGVLZXkge1xuICAgIF9rZXk7XG4gICAgX3B1YmxpY0tleTtcbiAgICAvLyBrZXkgICAgICAgLSA2NCBieXRlIFVpbnQ4QXJyYXkgY29udGFpbmluZyBwcml2YXRlIGtleVxuICAgIC8vIHB1YmxpY0tleSAtIDMyIGJ5dGUgVWludDhBcnJheSBjb250YWluaW5nIHB1YmxpYyBrZXlcbiAgICBjb25zdHJ1Y3RvcihrZXksIHB1YmxpY0tleSkge1xuICAgICAgICB0aGlzLl9rZXkgPSBlbnN1cmVLZXkoa2V5LCBjcnlwdG8ucHJpdmF0ZUtleUxlbmd0aCk7XG4gICAgICAgIHRoaXMuX3B1YmxpY0tleSA9IGVuc3VyZUtleShwdWJsaWNLZXksIGNyeXB0by5wdWJsaWNLZXlMZW5ndGgpO1xuICAgIH1cbiAgICBzaWduKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5oYXNoQW5kU2lnbih0aGlzLl9rZXksIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBnZXQgcHVibGljKCkge1xuICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQdWJsaWNLZXkodGhpcy5fcHVibGljS2V5KTtcbiAgICB9XG4gICAgbWFyc2hhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleTtcbiAgICB9XG4gICAgZ2V0IGJ5dGVzKCkge1xuICAgICAgICByZXR1cm4gcGJtLlByaXZhdGVLZXkuZW5jb2RlKHtcbiAgICAgICAgICAgIFR5cGU6IHBibS5LZXlUeXBlLkVkMjU1MTksXG4gICAgICAgICAgICBEYXRhOiB0aGlzLm1hcnNoYWwoKVxuICAgICAgICB9KS5zdWJhcnJheSgpO1xuICAgIH1cbiAgICBlcXVhbHMoa2V5KSB7XG4gICAgICAgIHJldHVybiB1aW50OEFycmF5RXF1YWxzKHRoaXMuYnl0ZXMsIGtleS5ieXRlcyk7XG4gICAgfVxuICAgIGFzeW5jIGhhc2goKSB7XG4gICAgICAgIGNvbnN0IHAgPSBzaGEyNTYuZGlnZXN0KHRoaXMuYnl0ZXMpO1xuICAgICAgICBsZXQgYnl0ZXM7XG4gICAgICAgIGlmIChpc1Byb21pc2UocCkpIHtcbiAgICAgICAgICAgICh7IGJ5dGVzIH0gPSBhd2FpdCBwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVzID0gcC5ieXRlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIElEIG9mIHRoZSBrZXkuXG4gICAgICpcbiAgICAgKiBUaGUga2V5IGlkIGlzIHRoZSBiYXNlNTggZW5jb2Rpbmcgb2YgdGhlIGlkZW50aXR5IG11bHRpaGFzaCBjb250YWluaW5nIGl0cyBwdWJsaWMga2V5LlxuICAgICAqIFRoZSBwdWJsaWMga2V5IGlzIGEgcHJvdG9idWYgZW5jb2RpbmcgY29udGFpbmluZyBhIHR5cGUgYW5kIHRoZSBERVIgZW5jb2RpbmdcbiAgICAgKiBvZiB0aGUgUEtDUyBTdWJqZWN0UHVibGljS2V5SW5mby5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAgICovXG4gICAgYXN5bmMgaWQoKSB7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0gaWRlbnRpdHkuZGlnZXN0KHRoaXMucHVibGljLmJ5dGVzKTtcbiAgICAgICAgcmV0dXJuIGJhc2U1OGJ0Yy5lbmNvZGUoZW5jb2RpbmcuYnl0ZXMpLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyB0aGUga2V5IGludG8gYSBwYXNzd29yZCBwcm90ZWN0ZWQgYGZvcm1hdGBcbiAgICAgKi9cbiAgICBhc3luYyBleHBvcnQocGFzc3dvcmQsIGZvcm1hdCA9ICdsaWJwMnAta2V5Jykge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbGlicDJwLWtleScpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRlcih0aGlzLmJ5dGVzLCBwYXNzd29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKGBleHBvcnQgZm9ybWF0ICcke2Zvcm1hdH0nIGlzIG5vdCBzdXBwb3J0ZWRgLCAnRVJSX0lOVkFMSURfRVhQT1JUX0ZPUk1BVCcpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbEVkMjU1MTlQcml2YXRlS2V5KGJ5dGVzKSB7XG4gICAgLy8gVHJ5IHRoZSBvbGQsIHJlZHVuZGFudCBwdWJsaWMga2V5IHZlcnNpb25cbiAgICBpZiAoYnl0ZXMubGVuZ3RoID4gY3J5cHRvLnByaXZhdGVLZXlMZW5ndGgpIHtcbiAgICAgICAgYnl0ZXMgPSBlbnN1cmVLZXkoYnl0ZXMsIGNyeXB0by5wcml2YXRlS2V5TGVuZ3RoICsgY3J5cHRvLnB1YmxpY0tleUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXlCeXRlcyA9IGJ5dGVzLnN1YmFycmF5KDAsIGNyeXB0by5wcml2YXRlS2V5TGVuZ3RoKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBieXRlcy5zdWJhcnJheShjcnlwdG8ucHJpdmF0ZUtleUxlbmd0aCwgYnl0ZXMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHJpdmF0ZUtleShwcml2YXRlS2V5Qnl0ZXMsIHB1YmxpY0tleUJ5dGVzKTtcbiAgICB9XG4gICAgYnl0ZXMgPSBlbnN1cmVLZXkoYnl0ZXMsIGNyeXB0by5wcml2YXRlS2V5TGVuZ3RoKTtcbiAgICBjb25zdCBwcml2YXRlS2V5Qnl0ZXMgPSBieXRlcy5zdWJhcnJheSgwLCBjcnlwdG8ucHJpdmF0ZUtleUxlbmd0aCk7XG4gICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBieXRlcy5zdWJhcnJheShjcnlwdG8ucHVibGljS2V5TGVuZ3RoKTtcbiAgICByZXR1cm4gbmV3IEVkMjU1MTlQcml2YXRlS2V5KHByaXZhdGVLZXlCeXRlcywgcHVibGljS2V5Qnl0ZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbEVkMjU1MTlQdWJsaWNLZXkoYnl0ZXMpIHtcbiAgICBieXRlcyA9IGVuc3VyZUtleShieXRlcywgY3J5cHRvLnB1YmxpY0tleUxlbmd0aCk7XG4gICAgcmV0dXJuIG5ldyBFZDI1NTE5UHVibGljS2V5KGJ5dGVzKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUtleVBhaXIoKSB7XG4gICAgY29uc3QgeyBwcml2YXRlS2V5LCBwdWJsaWNLZXkgfSA9IGNyeXB0by5nZW5lcmF0ZUtleSgpO1xuICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcHVibGljS2V5KTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUtleVBhaXJGcm9tU2VlZChzZWVkKSB7XG4gICAgY29uc3QgeyBwcml2YXRlS2V5LCBwdWJsaWNLZXkgfSA9IGNyeXB0by5nZW5lcmF0ZUtleUZyb21TZWVkKHNlZWQpO1xuICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcHVibGljS2V5KTtcbn1cbmZ1bmN0aW9uIGVuc3VyZUtleShrZXksIGxlbmd0aCkge1xuICAgIGtleSA9IFVpbnQ4QXJyYXkuZnJvbShrZXkgPz8gW10pO1xuICAgIGlmIChrZXkubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcihgS2V5IG11c3QgYmUgYSBVaW50OEFycmF5IG9mIGxlbmd0aCAke2xlbmd0aH0sIGdvdCAke2tleS5sZW5ndGh9YCwgJ0VSUl9JTlZBTElEX0tFWV9UWVBFJyk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lZDI1NTE5LWNsYXNzLmpzLm1hcCJdLCJuYW1lcyI6WyJDb2RlRXJyb3IiLCJiYXNlNThidGMiLCJpZGVudGl0eSIsInNoYTI1NiIsImVxdWFscyIsInVpbnQ4QXJyYXlFcXVhbHMiLCJpc1Byb21pc2UiLCJjcnlwdG8iLCJleHBvcnRlciIsInBibSIsIkVkMjU1MTlQdWJsaWNLZXkiLCJjb25zdHJ1Y3RvciIsImtleSIsIl9rZXkiLCJlbnN1cmVLZXkiLCJwdWJsaWNLZXlMZW5ndGgiLCJ2ZXJpZnkiLCJkYXRhIiwic2lnIiwiaGFzaEFuZFZlcmlmeSIsIm1hcnNoYWwiLCJieXRlcyIsIlB1YmxpY0tleSIsImVuY29kZSIsIlR5cGUiLCJLZXlUeXBlIiwiRWQyNTUxOSIsIkRhdGEiLCJzdWJhcnJheSIsImhhc2giLCJwIiwiZGlnZXN0IiwidGhlbiIsIkVkMjU1MTlQcml2YXRlS2V5IiwicHVibGljS2V5IiwicHJpdmF0ZUtleUxlbmd0aCIsIl9wdWJsaWNLZXkiLCJzaWduIiwibWVzc2FnZSIsImhhc2hBbmRTaWduIiwicHVibGljIiwiUHJpdmF0ZUtleSIsImlkIiwiZW5jb2RpbmciLCJzdWJzdHJpbmciLCJleHBvcnQiLCJwYXNzd29yZCIsImZvcm1hdCIsInVubWFyc2hhbEVkMjU1MTlQcml2YXRlS2V5IiwibGVuZ3RoIiwicHJpdmF0ZUtleUJ5dGVzIiwicHVibGljS2V5Qnl0ZXMiLCJ1bm1hcnNoYWxFZDI1NTE5UHVibGljS2V5IiwiZ2VuZXJhdGVLZXlQYWlyIiwicHJpdmF0ZUtleSIsImdlbmVyYXRlS2V5IiwiZ2VuZXJhdGVLZXlQYWlyRnJvbVNlZWQiLCJzZWVkIiwiZ2VuZXJhdGVLZXlGcm9tU2VlZCIsIlVpbnQ4QXJyYXkiLCJmcm9tIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519-class.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519.js":
/*!***************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519.js ***!
\***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ generateKey: () => (/* binding */ generateKey),\n/* harmony export */ generateKeyFromSeed: () => (/* binding */ generateKeyFromSeed),\n/* harmony export */ hashAndSign: () => (/* binding */ hashAndSign),\n/* harmony export */ hashAndVerify: () => (/* binding */ hashAndVerify),\n/* harmony export */ privateKeyLength: () => (/* binding */ PRIVATE_KEY_BYTE_LENGTH),\n/* harmony export */ publicKeyLength: () => (/* binding */ PUBLIC_KEY_BYTE_LENGTH)\n/* harmony export */ });\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays/concat */ \"(ssr)/./node_modules/uint8arrays/dist/src/concat.node.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n\n\n\n\nconst keypair = crypto__WEBPACK_IMPORTED_MODULE_0__.generateKeyPairSync;\nconst PUBLIC_KEY_BYTE_LENGTH = 32;\nconst PRIVATE_KEY_BYTE_LENGTH = 64; // private key is actually 32 bytes but for historical reasons we concat private and public keys\nconst KEYS_BYTE_LENGTH = 32;\nconst SIGNATURE_BYTE_LENGTH = 64;\n\n\nfunction derivePublicKey(privateKey) {\n const keyObject = crypto__WEBPACK_IMPORTED_MODULE_0__.createPrivateKey({\n format: \"jwk\",\n key: {\n crv: \"Ed25519\",\n x: \"\",\n d: (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__.toString)(privateKey, \"base64url\"),\n kty: \"OKP\"\n }\n });\n const jwk = keyObject.export({\n format: \"jwk\"\n });\n if (jwk.x == null || jwk.x === \"\") {\n throw new Error(\"Could not export JWK public key\");\n }\n return (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__.fromString)(jwk.x, \"base64url\");\n}\nfunction generateKey() {\n const key = keypair(\"ed25519\", {\n publicKeyEncoding: {\n type: \"spki\",\n format: \"jwk\"\n },\n privateKeyEncoding: {\n type: \"pkcs8\",\n format: \"jwk\"\n }\n });\n // @ts-expect-error node types are missing jwk as a format\n const privateKeyRaw = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__.fromString)(key.privateKey.d, \"base64url\");\n // @ts-expect-error node types are missing jwk as a format\n const publicKeyRaw = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_2__.fromString)(key.privateKey.x, \"base64url\");\n return {\n privateKey: (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__.concat)([\n privateKeyRaw,\n publicKeyRaw\n ], privateKeyRaw.byteLength + publicKeyRaw.byteLength),\n publicKey: publicKeyRaw\n };\n}\n/**\n * Generate keypair from a 32 byte uint8array\n */ function generateKeyFromSeed(seed) {\n if (seed.length !== KEYS_BYTE_LENGTH) {\n throw new TypeError('\"seed\" must be 32 bytes in length.');\n } else if (!(seed instanceof Uint8Array)) {\n throw new TypeError('\"seed\" must be a node.js Buffer, or Uint8Array.');\n }\n // based on node forges algorithm, the seed is used directly as private key\n const publicKeyRaw = derivePublicKey(seed);\n return {\n privateKey: (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_1__.concat)([\n seed,\n publicKeyRaw\n ], seed.byteLength + publicKeyRaw.byteLength),\n publicKey: publicKeyRaw\n };\n}\nfunction hashAndSign(key, msg) {\n if (!(key instanceof Uint8Array)) {\n throw new TypeError('\"key\" must be a node.js Buffer, or Uint8Array.');\n }\n let privateKey;\n let publicKey;\n if (key.byteLength === PRIVATE_KEY_BYTE_LENGTH) {\n privateKey = key.subarray(0, 32);\n publicKey = key.subarray(32);\n } else if (key.byteLength === KEYS_BYTE_LENGTH) {\n privateKey = key.subarray(0, 32);\n publicKey = derivePublicKey(privateKey);\n } else {\n throw new TypeError('\"key\" must be 64 or 32 bytes in length.');\n }\n const obj = crypto__WEBPACK_IMPORTED_MODULE_0__.createPrivateKey({\n format: \"jwk\",\n key: {\n crv: \"Ed25519\",\n d: (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__.toString)(privateKey, \"base64url\"),\n x: (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__.toString)(publicKey, \"base64url\"),\n kty: \"OKP\"\n }\n });\n return crypto__WEBPACK_IMPORTED_MODULE_0__.sign(null, msg instanceof Uint8Array ? msg : msg.subarray(), obj);\n}\nfunction hashAndVerify(key, sig, msg) {\n if (key.byteLength !== PUBLIC_KEY_BYTE_LENGTH) {\n throw new TypeError('\"key\" must be 32 bytes in length.');\n } else if (!(key instanceof Uint8Array)) {\n throw new TypeError('\"key\" must be a node.js Buffer, or Uint8Array.');\n }\n if (sig.byteLength !== SIGNATURE_BYTE_LENGTH) {\n throw new TypeError('\"sig\" must be 64 bytes in length.');\n } else if (!(sig instanceof Uint8Array)) {\n throw new TypeError('\"sig\" must be a node.js Buffer, or Uint8Array.');\n }\n const obj = crypto__WEBPACK_IMPORTED_MODULE_0__.createPublicKey({\n format: \"jwk\",\n key: {\n crv: \"Ed25519\",\n x: (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_3__.toString)(key, \"base64url\"),\n kty: \"OKP\"\n }\n });\n return crypto__WEBPACK_IMPORTED_MODULE_0__.verify(null, msg instanceof Uint8Array ? msg : msg.subarray(), obj, sig);\n} //# sourceMappingURL=ed25519.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvZWQyNTUxOS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQTRCO0FBQ29DO0FBQ2E7QUFDTjtBQUN2RSxNQUFNTyxVQUFVUCx1REFBMEI7QUFDMUMsTUFBTVMseUJBQXlCO0FBQy9CLE1BQU1DLDBCQUEwQixJQUFJLGdHQUFnRztBQUNwSSxNQUFNQyxtQkFBbUI7QUFDekIsTUFBTUMsd0JBQXdCO0FBQ3VCO0FBQ0U7QUFDdkQsU0FBU0csZ0JBQWdCQyxVQUFVO0lBQy9CLE1BQU1DLFlBQVlqQixvREFBdUIsQ0FBQztRQUN0Q21CLFFBQVE7UUFDUkMsS0FBSztZQUNEQyxLQUFLO1lBQ0xDLEdBQUc7WUFDSEMsR0FBR2pCLCtEQUFrQkEsQ0FBQ1UsWUFBWTtZQUNsQ1EsS0FBSztRQUNUO0lBQ0o7SUFDQSxNQUFNQyxNQUFNUixVQUFVUyxNQUFNLENBQUM7UUFDekJQLFFBQVE7SUFDWjtJQUNBLElBQUlNLElBQUlILENBQUMsSUFBSSxRQUFRRyxJQUFJSCxDQUFDLEtBQUssSUFBSTtRQUMvQixNQUFNLElBQUlLLE1BQU07SUFDcEI7SUFDQSxPQUFPdkIsbUVBQW9CQSxDQUFDcUIsSUFBSUgsQ0FBQyxFQUFFO0FBQ3ZDO0FBQ08sU0FBU007SUFDWixNQUFNUixNQUFNYixRQUFRLFdBQVc7UUFDM0JzQixtQkFBbUI7WUFBRUMsTUFBTTtZQUFRWCxRQUFRO1FBQU07UUFDakRZLG9CQUFvQjtZQUFFRCxNQUFNO1lBQVNYLFFBQVE7UUFBTTtJQUN2RDtJQUNBLDBEQUEwRDtJQUMxRCxNQUFNYSxnQkFBZ0I1QixtRUFBb0JBLENBQUNnQixJQUFJSixVQUFVLENBQUNPLENBQUMsRUFBRTtJQUM3RCwwREFBMEQ7SUFDMUQsTUFBTVUsZUFBZTdCLG1FQUFvQkEsQ0FBQ2dCLElBQUlKLFVBQVUsQ0FBQ00sQ0FBQyxFQUFFO0lBQzVELE9BQU87UUFDSE4sWUFBWWQsMERBQWdCQSxDQUFDO1lBQUM4QjtZQUFlQztTQUFhLEVBQUVELGNBQWNFLFVBQVUsR0FBR0QsYUFBYUMsVUFBVTtRQUM5R0MsV0FBV0Y7SUFDZjtBQUNKO0FBQ0E7O0NBRUMsR0FDTSxTQUFTRyxvQkFBb0JDLElBQUk7SUFDcEMsSUFBSUEsS0FBS0MsTUFBTSxLQUFLM0Isa0JBQWtCO1FBQ2xDLE1BQU0sSUFBSTRCLFVBQVU7SUFDeEIsT0FDSyxJQUFJLENBQUVGLENBQUFBLGdCQUFnQkcsVUFBUyxHQUFJO1FBQ3BDLE1BQU0sSUFBSUQsVUFBVTtJQUN4QjtJQUNBLDJFQUEyRTtJQUMzRSxNQUFNTixlQUFlbEIsZ0JBQWdCc0I7SUFDckMsT0FBTztRQUNIckIsWUFBWWQsMERBQWdCQSxDQUFDO1lBQUNtQztZQUFNSjtTQUFhLEVBQUVJLEtBQUtILFVBQVUsR0FBR0QsYUFBYUMsVUFBVTtRQUM1RkMsV0FBV0Y7SUFDZjtBQUNKO0FBQ08sU0FBU1EsWUFBWXJCLEdBQUcsRUFBRXNCLEdBQUc7SUFDaEMsSUFBSSxDQUFFdEIsQ0FBQUEsZUFBZW9CLFVBQVMsR0FBSTtRQUM5QixNQUFNLElBQUlELFVBQVU7SUFDeEI7SUFDQSxJQUFJdkI7SUFDSixJQUFJbUI7SUFDSixJQUFJZixJQUFJYyxVQUFVLEtBQUt4Qix5QkFBeUI7UUFDNUNNLGFBQWFJLElBQUl1QixRQUFRLENBQUMsR0FBRztRQUM3QlIsWUFBWWYsSUFBSXVCLFFBQVEsQ0FBQztJQUM3QixPQUNLLElBQUl2QixJQUFJYyxVQUFVLEtBQUt2QixrQkFBa0I7UUFDMUNLLGFBQWFJLElBQUl1QixRQUFRLENBQUMsR0FBRztRQUM3QlIsWUFBWXBCLGdCQUFnQkM7SUFDaEMsT0FDSztRQUNELE1BQU0sSUFBSXVCLFVBQVU7SUFDeEI7SUFDQSxNQUFNSyxNQUFNNUMsb0RBQXVCLENBQUM7UUFDaENtQixRQUFRO1FBQ1JDLEtBQUs7WUFDREMsS0FBSztZQUNMRSxHQUFHakIsK0RBQWtCQSxDQUFDVSxZQUFZO1lBQ2xDTSxHQUFHaEIsK0RBQWtCQSxDQUFDNkIsV0FBVztZQUNqQ1gsS0FBSztRQUNUO0lBQ0o7SUFDQSxPQUFPeEIsd0NBQVcsQ0FBQyxNQUFNMEMsZUFBZUYsYUFBYUUsTUFBTUEsSUFBSUMsUUFBUSxJQUFJQztBQUMvRTtBQUNPLFNBQVNFLGNBQWMxQixHQUFHLEVBQUUyQixHQUFHLEVBQUVMLEdBQUc7SUFDdkMsSUFBSXRCLElBQUljLFVBQVUsS0FBS3pCLHdCQUF3QjtRQUMzQyxNQUFNLElBQUk4QixVQUFVO0lBQ3hCLE9BQ0ssSUFBSSxDQUFFbkIsQ0FBQUEsZUFBZW9CLFVBQVMsR0FBSTtRQUNuQyxNQUFNLElBQUlELFVBQVU7SUFDeEI7SUFDQSxJQUFJUSxJQUFJYixVQUFVLEtBQUt0Qix1QkFBdUI7UUFDMUMsTUFBTSxJQUFJMkIsVUFBVTtJQUN4QixPQUNLLElBQUksQ0FBRVEsQ0FBQUEsZUFBZVAsVUFBUyxHQUFJO1FBQ25DLE1BQU0sSUFBSUQsVUFBVTtJQUN4QjtJQUNBLE1BQU1LLE1BQU01QyxtREFBc0IsQ0FBQztRQUMvQm1CLFFBQVE7UUFDUkMsS0FBSztZQUNEQyxLQUFLO1lBQ0xDLEdBQUdoQiwrREFBa0JBLENBQUNjLEtBQUs7WUFDM0JJLEtBQUs7UUFDVDtJQUNKO0lBQ0EsT0FBT3hCLDBDQUFhLENBQUMsTUFBTTBDLGVBQWVGLGFBQWFFLE1BQU1BLElBQUlDLFFBQVEsSUFBSUMsS0FBS0c7QUFDdEYsRUFDQSxtQ0FBbUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9ub2RlX21vZHVsZXMvQGxpYnAycC9jcnlwdG8vZGlzdC9zcmMva2V5cy9lZDI1NTE5LmpzPzk3MTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgY29uY2F0IGFzIHVpbnQ4YXJyYXlDb25jYXQgfSBmcm9tICd1aW50OGFycmF5cy9jb25jYXQnO1xuaW1wb3J0IHsgZnJvbVN0cmluZyBhcyB1aW50OGFycmF5RnJvbVN0cmluZyB9IGZyb20gJ3VpbnQ4YXJyYXlzL2Zyb20tc3RyaW5nJztcbmltcG9ydCB7IHRvU3RyaW5nIGFzIHVpbnQ4YXJyYXlUb1N0cmluZyB9IGZyb20gJ3VpbnQ4YXJyYXlzL3RvLXN0cmluZyc7XG5jb25zdCBrZXlwYWlyID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmM7XG5jb25zdCBQVUJMSUNfS0VZX0JZVEVfTEVOR1RIID0gMzI7XG5jb25zdCBQUklWQVRFX0tFWV9CWVRFX0xFTkdUSCA9IDY0OyAvLyBwcml2YXRlIGtleSBpcyBhY3R1YWxseSAzMiBieXRlcyBidXQgZm9yIGhpc3RvcmljYWwgcmVhc29ucyB3ZSBjb25jYXQgcHJpdmF0ZSBhbmQgcHVibGljIGtleXNcbmNvbnN0IEtFWVNfQllURV9MRU5HVEggPSAzMjtcbmNvbnN0IFNJR05BVFVSRV9CWVRFX0xFTkdUSCA9IDY0O1xuZXhwb3J0IHsgUFVCTElDX0tFWV9CWVRFX0xFTkdUSCBhcyBwdWJsaWNLZXlMZW5ndGggfTtcbmV4cG9ydCB7IFBSSVZBVEVfS0VZX0JZVEVfTEVOR1RIIGFzIHByaXZhdGVLZXlMZW5ndGggfTtcbmZ1bmN0aW9uIGRlcml2ZVB1YmxpY0tleShwcml2YXRlS2V5KSB7XG4gICAgY29uc3Qga2V5T2JqZWN0ID0gY3J5cHRvLmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICBmb3JtYXQ6ICdqd2snLFxuICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgIGNydjogJ0VkMjU1MTknLFxuICAgICAgICAgICAgeDogJycsXG4gICAgICAgICAgICBkOiB1aW50OGFycmF5VG9TdHJpbmcocHJpdmF0ZUtleSwgJ2Jhc2U2NHVybCcpLFxuICAgICAgICAgICAga3R5OiAnT0tQJ1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgandrID0ga2V5T2JqZWN0LmV4cG9ydCh7XG4gICAgICAgIGZvcm1hdDogJ2p3aydcbiAgICB9KTtcbiAgICBpZiAoandrLnggPT0gbnVsbCB8fCBqd2sueCA9PT0gJycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZXhwb3J0IEpXSyBwdWJsaWMga2V5Jyk7XG4gICAgfVxuICAgIHJldHVybiB1aW50OGFycmF5RnJvbVN0cmluZyhqd2sueCwgJ2Jhc2U2NHVybCcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS2V5KCkge1xuICAgIGNvbnN0IGtleSA9IGtleXBhaXIoJ2VkMjU1MTknLCB7XG4gICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7IHR5cGU6ICdzcGtpJywgZm9ybWF0OiAnandrJyB9LFxuICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHsgdHlwZTogJ3BrY3M4JywgZm9ybWF0OiAnandrJyB9XG4gICAgfSk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBub2RlIHR5cGVzIGFyZSBtaXNzaW5nIGp3ayBhcyBhIGZvcm1hdFxuICAgIGNvbnN0IHByaXZhdGVLZXlSYXcgPSB1aW50OGFycmF5RnJvbVN0cmluZyhrZXkucHJpdmF0ZUtleS5kLCAnYmFzZTY0dXJsJyk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBub2RlIHR5cGVzIGFyZSBtaXNzaW5nIGp3ayBhcyBhIGZvcm1hdFxuICAgIGNvbnN0IHB1YmxpY0tleVJhdyA9IHVpbnQ4YXJyYXlGcm9tU3RyaW5nKGtleS5wcml2YXRlS2V5LngsICdiYXNlNjR1cmwnKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcml2YXRlS2V5OiB1aW50OGFycmF5Q29uY2F0KFtwcml2YXRlS2V5UmF3LCBwdWJsaWNLZXlSYXddLCBwcml2YXRlS2V5UmF3LmJ5dGVMZW5ndGggKyBwdWJsaWNLZXlSYXcuYnl0ZUxlbmd0aCksXG4gICAgICAgIHB1YmxpY0tleTogcHVibGljS2V5UmF3XG4gICAgfTtcbn1cbi8qKlxuICogR2VuZXJhdGUga2V5cGFpciBmcm9tIGEgMzIgYnl0ZSB1aW50OGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUtleUZyb21TZWVkKHNlZWQpIHtcbiAgICBpZiAoc2VlZC5sZW5ndGggIT09IEtFWVNfQllURV9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzZWVkXCIgbXVzdCBiZSAzMiBieXRlcyBpbiBsZW5ndGguJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCEoc2VlZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2VlZFwiIG11c3QgYmUgYSBub2RlLmpzIEJ1ZmZlciwgb3IgVWludDhBcnJheS4nKTtcbiAgICB9XG4gICAgLy8gYmFzZWQgb24gbm9kZSBmb3JnZXMgYWxnb3JpdGhtLCB0aGUgc2VlZCBpcyB1c2VkIGRpcmVjdGx5IGFzIHByaXZhdGUga2V5XG4gICAgY29uc3QgcHVibGljS2V5UmF3ID0gZGVyaXZlUHVibGljS2V5KHNlZWQpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHByaXZhdGVLZXk6IHVpbnQ4YXJyYXlDb25jYXQoW3NlZWQsIHB1YmxpY0tleVJhd10sIHNlZWQuYnl0ZUxlbmd0aCArIHB1YmxpY0tleVJhdy5ieXRlTGVuZ3RoKSxcbiAgICAgICAgcHVibGljS2V5OiBwdWJsaWNLZXlSYXdcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hBbmRTaWduKGtleSwgbXNnKSB7XG4gICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJrZXlcIiBtdXN0IGJlIGEgbm9kZS5qcyBCdWZmZXIsIG9yIFVpbnQ4QXJyYXkuJyk7XG4gICAgfVxuICAgIGxldCBwcml2YXRlS2V5O1xuICAgIGxldCBwdWJsaWNLZXk7XG4gICAgaWYgKGtleS5ieXRlTGVuZ3RoID09PSBQUklWQVRFX0tFWV9CWVRFX0xFTkdUSCkge1xuICAgICAgICBwcml2YXRlS2V5ID0ga2V5LnN1YmFycmF5KDAsIDMyKTtcbiAgICAgICAgcHVibGljS2V5ID0ga2V5LnN1YmFycmF5KDMyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoa2V5LmJ5dGVMZW5ndGggPT09IEtFWVNfQllURV9MRU5HVEgpIHtcbiAgICAgICAgcHJpdmF0ZUtleSA9IGtleS5zdWJhcnJheSgwLCAzMik7XG4gICAgICAgIHB1YmxpY0tleSA9IGRlcml2ZVB1YmxpY0tleShwcml2YXRlS2V5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wia2V5XCIgbXVzdCBiZSA2NCBvciAzMiBieXRlcyBpbiBsZW5ndGguJyk7XG4gICAgfVxuICAgIGNvbnN0IG9iaiA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHtcbiAgICAgICAgZm9ybWF0OiAnandrJyxcbiAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBjcnY6ICdFZDI1NTE5JyxcbiAgICAgICAgICAgIGQ6IHVpbnQ4YXJyYXlUb1N0cmluZyhwcml2YXRlS2V5LCAnYmFzZTY0dXJsJyksXG4gICAgICAgICAgICB4OiB1aW50OGFycmF5VG9TdHJpbmcocHVibGljS2V5LCAnYmFzZTY0dXJsJyksXG4gICAgICAgICAgICBrdHk6ICdPS1AnXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY3J5cHRvLnNpZ24obnVsbCwgbXNnIGluc3RhbmNlb2YgVWludDhBcnJheSA/IG1zZyA6IG1zZy5zdWJhcnJheSgpLCBvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hBbmRWZXJpZnkoa2V5LCBzaWcsIG1zZykge1xuICAgIGlmIChrZXkuYnl0ZUxlbmd0aCAhPT0gUFVCTElDX0tFWV9CWVRFX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImtleVwiIG11c3QgYmUgMzIgYnl0ZXMgaW4gbGVuZ3RoLicpO1xuICAgIH1cbiAgICBlbHNlIGlmICghKGtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wia2V5XCIgbXVzdCBiZSBhIG5vZGUuanMgQnVmZmVyLCBvciBVaW50OEFycmF5LicpO1xuICAgIH1cbiAgICBpZiAoc2lnLmJ5dGVMZW5ndGggIT09IFNJR05BVFVSRV9CWVRFX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpZ1wiIG11c3QgYmUgNjQgYnl0ZXMgaW4gbGVuZ3RoLicpO1xuICAgIH1cbiAgICBlbHNlIGlmICghKHNpZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2lnXCIgbXVzdCBiZSBhIG5vZGUuanMgQnVmZmVyLCBvciBVaW50OEFycmF5LicpO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgZm9ybWF0OiAnandrJyxcbiAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBjcnY6ICdFZDI1NTE5JyxcbiAgICAgICAgICAgIHg6IHVpbnQ4YXJyYXlUb1N0cmluZyhrZXksICdiYXNlNjR1cmwnKSxcbiAgICAgICAgICAgIGt0eTogJ09LUCdcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjcnlwdG8udmVyaWZ5KG51bGwsIG1zZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBtc2cgOiBtc2cuc3ViYXJyYXkoKSwgb2JqLCBzaWcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZWQyNTUxOS5qcy5tYXAiXSwibmFtZXMiOlsiY3J5cHRvIiwiY29uY2F0IiwidWludDhhcnJheUNvbmNhdCIsImZyb21TdHJpbmciLCJ1aW50OGFycmF5RnJvbVN0cmluZyIsInRvU3RyaW5nIiwidWludDhhcnJheVRvU3RyaW5nIiwia2V5cGFpciIsImdlbmVyYXRlS2V5UGFpclN5bmMiLCJQVUJMSUNfS0VZX0JZVEVfTEVOR1RIIiwiUFJJVkFURV9LRVlfQllURV9MRU5HVEgiLCJLRVlTX0JZVEVfTEVOR1RIIiwiU0lHTkFUVVJFX0JZVEVfTEVOR1RIIiwicHVibGljS2V5TGVuZ3RoIiwicHJpdmF0ZUtleUxlbmd0aCIsImRlcml2ZVB1YmxpY0tleSIsInByaXZhdGVLZXkiLCJrZXlPYmplY3QiLCJjcmVhdGVQcml2YXRlS2V5IiwiZm9ybWF0Iiwia2V5IiwiY3J2IiwieCIsImQiLCJrdHkiLCJqd2siLCJleHBvcnQiLCJFcnJvciIsImdlbmVyYXRlS2V5IiwicHVibGljS2V5RW5jb2RpbmciLCJ0eXBlIiwicHJpdmF0ZUtleUVuY29kaW5nIiwicHJpdmF0ZUtleVJhdyIsInB1YmxpY0tleVJhdyIsImJ5dGVMZW5ndGgiLCJwdWJsaWNLZXkiLCJnZW5lcmF0ZUtleUZyb21TZWVkIiwic2VlZCIsImxlbmd0aCIsIlR5cGVFcnJvciIsIlVpbnQ4QXJyYXkiLCJoYXNoQW5kU2lnbiIsIm1zZyIsInN1YmFycmF5Iiwib2JqIiwic2lnbiIsImhhc2hBbmRWZXJpZnkiLCJzaWciLCJjcmVhdGVQdWJsaWNLZXkiLCJ2ZXJpZnkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ephemeral-keys.js":
/*!**********************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ephemeral-keys.js ***!
\**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ecdh_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ecdh.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ecdh.js\");\n\n/**\n * Generates an ephemeral public key and returns a function that will compute\n * the shared secret key.\n *\n * Focuses only on ECDH now, but can be made more general in the future.\n */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_ecdh_js__WEBPACK_IMPORTED_MODULE_0__.generateEphmeralKeyPair); //# sourceMappingURL=ephemeral-keys.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvZXBoZW1lcmFsLWtleXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBb0Q7QUFDcEQ7Ozs7O0NBS0MsR0FDRCxpRUFBZUEsNkRBQXVCQSxFQUFDLENBQ3ZDLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL25vZGVfbW9kdWxlcy9AbGlicDJwL2NyeXB0by9kaXN0L3NyYy9rZXlzL2VwaGVtZXJhbC1rZXlzLmpzPzQ5NzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2VuZXJhdGVFcGhtZXJhbEtleVBhaXIgfSBmcm9tICcuL2VjZGguanMnO1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gZXBoZW1lcmFsIHB1YmxpYyBrZXkgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZVxuICogdGhlIHNoYXJlZCBzZWNyZXQga2V5LlxuICpcbiAqIEZvY3VzZXMgb25seSBvbiBFQ0RIIG5vdywgYnV0IGNhbiBiZSBtYWRlIG1vcmUgZ2VuZXJhbCBpbiB0aGUgZnV0dXJlLlxuICovXG5leHBvcnQgZGVmYXVsdCBnZW5lcmF0ZUVwaG1lcmFsS2V5UGFpcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVwaGVtZXJhbC1rZXlzLmpzLm1hcCJdLCJuYW1lcyI6WyJnZW5lcmF0ZUVwaG1lcmFsS2V5UGFpciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ephemeral-keys.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/exporter.js":
/*!****************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/exporter.js ***!
\****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ exporter: () => (/* binding */ exporter)\n/* harmony export */ });\n/* harmony import */ var multiformats_bases_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! multiformats/bases/base64 */ \"(ssr)/./node_modules/multiformats/dist/src/bases/base64.js\");\n/* harmony import */ var _ciphers_aes_gcm_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ciphers/aes-gcm.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/ciphers/aes-gcm.js\");\n\n\n/**\n * Exports the given PrivateKey as a base64 encoded string.\n * The PrivateKey is encrypted via a password derived PBKDF2 key\n * leveraging the aes-gcm cipher algorithm.\n */ async function exporter(privateKey, password) {\n const cipher = _ciphers_aes_gcm_js__WEBPACK_IMPORTED_MODULE_1__.create();\n const encryptedKey = await cipher.encrypt(privateKey, password);\n return multiformats_bases_base64__WEBPACK_IMPORTED_MODULE_0__.base64.encode(encryptedKey);\n} //# sourceMappingURL=exporter.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvZXhwb3J0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1EO0FBQ0Y7QUFDakQ7Ozs7Q0FJQyxHQUNNLGVBQWVFLFNBQVNDLFVBQVUsRUFBRUMsUUFBUTtJQUMvQyxNQUFNQyxTQUFTSix1REFBYztJQUM3QixNQUFNTSxlQUFlLE1BQU1GLE9BQU9HLE9BQU8sQ0FBQ0wsWUFBWUM7SUFDdEQsT0FBT0osNkRBQU1BLENBQUNTLE1BQU0sQ0FBQ0Y7QUFDekIsRUFDQSxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9ub2RlX21vZHVsZXMvQGxpYnAycC9jcnlwdG8vZGlzdC9zcmMva2V5cy9leHBvcnRlci5qcz81M2VmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJhc2U2NCB9IGZyb20gJ211bHRpZm9ybWF0cy9iYXNlcy9iYXNlNjQnO1xuaW1wb3J0ICogYXMgY2lwaGVycyBmcm9tICcuLi9jaXBoZXJzL2Flcy1nY20uanMnO1xuLyoqXG4gKiBFeHBvcnRzIHRoZSBnaXZlbiBQcml2YXRlS2V5IGFzIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlxuICogVGhlIFByaXZhdGVLZXkgaXMgZW5jcnlwdGVkIHZpYSBhIHBhc3N3b3JkIGRlcml2ZWQgUEJLREYyIGtleVxuICogbGV2ZXJhZ2luZyB0aGUgYWVzLWdjbSBjaXBoZXIgYWxnb3JpdGhtLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwb3J0ZXIocHJpdmF0ZUtleSwgcGFzc3dvcmQpIHtcbiAgICBjb25zdCBjaXBoZXIgPSBjaXBoZXJzLmNyZWF0ZSgpO1xuICAgIGNvbnN0IGVuY3J5cHRlZEtleSA9IGF3YWl0IGNpcGhlci5lbmNyeXB0KHByaXZhdGVLZXksIHBhc3N3b3JkKTtcbiAgICByZXR1cm4gYmFzZTY0LmVuY29kZShlbmNyeXB0ZWRLZXkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwb3J0ZXIuanMubWFwIl0sIm5hbWVzIjpbImJhc2U2NCIsImNpcGhlcnMiLCJleHBvcnRlciIsInByaXZhdGVLZXkiLCJwYXNzd29yZCIsImNpcGhlciIsImNyZWF0ZSIsImVuY3J5cHRlZEtleSIsImVuY3J5cHQiLCJlbmNvZGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/exporter.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/importer.js":
/*!****************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/importer.js ***!
\****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ importer: () => (/* binding */ importer)\n/* harmony export */ });\n/* harmony import */ var multiformats_bases_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! multiformats/bases/base64 */ \"(ssr)/./node_modules/multiformats/dist/src/bases/base64.js\");\n/* harmony import */ var _ciphers_aes_gcm_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ciphers/aes-gcm.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/ciphers/aes-gcm.js\");\n\n\n/**\n * Attempts to decrypt a base64 encoded PrivateKey string\n * with the given password. The privateKey must have been exported\n * using the same password and underlying cipher (aes-gcm)\n */ async function importer(privateKey, password) {\n const encryptedKey = multiformats_bases_base64__WEBPACK_IMPORTED_MODULE_0__.base64.decode(privateKey);\n const cipher = _ciphers_aes_gcm_js__WEBPACK_IMPORTED_MODULE_1__.create();\n return cipher.decrypt(encryptedKey, password);\n} //# sourceMappingURL=importer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvaW1wb3J0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1EO0FBQ0Y7QUFDakQ7Ozs7Q0FJQyxHQUNNLGVBQWVFLFNBQVNDLFVBQVUsRUFBRUMsUUFBUTtJQUMvQyxNQUFNQyxlQUFlTCw2REFBTUEsQ0FBQ00sTUFBTSxDQUFDSDtJQUNuQyxNQUFNSSxTQUFTTix1REFBYztJQUM3QixPQUFPTSxPQUFPRSxPQUFPLENBQUNKLGNBQWNEO0FBQ3hDLEVBQ0Esb0NBQW9DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvaW1wb3J0ZXIuanM/YWVjYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiYXNlNjQgfSBmcm9tICdtdWx0aWZvcm1hdHMvYmFzZXMvYmFzZTY0JztcbmltcG9ydCAqIGFzIGNpcGhlcnMgZnJvbSAnLi4vY2lwaGVycy9hZXMtZ2NtLmpzJztcbi8qKlxuICogQXR0ZW1wdHMgdG8gZGVjcnlwdCBhIGJhc2U2NCBlbmNvZGVkIFByaXZhdGVLZXkgc3RyaW5nXG4gKiB3aXRoIHRoZSBnaXZlbiBwYXNzd29yZC4gVGhlIHByaXZhdGVLZXkgbXVzdCBoYXZlIGJlZW4gZXhwb3J0ZWRcbiAqIHVzaW5nIHRoZSBzYW1lIHBhc3N3b3JkIGFuZCB1bmRlcmx5aW5nIGNpcGhlciAoYWVzLWdjbSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydGVyKHByaXZhdGVLZXksIHBhc3N3b3JkKSB7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gYmFzZTY0LmRlY29kZShwcml2YXRlS2V5KTtcbiAgICBjb25zdCBjaXBoZXIgPSBjaXBoZXJzLmNyZWF0ZSgpO1xuICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdChlbmNyeXB0ZWRLZXksIHBhc3N3b3JkKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltcG9ydGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJiYXNlNjQiLCJjaXBoZXJzIiwiaW1wb3J0ZXIiLCJwcml2YXRlS2V5IiwicGFzc3dvcmQiLCJlbmNyeXB0ZWRLZXkiLCJkZWNvZGUiLCJjaXBoZXIiLCJjcmVhdGUiLCJkZWNyeXB0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/importer.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/index.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/index.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ generateEphemeralKeyPair: () => (/* reexport safe */ _ephemeral_keys_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ generateKeyPair: () => (/* binding */ generateKeyPair),\n/* harmony export */ generateKeyPairFromSeed: () => (/* binding */ generateKeyPairFromSeed),\n/* harmony export */ importKey: () => (/* binding */ importKey),\n/* harmony export */ keyStretcher: () => (/* reexport safe */ _key_stretcher_js__WEBPACK_IMPORTED_MODULE_7__.keyStretcher),\n/* harmony export */ keysPBM: () => (/* reexport module object */ _keys_js__WEBPACK_IMPORTED_MODULE_8__),\n/* harmony export */ marshalPrivateKey: () => (/* binding */ marshalPrivateKey),\n/* harmony export */ marshalPublicKey: () => (/* binding */ marshalPublicKey),\n/* harmony export */ supportedKeys: () => (/* binding */ supportedKeys),\n/* harmony export */ unmarshalPrivateKey: () => (/* binding */ unmarshalPrivateKey),\n/* harmony export */ unmarshalPublicKey: () => (/* binding */ unmarshalPublicKey)\n/* harmony export */ });\n/* harmony import */ var node_forge_lib_asn1_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node-forge/lib/asn1.js */ \"(ssr)/./node_modules/node-forge/lib/asn1.js\");\n/* harmony import */ var node_forge_lib_pbe_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node-forge/lib/pbe.js */ \"(ssr)/./node_modules/node-forge/lib/pbe.js\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node-forge/lib/forge.js */ \"(ssr)/./node_modules/node-forge/lib/forge.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n/* harmony import */ var _ed25519_class_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ed25519-class.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ed25519-class.js\");\n/* harmony import */ var _ephemeral_keys_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ephemeral-keys.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/ephemeral-keys.js\");\n/* harmony import */ var _importer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./importer.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/importer.js\");\n/* harmony import */ var _key_stretcher_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./key-stretcher.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/key-stretcher.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./keys.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/keys.js\");\n/* harmony import */ var _rsa_class_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./rsa-class.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-class.js\");\n/* harmony import */ var _secp256k1_class_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./secp256k1-class.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1-class.js\");\n/**\n * @packageDocumentation\n *\n * **Supported Key Types**\n *\n * The {@link generateKeyPair}, {@link marshalPublicKey}, and {@link marshalPrivateKey} functions accept a string `type` argument.\n *\n * Currently the `'RSA'`, `'ed25519'`, and `secp256k1` types are supported, although ed25519 and secp256k1 keys support only signing and verification of messages.\n *\n * For encryption / decryption support, RSA keys should be used.\n */ \n\n\n// @ts-expect-error types are missing\n\n\n\n\n\n\n\n\n\n\n\n\nconst supportedKeys = {\n rsa: _rsa_class_js__WEBPACK_IMPORTED_MODULE_9__,\n ed25519: _ed25519_class_js__WEBPACK_IMPORTED_MODULE_4__,\n secp256k1: _secp256k1_class_js__WEBPACK_IMPORTED_MODULE_10__\n};\nfunction unsupportedKey(type) {\n const supported = Object.keys(supportedKeys).join(\" / \");\n return new _libp2p_interface__WEBPACK_IMPORTED_MODULE_11__.CodeError(`invalid or unsupported key type ${type}. Must be ${supported}`, \"ERR_UNSUPPORTED_KEY_TYPE\");\n}\nfunction typeToKey(type) {\n type = type.toLowerCase();\n if (type === \"rsa\" || type === \"ed25519\" || type === \"secp256k1\") {\n return supportedKeys[type];\n }\n throw unsupportedKey(type);\n}\n/**\n * Generates a keypair of the given type and bitsize\n *\n * @param type\n * @param bits - Minimum of 1024\n */ async function generateKeyPair(type, bits) {\n return typeToKey(type).generateKeyPair(bits ?? 2048);\n}\n/**\n * Generates a keypair of the given type and bitsize.\n *\n * Seed is a 32 byte uint8array\n */ async function generateKeyPairFromSeed(type, seed, bits) {\n if (type.toLowerCase() !== \"ed25519\") {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_11__.CodeError(\"Seed key derivation is unimplemented for RSA or secp256k1\", \"ERR_UNSUPPORTED_KEY_DERIVATION_TYPE\");\n }\n return _ed25519_class_js__WEBPACK_IMPORTED_MODULE_4__.generateKeyPairFromSeed(seed);\n}\n/**\n * Converts a protobuf serialized public key into its representative object\n */ function unmarshalPublicKey(buf) {\n const decoded = _keys_js__WEBPACK_IMPORTED_MODULE_8__.PublicKey.decode(buf);\n const data = decoded.Data ?? new Uint8Array();\n switch(decoded.Type){\n case _keys_js__WEBPACK_IMPORTED_MODULE_8__.KeyType.RSA:\n return supportedKeys.rsa.unmarshalRsaPublicKey(data);\n case _keys_js__WEBPACK_IMPORTED_MODULE_8__.KeyType.Ed25519:\n return supportedKeys.ed25519.unmarshalEd25519PublicKey(data);\n case _keys_js__WEBPACK_IMPORTED_MODULE_8__.KeyType.Secp256k1:\n return supportedKeys.secp256k1.unmarshalSecp256k1PublicKey(data);\n default:\n throw unsupportedKey(decoded.Type ?? \"unknown\");\n }\n}\n/**\n * Converts a public key object into a protobuf serialized public key\n */ function marshalPublicKey(key, type) {\n type = (type ?? \"rsa\").toLowerCase();\n typeToKey(type); // check type\n return key.bytes;\n}\n/**\n * Converts a protobuf serialized private key into its representative object\n */ async function unmarshalPrivateKey(buf) {\n const decoded = _keys_js__WEBPACK_IMPORTED_MODULE_8__.PrivateKey.decode(buf);\n const data = decoded.Data ?? new Uint8Array();\n switch(decoded.Type){\n case _keys_js__WEBPACK_IMPORTED_MODULE_8__.KeyType.RSA:\n return supportedKeys.rsa.unmarshalRsaPrivateKey(data);\n case _keys_js__WEBPACK_IMPORTED_MODULE_8__.KeyType.Ed25519:\n return supportedKeys.ed25519.unmarshalEd25519PrivateKey(data);\n case _keys_js__WEBPACK_IMPORTED_MODULE_8__.KeyType.Secp256k1:\n return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(data);\n default:\n throw unsupportedKey(decoded.Type ?? \"RSA\");\n }\n}\n/**\n * Converts a private key object into a protobuf serialized private key\n */ function marshalPrivateKey(key, type) {\n type = (type ?? \"rsa\").toLowerCase();\n typeToKey(type); // check type\n return key.bytes;\n}\n/**\n * Converts an exported private key into its representative object.\n *\n * Supported formats are 'pem' (RSA only) and 'libp2p-key'.\n */ async function importKey(encryptedKey, password) {\n try {\n const key = await (0,_importer_js__WEBPACK_IMPORTED_MODULE_6__.importer)(encryptedKey, password);\n return await unmarshalPrivateKey(key);\n } catch (_) {\n // Ignore and try the old pem decrypt\n }\n // Only rsa supports pem right now\n const key = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.pki.decryptRsaPrivateKey(encryptedKey, password);\n if (key === null) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_11__.CodeError(\"Cannot read the key, most likely the password is wrong or not a RSA key\", \"ERR_CANNOT_DECRYPT_PEM\");\n }\n let der = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.asn1.toDer(node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.pki.privateKeyToAsn1(key));\n der = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_3__.fromString)(der.getBytes(), \"ascii\");\n return supportedKeys.rsa.unmarshalRsaPrivateKey(der);\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztDQVVDLEdBQytCO0FBQ0Q7QUFDZTtBQUM5QyxxQ0FBcUM7QUFDTztBQUNpQztBQUMvQjtBQUNhO0FBQ2xCO0FBQ1M7QUFDYjtBQUNDO0FBQ1k7QUFDMUI7QUFDWTtBQUNqQjtBQUNaLE1BQU1XLGdCQUFnQjtJQUN6QkMsS0FBS0gsMENBQUdBO0lBQ1JJLFNBQVNULDhDQUFPQTtJQUNoQlUsV0FBV0osaURBQVNBO0FBQ3hCLEVBQUU7QUFDRixTQUFTSyxlQUFlQyxJQUFJO0lBQ3hCLE1BQU1DLFlBQVlDLE9BQU9DLElBQUksQ0FBQ1IsZUFBZVMsSUFBSSxDQUFDO0lBQ2xELE9BQU8sSUFBSXBCLHlEQUFTQSxDQUFDLENBQUMsZ0NBQWdDLEVBQUVnQixLQUFLLFVBQVUsRUFBRUMsVUFBVSxDQUFDLEVBQUU7QUFDMUY7QUFDQSxTQUFTSSxVQUFVTCxJQUFJO0lBQ25CQSxPQUFPQSxLQUFLTSxXQUFXO0lBQ3ZCLElBQUlOLFNBQVMsU0FBU0EsU0FBUyxhQUFhQSxTQUFTLGFBQWE7UUFDOUQsT0FBT0wsYUFBYSxDQUFDSyxLQUFLO0lBQzlCO0lBQ0EsTUFBTUQsZUFBZUM7QUFDekI7QUFDQTs7Ozs7Q0FLQyxHQUNNLGVBQWVPLGdCQUFnQlAsSUFBSSxFQUFFUSxJQUFJO0lBQzVDLE9BQU9ILFVBQVVMLE1BQU1PLGVBQWUsQ0FBQ0MsUUFBUTtBQUNuRDtBQUNBOzs7O0NBSUMsR0FDTSxlQUFlQyx3QkFBd0JULElBQUksRUFBRVUsSUFBSSxFQUFFRixJQUFJO0lBQzFELElBQUlSLEtBQUtNLFdBQVcsT0FBTyxXQUFXO1FBQ2xDLE1BQU0sSUFBSXRCLHlEQUFTQSxDQUFDLDZEQUE2RDtJQUNyRjtJQUNBLE9BQU9JLHNFQUErQixDQUFDc0I7QUFDM0M7QUFDQTs7Q0FFQyxHQUNNLFNBQVNDLG1CQUFtQkMsR0FBRztJQUNsQyxNQUFNQyxVQUFVckIsK0NBQWlCLENBQUN1QixNQUFNLENBQUNIO0lBQ3pDLE1BQU1JLE9BQU9ILFFBQVFJLElBQUksSUFBSSxJQUFJQztJQUNqQyxPQUFRTCxRQUFRTSxJQUFJO1FBQ2hCLEtBQUszQiw2Q0FBZSxDQUFDQyxHQUFHO1lBQ3BCLE9BQU9FLGNBQWNDLEdBQUcsQ0FBQ3lCLHFCQUFxQixDQUFDTDtRQUNuRCxLQUFLeEIsNkNBQWUsQ0FBQ0osT0FBTztZQUN4QixPQUFPTyxjQUFjRSxPQUFPLENBQUN5Qix5QkFBeUIsQ0FBQ047UUFDM0QsS0FBS3hCLDZDQUFlLENBQUNFLFNBQVM7WUFDMUIsT0FBT0MsY0FBY0csU0FBUyxDQUFDeUIsMkJBQTJCLENBQUNQO1FBQy9EO1lBQ0ksTUFBTWpCLGVBQWVjLFFBQVFNLElBQUksSUFBSTtJQUM3QztBQUNKO0FBQ0E7O0NBRUMsR0FDTSxTQUFTSyxpQkFBaUJDLEdBQUcsRUFBRXpCLElBQUk7SUFDdENBLE9BQU8sQ0FBQ0EsUUFBUSxLQUFJLEVBQUdNLFdBQVc7SUFDbENELFVBQVVMLE9BQU8sYUFBYTtJQUM5QixPQUFPeUIsSUFBSUMsS0FBSztBQUNwQjtBQUNBOztDQUVDLEdBQ00sZUFBZUMsb0JBQW9CZixHQUFHO0lBQ3pDLE1BQU1DLFVBQVVyQixnREFBa0IsQ0FBQ3VCLE1BQU0sQ0FBQ0g7SUFDMUMsTUFBTUksT0FBT0gsUUFBUUksSUFBSSxJQUFJLElBQUlDO0lBQ2pDLE9BQVFMLFFBQVFNLElBQUk7UUFDaEIsS0FBSzNCLDZDQUFlLENBQUNDLEdBQUc7WUFDcEIsT0FBT0UsY0FBY0MsR0FBRyxDQUFDaUMsc0JBQXNCLENBQUNiO1FBQ3BELEtBQUt4Qiw2Q0FBZSxDQUFDSixPQUFPO1lBQ3hCLE9BQU9PLGNBQWNFLE9BQU8sQ0FBQ2lDLDBCQUEwQixDQUFDZDtRQUM1RCxLQUFLeEIsNkNBQWUsQ0FBQ0UsU0FBUztZQUMxQixPQUFPQyxjQUFjRyxTQUFTLENBQUNpQyw0QkFBNEIsQ0FBQ2Y7UUFDaEU7WUFDSSxNQUFNakIsZUFBZWMsUUFBUU0sSUFBSSxJQUFJO0lBQzdDO0FBQ0o7QUFDQTs7Q0FFQyxHQUNNLFNBQVNhLGtCQUFrQlAsR0FBRyxFQUFFekIsSUFBSTtJQUN2Q0EsT0FBTyxDQUFDQSxRQUFRLEtBQUksRUFBR00sV0FBVztJQUNsQ0QsVUFBVUwsT0FBTyxhQUFhO0lBQzlCLE9BQU95QixJQUFJQyxLQUFLO0FBQ3BCO0FBQ0E7Ozs7Q0FJQyxHQUNNLGVBQWVPLFVBQVVDLFlBQVksRUFBRUMsUUFBUTtJQUNsRCxJQUFJO1FBQ0EsTUFBTVYsTUFBTSxNQUFNbkMsc0RBQVFBLENBQUM0QyxjQUFjQztRQUN6QyxPQUFPLE1BQU1SLG9CQUFvQkY7SUFDckMsRUFDQSxPQUFPVyxHQUFHO0lBQ04scUNBQXFDO0lBQ3pDO0lBQ0Esa0NBQWtDO0lBQ2xDLE1BQU1YLE1BQU14Qyx3REFBUyxDQUFDcUQsb0JBQW9CLENBQUNKLGNBQWNDO0lBQ3pELElBQUlWLFFBQVEsTUFBTTtRQUNkLE1BQU0sSUFBSXpDLHlEQUFTQSxDQUFDLDJFQUEyRTtJQUNuRztJQUNBLElBQUl1RCxNQUFNdEQseURBQVUsQ0FBQ3dELEtBQUssQ0FBQ3hELHdEQUFTLENBQUN5RCxnQkFBZ0IsQ0FBQ2pCO0lBQ3REYyxNQUFNcEQsbUVBQW9CQSxDQUFDb0QsSUFBSUksUUFBUSxJQUFJO0lBQzNDLE9BQU9oRCxjQUFjQyxHQUFHLENBQUNpQyxzQkFBc0IsQ0FBQ1U7QUFDcEQsRUFDQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9ub2RlX21vZHVsZXMvQGxpYnAycC9jcnlwdG8vZGlzdC9zcmMva2V5cy9pbmRleC5qcz9kNWI0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogKipTdXBwb3J0ZWQgS2V5IFR5cGVzKipcbiAqXG4gKiBUaGUge0BsaW5rIGdlbmVyYXRlS2V5UGFpcn0sIHtAbGluayBtYXJzaGFsUHVibGljS2V5fSwgYW5kIHtAbGluayBtYXJzaGFsUHJpdmF0ZUtleX0gZnVuY3Rpb25zIGFjY2VwdCBhIHN0cmluZyBgdHlwZWAgYXJndW1lbnQuXG4gKlxuICogQ3VycmVudGx5IHRoZSBgJ1JTQSdgLCBgJ2VkMjU1MTknYCwgYW5kIGBzZWNwMjU2azFgIHR5cGVzIGFyZSBzdXBwb3J0ZWQsIGFsdGhvdWdoIGVkMjU1MTkgYW5kIHNlY3AyNTZrMSBrZXlzIHN1cHBvcnQgb25seSBzaWduaW5nIGFuZCB2ZXJpZmljYXRpb24gb2YgbWVzc2FnZXMuXG4gKlxuICogRm9yIGVuY3J5cHRpb24gLyBkZWNyeXB0aW9uIHN1cHBvcnQsIFJTQSBrZXlzIHNob3VsZCBiZSB1c2VkLlxuICovXG5pbXBvcnQgJ25vZGUtZm9yZ2UvbGliL2FzbjEuanMnO1xuaW1wb3J0ICdub2RlLWZvcmdlL2xpYi9wYmUuanMnO1xuaW1wb3J0IHsgQ29kZUVycm9yIH0gZnJvbSAnQGxpYnAycC9pbnRlcmZhY2UnO1xuLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlcyBhcmUgbWlzc2luZ1xuaW1wb3J0IGZvcmdlIGZyb20gJ25vZGUtZm9yZ2UvbGliL2ZvcmdlLmpzJztcbmltcG9ydCB7IGZyb21TdHJpbmcgYXMgdWludDhBcnJheUZyb21TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy9mcm9tLXN0cmluZyc7XG5pbXBvcnQgKiBhcyBFZDI1NTE5IGZyb20gJy4vZWQyNTUxOS1jbGFzcy5qcyc7XG5pbXBvcnQgZ2VuZXJhdGVFcGhlbWVyYWxLZXlQYWlyIGZyb20gJy4vZXBoZW1lcmFsLWtleXMuanMnO1xuaW1wb3J0IHsgaW1wb3J0ZXIgfSBmcm9tICcuL2ltcG9ydGVyLmpzJztcbmltcG9ydCB7IGtleVN0cmV0Y2hlciB9IGZyb20gJy4va2V5LXN0cmV0Y2hlci5qcyc7XG5pbXBvcnQgKiBhcyBrZXlzUEJNIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgKiBhcyBSU0EgZnJvbSAnLi9yc2EtY2xhc3MuanMnO1xuaW1wb3J0ICogYXMgU2VjcDI1NmsxIGZyb20gJy4vc2VjcDI1NmsxLWNsYXNzLmpzJztcbmV4cG9ydCB7IGtleVN0cmV0Y2hlciB9O1xuZXhwb3J0IHsgZ2VuZXJhdGVFcGhlbWVyYWxLZXlQYWlyIH07XG5leHBvcnQgeyBrZXlzUEJNIH07XG5leHBvcnQgY29uc3Qgc3VwcG9ydGVkS2V5cyA9IHtcbiAgICByc2E6IFJTQSxcbiAgICBlZDI1NTE5OiBFZDI1NTE5LFxuICAgIHNlY3AyNTZrMTogU2VjcDI1NmsxXG59O1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWRLZXkodHlwZSkge1xuICAgIGNvbnN0IHN1cHBvcnRlZCA9IE9iamVjdC5rZXlzKHN1cHBvcnRlZEtleXMpLmpvaW4oJyAvICcpO1xuICAgIHJldHVybiBuZXcgQ29kZUVycm9yKGBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkIGtleSB0eXBlICR7dHlwZX0uIE11c3QgYmUgJHtzdXBwb3J0ZWR9YCwgJ0VSUl9VTlNVUFBPUlRFRF9LRVlfVFlQRScpO1xufVxuZnVuY3Rpb24gdHlwZVRvS2V5KHR5cGUpIHtcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlID09PSAncnNhJyB8fCB0eXBlID09PSAnZWQyNTUxOScgfHwgdHlwZSA9PT0gJ3NlY3AyNTZrMScpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZEtleXNbdHlwZV07XG4gICAgfVxuICAgIHRocm93IHVuc3VwcG9ydGVkS2V5KHR5cGUpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBrZXlwYWlyIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBiaXRzaXplXG4gKlxuICogQHBhcmFtIHR5cGVcbiAqIEBwYXJhbSBiaXRzIC0gIE1pbmltdW0gb2YgMTAyNFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVLZXlQYWlyKHR5cGUsIGJpdHMpIHtcbiAgICByZXR1cm4gdHlwZVRvS2V5KHR5cGUpLmdlbmVyYXRlS2V5UGFpcihiaXRzID8/IDIwNDgpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBrZXlwYWlyIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBiaXRzaXplLlxuICpcbiAqIFNlZWQgaXMgYSAzMiBieXRlIHVpbnQ4YXJyYXlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlS2V5UGFpckZyb21TZWVkKHR5cGUsIHNlZWQsIGJpdHMpIHtcbiAgICBpZiAodHlwZS50b0xvd2VyQ2FzZSgpICE9PSAnZWQyNTUxOScpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignU2VlZCBrZXkgZGVyaXZhdGlvbiBpcyB1bmltcGxlbWVudGVkIGZvciBSU0Egb3Igc2VjcDI1NmsxJywgJ0VSUl9VTlNVUFBPUlRFRF9LRVlfREVSSVZBVElPTl9UWVBFJyk7XG4gICAgfVxuICAgIHJldHVybiBFZDI1NTE5LmdlbmVyYXRlS2V5UGFpckZyb21TZWVkKHNlZWQpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIHByb3RvYnVmIHNlcmlhbGl6ZWQgcHVibGljIGtleSBpbnRvIGl0cyByZXByZXNlbnRhdGl2ZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbFB1YmxpY0tleShidWYpIHtcbiAgICBjb25zdCBkZWNvZGVkID0ga2V5c1BCTS5QdWJsaWNLZXkuZGVjb2RlKGJ1Zik7XG4gICAgY29uc3QgZGF0YSA9IGRlY29kZWQuRGF0YSA/PyBuZXcgVWludDhBcnJheSgpO1xuICAgIHN3aXRjaCAoZGVjb2RlZC5UeXBlKSB7XG4gICAgICAgIGNhc2Uga2V5c1BCTS5LZXlUeXBlLlJTQTpcbiAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRLZXlzLnJzYS51bm1hcnNoYWxSc2FQdWJsaWNLZXkoZGF0YSk7XG4gICAgICAgIGNhc2Uga2V5c1BCTS5LZXlUeXBlLkVkMjU1MTk6XG4gICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkS2V5cy5lZDI1NTE5LnVubWFyc2hhbEVkMjU1MTlQdWJsaWNLZXkoZGF0YSk7XG4gICAgICAgIGNhc2Uga2V5c1BCTS5LZXlUeXBlLlNlY3AyNTZrMTpcbiAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRLZXlzLnNlY3AyNTZrMS51bm1hcnNoYWxTZWNwMjU2azFQdWJsaWNLZXkoZGF0YSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyB1bnN1cHBvcnRlZEtleShkZWNvZGVkLlR5cGUgPz8gJ3Vua25vd24nKTtcbiAgICB9XG59XG4vKipcbiAqIENvbnZlcnRzIGEgcHVibGljIGtleSBvYmplY3QgaW50byBhIHByb3RvYnVmIHNlcmlhbGl6ZWQgcHVibGljIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFyc2hhbFB1YmxpY0tleShrZXksIHR5cGUpIHtcbiAgICB0eXBlID0gKHR5cGUgPz8gJ3JzYScpLnRvTG93ZXJDYXNlKCk7XG4gICAgdHlwZVRvS2V5KHR5cGUpOyAvLyBjaGVjayB0eXBlXG4gICAgcmV0dXJuIGtleS5ieXRlcztcbn1cbi8qKlxuICogQ29udmVydHMgYSBwcm90b2J1ZiBzZXJpYWxpemVkIHByaXZhdGUga2V5IGludG8gaXRzIHJlcHJlc2VudGF0aXZlIG9iamVjdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5tYXJzaGFsUHJpdmF0ZUtleShidWYpIHtcbiAgICBjb25zdCBkZWNvZGVkID0ga2V5c1BCTS5Qcml2YXRlS2V5LmRlY29kZShidWYpO1xuICAgIGNvbnN0IGRhdGEgPSBkZWNvZGVkLkRhdGEgPz8gbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICBzd2l0Y2ggKGRlY29kZWQuVHlwZSkge1xuICAgICAgICBjYXNlIGtleXNQQk0uS2V5VHlwZS5SU0E6XG4gICAgICAgICAgICByZXR1cm4gc3VwcG9ydGVkS2V5cy5yc2EudW5tYXJzaGFsUnNhUHJpdmF0ZUtleShkYXRhKTtcbiAgICAgICAgY2FzZSBrZXlzUEJNLktleVR5cGUuRWQyNTUxOTpcbiAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRLZXlzLmVkMjU1MTkudW5tYXJzaGFsRWQyNTUxOVByaXZhdGVLZXkoZGF0YSk7XG4gICAgICAgIGNhc2Uga2V5c1BCTS5LZXlUeXBlLlNlY3AyNTZrMTpcbiAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRLZXlzLnNlY3AyNTZrMS51bm1hcnNoYWxTZWNwMjU2azFQcml2YXRlS2V5KGRhdGEpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgdW5zdXBwb3J0ZWRLZXkoZGVjb2RlZC5UeXBlID8/ICdSU0EnKTtcbiAgICB9XG59XG4vKipcbiAqIENvbnZlcnRzIGEgcHJpdmF0ZSBrZXkgb2JqZWN0IGludG8gYSBwcm90b2J1ZiBzZXJpYWxpemVkIHByaXZhdGUga2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJzaGFsUHJpdmF0ZUtleShrZXksIHR5cGUpIHtcbiAgICB0eXBlID0gKHR5cGUgPz8gJ3JzYScpLnRvTG93ZXJDYXNlKCk7XG4gICAgdHlwZVRvS2V5KHR5cGUpOyAvLyBjaGVjayB0eXBlXG4gICAgcmV0dXJuIGtleS5ieXRlcztcbn1cbi8qKlxuICogQ29udmVydHMgYW4gZXhwb3J0ZWQgcHJpdmF0ZSBrZXkgaW50byBpdHMgcmVwcmVzZW50YXRpdmUgb2JqZWN0LlxuICpcbiAqIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAncGVtJyAoUlNBIG9ubHkpIGFuZCAnbGlicDJwLWtleScuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBvcnRLZXkoZW5jcnlwdGVkS2V5LCBwYXNzd29yZCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IGltcG9ydGVyKGVuY3J5cHRlZEtleSwgcGFzc3dvcmQpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdW5tYXJzaGFsUHJpdmF0ZUtleShrZXkpO1xuICAgIH1cbiAgICBjYXRjaCAoXykge1xuICAgICAgICAvLyBJZ25vcmUgYW5kIHRyeSB0aGUgb2xkIHBlbSBkZWNyeXB0XG4gICAgfVxuICAgIC8vIE9ubHkgcnNhIHN1cHBvcnRzIHBlbSByaWdodCBub3dcbiAgICBjb25zdCBrZXkgPSBmb3JnZS5wa2kuZGVjcnlwdFJzYVByaXZhdGVLZXkoZW5jcnlwdGVkS2V5LCBwYXNzd29yZCk7XG4gICAgaWYgKGtleSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdDYW5ub3QgcmVhZCB0aGUga2V5LCBtb3N0IGxpa2VseSB0aGUgcGFzc3dvcmQgaXMgd3Jvbmcgb3Igbm90IGEgUlNBIGtleScsICdFUlJfQ0FOTk9UX0RFQ1JZUFRfUEVNJyk7XG4gICAgfVxuICAgIGxldCBkZXIgPSBmb3JnZS5hc24xLnRvRGVyKGZvcmdlLnBraS5wcml2YXRlS2V5VG9Bc24xKGtleSkpO1xuICAgIGRlciA9IHVpbnQ4QXJyYXlGcm9tU3RyaW5nKGRlci5nZXRCeXRlcygpLCAnYXNjaWknKTtcbiAgICByZXR1cm4gc3VwcG9ydGVkS2V5cy5yc2EudW5tYXJzaGFsUnNhUHJpdmF0ZUtleShkZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIkNvZGVFcnJvciIsImZvcmdlIiwiZnJvbVN0cmluZyIsInVpbnQ4QXJyYXlGcm9tU3RyaW5nIiwiRWQyNTUxOSIsImdlbmVyYXRlRXBoZW1lcmFsS2V5UGFpciIsImltcG9ydGVyIiwia2V5U3RyZXRjaGVyIiwia2V5c1BCTSIsIlJTQSIsIlNlY3AyNTZrMSIsInN1cHBvcnRlZEtleXMiLCJyc2EiLCJlZDI1NTE5Iiwic2VjcDI1NmsxIiwidW5zdXBwb3J0ZWRLZXkiLCJ0eXBlIiwic3VwcG9ydGVkIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJ0eXBlVG9LZXkiLCJ0b0xvd2VyQ2FzZSIsImdlbmVyYXRlS2V5UGFpciIsImJpdHMiLCJnZW5lcmF0ZUtleVBhaXJGcm9tU2VlZCIsInNlZWQiLCJ1bm1hcnNoYWxQdWJsaWNLZXkiLCJidWYiLCJkZWNvZGVkIiwiUHVibGljS2V5IiwiZGVjb2RlIiwiZGF0YSIsIkRhdGEiLCJVaW50OEFycmF5IiwiVHlwZSIsIktleVR5cGUiLCJ1bm1hcnNoYWxSc2FQdWJsaWNLZXkiLCJ1bm1hcnNoYWxFZDI1NTE5UHVibGljS2V5IiwidW5tYXJzaGFsU2VjcDI1NmsxUHVibGljS2V5IiwibWFyc2hhbFB1YmxpY0tleSIsImtleSIsImJ5dGVzIiwidW5tYXJzaGFsUHJpdmF0ZUtleSIsIlByaXZhdGVLZXkiLCJ1bm1hcnNoYWxSc2FQcml2YXRlS2V5IiwidW5tYXJzaGFsRWQyNTUxOVByaXZhdGVLZXkiLCJ1bm1hcnNoYWxTZWNwMjU2azFQcml2YXRlS2V5IiwibWFyc2hhbFByaXZhdGVLZXkiLCJpbXBvcnRLZXkiLCJlbmNyeXB0ZWRLZXkiLCJwYXNzd29yZCIsIl8iLCJwa2kiLCJkZWNyeXB0UnNhUHJpdmF0ZUtleSIsImRlciIsImFzbjEiLCJ0b0RlciIsInByaXZhdGVLZXlUb0FzbjEiLCJnZXRCeXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/key-stretcher.js":
/*!*********************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/key-stretcher.js ***!
\*********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ keyStretcher: () => (/* binding */ keyStretcher)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var uint8arrays_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uint8arrays/concat */ \"(ssr)/./node_modules/uint8arrays/dist/src/concat.node.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n/* harmony import */ var _hmac_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../hmac/index.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/hmac/index.js\");\n\n\n\n\nconst cipherMap = {\n \"AES-128\": {\n ivSize: 16,\n keySize: 16\n },\n \"AES-256\": {\n ivSize: 16,\n keySize: 32\n },\n Blowfish: {\n ivSize: 8,\n keySize: 32\n }\n};\n/**\n * Generates a set of keys for each party by stretching the shared key.\n * (myIV, theirIV, myCipherKey, theirCipherKey, myMACKey, theirMACKey)\n */ async function keyStretcher(cipherType, hash, secret) {\n const cipher = cipherMap[cipherType];\n if (cipher == null) {\n const allowed = Object.keys(cipherMap).join(\" / \");\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_3__.CodeError(`unknown cipher type '${cipherType}'. Must be ${allowed}`, \"ERR_INVALID_CIPHER_TYPE\");\n }\n if (hash == null) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_3__.CodeError(\"missing hash type\", \"ERR_MISSING_HASH_TYPE\");\n }\n const cipherKeySize = cipher.keySize;\n const ivSize = cipher.ivSize;\n const hmacKeySize = 20;\n const seed = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_1__.fromString)(\"key expansion\");\n const resultLength = 2 * (ivSize + cipherKeySize + hmacKeySize);\n const m = await _hmac_index_js__WEBPACK_IMPORTED_MODULE_2__.create(hash, secret);\n let a = await m.digest(seed);\n const result = [];\n let j = 0;\n while(j < resultLength){\n const b = await m.digest((0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_0__.concat)([\n a,\n seed\n ]));\n let todo = b.length;\n if (j + todo > resultLength) {\n todo = resultLength - j;\n }\n result.push(b);\n j += todo;\n a = await m.digest(a);\n }\n const half = resultLength / 2;\n const resultBuffer = (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_0__.concat)(result);\n const r1 = resultBuffer.subarray(0, half);\n const r2 = resultBuffer.subarray(half, resultLength);\n const createKey = (res)=>({\n iv: res.subarray(0, ivSize),\n cipherKey: res.subarray(ivSize, ivSize + cipherKeySize),\n macKey: res.subarray(ivSize + cipherKeySize)\n });\n return {\n k1: createKey(r1),\n k2: createKey(r2)\n };\n} //# sourceMappingURL=key-stretcher.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMva2V5LXN0cmV0Y2hlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE4QztBQUNrQjtBQUNhO0FBQ3BDO0FBQ3pDLE1BQU1NLFlBQVk7SUFDZCxXQUFXO1FBQ1BDLFFBQVE7UUFDUkMsU0FBUztJQUNiO0lBQ0EsV0FBVztRQUNQRCxRQUFRO1FBQ1JDLFNBQVM7SUFDYjtJQUNBQyxVQUFVO1FBQ05GLFFBQVE7UUFDUkMsU0FBUztJQUNiO0FBQ0o7QUFDQTs7O0NBR0MsR0FDTSxlQUFlRSxhQUFhQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsTUFBTTtJQUN2RCxNQUFNQyxTQUFTUixTQUFTLENBQUNLLFdBQVc7SUFDcEMsSUFBSUcsVUFBVSxNQUFNO1FBQ2hCLE1BQU1DLFVBQVVDLE9BQU9DLElBQUksQ0FBQ1gsV0FBV1ksSUFBSSxDQUFDO1FBQzVDLE1BQU0sSUFBSWxCLHdEQUFTQSxDQUFDLENBQUMscUJBQXFCLEVBQUVXLFdBQVcsV0FBVyxFQUFFSSxRQUFRLENBQUMsRUFBRTtJQUNuRjtJQUNBLElBQUlILFFBQVEsTUFBTTtRQUNkLE1BQU0sSUFBSVosd0RBQVNBLENBQUMscUJBQXFCO0lBQzdDO0lBQ0EsTUFBTW1CLGdCQUFnQkwsT0FBT04sT0FBTztJQUNwQyxNQUFNRCxTQUFTTyxPQUFPUCxNQUFNO0lBQzVCLE1BQU1hLGNBQWM7SUFDcEIsTUFBTUMsT0FBT2pCLG1FQUFvQkEsQ0FBQztJQUNsQyxNQUFNa0IsZUFBZSxJQUFLZixDQUFBQSxTQUFTWSxnQkFBZ0JDLFdBQVU7SUFDN0QsTUFBTUcsSUFBSSxNQUFNbEIsa0RBQVcsQ0FBQ08sTUFBTUM7SUFDbEMsSUFBSVksSUFBSSxNQUFNRixFQUFFRyxNQUFNLENBQUNMO0lBQ3ZCLE1BQU1NLFNBQVMsRUFBRTtJQUNqQixJQUFJQyxJQUFJO0lBQ1IsTUFBT0EsSUFBSU4sYUFBYztRQUNyQixNQUFNTyxJQUFJLE1BQU1OLEVBQUVHLE1BQU0sQ0FBQ3hCLDBEQUFnQkEsQ0FBQztZQUFDdUI7WUFBR0o7U0FBSztRQUNuRCxJQUFJUyxPQUFPRCxFQUFFRSxNQUFNO1FBQ25CLElBQUlILElBQUlFLE9BQU9SLGNBQWM7WUFDekJRLE9BQU9SLGVBQWVNO1FBQzFCO1FBQ0FELE9BQU9LLElBQUksQ0FBQ0g7UUFDWkQsS0FBS0U7UUFDTEwsSUFBSSxNQUFNRixFQUFFRyxNQUFNLENBQUNEO0lBQ3ZCO0lBQ0EsTUFBTVEsT0FBT1gsZUFBZTtJQUM1QixNQUFNWSxlQUFlaEMsMERBQWdCQSxDQUFDeUI7SUFDdEMsTUFBTVEsS0FBS0QsYUFBYUUsUUFBUSxDQUFDLEdBQUdIO0lBQ3BDLE1BQU1JLEtBQUtILGFBQWFFLFFBQVEsQ0FBQ0gsTUFBTVg7SUFDdkMsTUFBTWdCLFlBQVksQ0FBQ0MsTUFBUztZQUN4QkMsSUFBSUQsSUFBSUgsUUFBUSxDQUFDLEdBQUc3QjtZQUNwQmtDLFdBQVdGLElBQUlILFFBQVEsQ0FBQzdCLFFBQVFBLFNBQVNZO1lBQ3pDdUIsUUFBUUgsSUFBSUgsUUFBUSxDQUFDN0IsU0FBU1k7UUFDbEM7SUFDQSxPQUFPO1FBQ0h3QixJQUFJTCxVQUFVSDtRQUNkUyxJQUFJTixVQUFVRDtJQUNsQjtBQUNKLEVBQ0EseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMva2V5LXN0cmV0Y2hlci5qcz8zMmI4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZGVFcnJvciB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmltcG9ydCB7IGNvbmNhdCBhcyB1aW50OEFycmF5Q29uY2F0IH0gZnJvbSAndWludDhhcnJheXMvY29uY2F0JztcbmltcG9ydCB7IGZyb21TdHJpbmcgYXMgdWludDhBcnJheUZyb21TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy9mcm9tLXN0cmluZyc7XG5pbXBvcnQgKiBhcyBobWFjIGZyb20gJy4uL2htYWMvaW5kZXguanMnO1xuY29uc3QgY2lwaGVyTWFwID0ge1xuICAgICdBRVMtMTI4Jzoge1xuICAgICAgICBpdlNpemU6IDE2LFxuICAgICAgICBrZXlTaXplOiAxNlxuICAgIH0sXG4gICAgJ0FFUy0yNTYnOiB7XG4gICAgICAgIGl2U2l6ZTogMTYsXG4gICAgICAgIGtleVNpemU6IDMyXG4gICAgfSxcbiAgICBCbG93ZmlzaDoge1xuICAgICAgICBpdlNpemU6IDgsXG4gICAgICAgIGtleVNpemU6IDMyXG4gICAgfVxufTtcbi8qKlxuICogR2VuZXJhdGVzIGEgc2V0IG9mIGtleXMgZm9yIGVhY2ggcGFydHkgYnkgc3RyZXRjaGluZyB0aGUgc2hhcmVkIGtleS5cbiAqIChteUlWLCB0aGVpcklWLCBteUNpcGhlcktleSwgdGhlaXJDaXBoZXJLZXksIG15TUFDS2V5LCB0aGVpck1BQ0tleSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtleVN0cmV0Y2hlcihjaXBoZXJUeXBlLCBoYXNoLCBzZWNyZXQpIHtcbiAgICBjb25zdCBjaXBoZXIgPSBjaXBoZXJNYXBbY2lwaGVyVHlwZV07XG4gICAgaWYgKGNpcGhlciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGFsbG93ZWQgPSBPYmplY3Qua2V5cyhjaXBoZXJNYXApLmpvaW4oJyAvICcpO1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKGB1bmtub3duIGNpcGhlciB0eXBlICcke2NpcGhlclR5cGV9Jy4gTXVzdCBiZSAke2FsbG93ZWR9YCwgJ0VSUl9JTlZBTElEX0NJUEhFUl9UWVBFJyk7XG4gICAgfVxuICAgIGlmIChoYXNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignbWlzc2luZyBoYXNoIHR5cGUnLCAnRVJSX01JU1NJTkdfSEFTSF9UWVBFJyk7XG4gICAgfVxuICAgIGNvbnN0IGNpcGhlcktleVNpemUgPSBjaXBoZXIua2V5U2l6ZTtcbiAgICBjb25zdCBpdlNpemUgPSBjaXBoZXIuaXZTaXplO1xuICAgIGNvbnN0IGhtYWNLZXlTaXplID0gMjA7XG4gICAgY29uc3Qgc2VlZCA9IHVpbnQ4QXJyYXlGcm9tU3RyaW5nKCdrZXkgZXhwYW5zaW9uJyk7XG4gICAgY29uc3QgcmVzdWx0TGVuZ3RoID0gMiAqIChpdlNpemUgKyBjaXBoZXJLZXlTaXplICsgaG1hY0tleVNpemUpO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBobWFjLmNyZWF0ZShoYXNoLCBzZWNyZXQpO1xuICAgIGxldCBhID0gYXdhaXQgbS5kaWdlc3Qoc2VlZCk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IGogPSAwO1xuICAgIHdoaWxlIChqIDwgcmVzdWx0TGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGIgPSBhd2FpdCBtLmRpZ2VzdCh1aW50OEFycmF5Q29uY2F0KFthLCBzZWVkXSkpO1xuICAgICAgICBsZXQgdG9kbyA9IGIubGVuZ3RoO1xuICAgICAgICBpZiAoaiArIHRvZG8gPiByZXN1bHRMZW5ndGgpIHtcbiAgICAgICAgICAgIHRvZG8gPSByZXN1bHRMZW5ndGggLSBqO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKGIpO1xuICAgICAgICBqICs9IHRvZG87XG4gICAgICAgIGEgPSBhd2FpdCBtLmRpZ2VzdChhKTtcbiAgICB9XG4gICAgY29uc3QgaGFsZiA9IHJlc3VsdExlbmd0aCAvIDI7XG4gICAgY29uc3QgcmVzdWx0QnVmZmVyID0gdWludDhBcnJheUNvbmNhdChyZXN1bHQpO1xuICAgIGNvbnN0IHIxID0gcmVzdWx0QnVmZmVyLnN1YmFycmF5KDAsIGhhbGYpO1xuICAgIGNvbnN0IHIyID0gcmVzdWx0QnVmZmVyLnN1YmFycmF5KGhhbGYsIHJlc3VsdExlbmd0aCk7XG4gICAgY29uc3QgY3JlYXRlS2V5ID0gKHJlcykgPT4gKHtcbiAgICAgICAgaXY6IHJlcy5zdWJhcnJheSgwLCBpdlNpemUpLFxuICAgICAgICBjaXBoZXJLZXk6IHJlcy5zdWJhcnJheShpdlNpemUsIGl2U2l6ZSArIGNpcGhlcktleVNpemUpLFxuICAgICAgICBtYWNLZXk6IHJlcy5zdWJhcnJheShpdlNpemUgKyBjaXBoZXJLZXlTaXplKVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGsxOiBjcmVhdGVLZXkocjEpLFxuICAgICAgICBrMjogY3JlYXRlS2V5KHIyKVxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1rZXktc3RyZXRjaGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJDb2RlRXJyb3IiLCJjb25jYXQiLCJ1aW50OEFycmF5Q29uY2F0IiwiZnJvbVN0cmluZyIsInVpbnQ4QXJyYXlGcm9tU3RyaW5nIiwiaG1hYyIsImNpcGhlck1hcCIsIml2U2l6ZSIsImtleVNpemUiLCJCbG93ZmlzaCIsImtleVN0cmV0Y2hlciIsImNpcGhlclR5cGUiLCJoYXNoIiwic2VjcmV0IiwiY2lwaGVyIiwiYWxsb3dlZCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwiY2lwaGVyS2V5U2l6ZSIsImhtYWNLZXlTaXplIiwic2VlZCIsInJlc3VsdExlbmd0aCIsIm0iLCJjcmVhdGUiLCJhIiwiZGlnZXN0IiwicmVzdWx0IiwiaiIsImIiLCJ0b2RvIiwibGVuZ3RoIiwicHVzaCIsImhhbGYiLCJyZXN1bHRCdWZmZXIiLCJyMSIsInN1YmFycmF5IiwicjIiLCJjcmVhdGVLZXkiLCJyZXMiLCJpdiIsImNpcGhlcktleSIsIm1hY0tleSIsImsxIiwiazIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/key-stretcher.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/keys.js":
/*!************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/keys.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeyType: () => (/* binding */ KeyType),\n/* harmony export */ PrivateKey: () => (/* binding */ PrivateKey),\n/* harmony export */ PublicKey: () => (/* binding */ PublicKey)\n/* harmony export */ });\n/* harmony import */ var protons_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! protons-runtime */ \"(ssr)/./node_modules/protons-runtime/dist/src/index.js\");\n/* eslint-disable import/export */ /* eslint-disable complexity */ /* eslint-disable @typescript-eslint/no-namespace */ /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */ /* eslint-disable @typescript-eslint/no-empty-interface */ \nvar KeyType;\n(function(KeyType) {\n KeyType[\"RSA\"] = \"RSA\";\n KeyType[\"Ed25519\"] = \"Ed25519\";\n KeyType[\"Secp256k1\"] = \"Secp256k1\";\n})(KeyType || (KeyType = {}));\nvar __KeyTypeValues;\n(function(__KeyTypeValues) {\n __KeyTypeValues[__KeyTypeValues[\"RSA\"] = 0] = \"RSA\";\n __KeyTypeValues[__KeyTypeValues[\"Ed25519\"] = 1] = \"Ed25519\";\n __KeyTypeValues[__KeyTypeValues[\"Secp256k1\"] = 2] = \"Secp256k1\";\n})(__KeyTypeValues || (__KeyTypeValues = {}));\n(function(KeyType) {\n KeyType.codec = ()=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.enumeration)(__KeyTypeValues);\n };\n})(KeyType || (KeyType = {}));\nvar PublicKey;\n(function(PublicKey) {\n let _codec;\n PublicKey.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.Type != null) {\n w.uint32(8);\n KeyType.codec().encode(obj.Type, w);\n }\n if (obj.Data != null) {\n w.uint32(18);\n w.bytes(obj.Data);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length)=>{\n const obj = {};\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n obj.Type = KeyType.codec().decode(reader);\n break;\n case 2:\n obj.Data = reader.bytes();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n PublicKey.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, PublicKey.codec());\n };\n PublicKey.decode = (buf)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, PublicKey.codec());\n };\n})(PublicKey || (PublicKey = {}));\nvar PrivateKey;\n(function(PrivateKey) {\n let _codec;\n PrivateKey.codec = ()=>{\n if (_codec == null) {\n _codec = (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.message)((obj, w, opts = {})=>{\n if (opts.lengthDelimited !== false) {\n w.fork();\n }\n if (obj.Type != null) {\n w.uint32(8);\n KeyType.codec().encode(obj.Type, w);\n }\n if (obj.Data != null) {\n w.uint32(18);\n w.bytes(obj.Data);\n }\n if (opts.lengthDelimited !== false) {\n w.ldelim();\n }\n }, (reader, length)=>{\n const obj = {};\n const end = length == null ? reader.len : reader.pos + length;\n while(reader.pos < end){\n const tag = reader.uint32();\n switch(tag >>> 3){\n case 1:\n obj.Type = KeyType.codec().decode(reader);\n break;\n case 2:\n obj.Data = reader.bytes();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return obj;\n });\n }\n return _codec;\n };\n PrivateKey.encode = (obj)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.encodeMessage)(obj, PrivateKey.codec());\n };\n PrivateKey.decode = (buf)=>{\n return (0,protons_runtime__WEBPACK_IMPORTED_MODULE_0__.decodeMessage)(buf, PrivateKey.codec());\n };\n})(PrivateKey || (PrivateKey = {})); //# sourceMappingURL=keys.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMva2V5cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsZ0NBQWdDLEdBQ2hDLDZCQUE2QixHQUM3QixrREFBa0QsR0FDbEQsNEVBQTRFLEdBQzVFLHdEQUF3RCxHQUM2QjtBQUM5RSxJQUFJSSxRQUFRO0FBQ2xCLFVBQVVBLE9BQU87SUFDZEEsT0FBTyxDQUFDLE1BQU0sR0FBRztJQUNqQkEsT0FBTyxDQUFDLFVBQVUsR0FBRztJQUNyQkEsT0FBTyxDQUFDLFlBQVksR0FBRztBQUMzQixHQUFHQSxXQUFZQSxDQUFBQSxVQUFVLENBQUM7QUFDMUIsSUFBSUM7QUFDSCxVQUFVQSxlQUFlO0lBQ3RCQSxlQUFlLENBQUNBLGVBQWUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHO0lBQzlDQSxlQUFlLENBQUNBLGVBQWUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHO0lBQ2xEQSxlQUFlLENBQUNBLGVBQWUsQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHO0FBQ3hELEdBQUdBLG1CQUFvQkEsQ0FBQUEsa0JBQWtCLENBQUM7QUFDekMsVUFBVUQsT0FBTztJQUNkQSxRQUFRRSxLQUFLLEdBQUc7UUFDWixPQUFPTiw0REFBV0EsQ0FBQ0s7SUFDdkI7QUFDSixHQUFHRCxXQUFZQSxDQUFBQSxVQUFVLENBQUM7QUFDbkIsSUFBSUcsVUFBVTtBQUNwQixVQUFVQSxTQUFTO0lBQ2hCLElBQUlDO0lBQ0pELFVBQVVELEtBQUssR0FBRztRQUNkLElBQUlFLFVBQVUsTUFBTTtZQUNoQkEsU0FBU0wsd0RBQU9BLENBQUMsQ0FBQ00sS0FBS0MsR0FBR0MsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLElBQUlBLEtBQUtDLGVBQWUsS0FBSyxPQUFPO29CQUNoQ0YsRUFBRUcsSUFBSTtnQkFDVjtnQkFDQSxJQUFJSixJQUFJSyxJQUFJLElBQUks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LEtBQUs7SUFDOUM7SUFDQXVCLFdBQVdILE1BQU0sR0FBRyxDQUFDRTtRQUNqQixPQUFPMUIsOERBQWFBLENBQUMwQixLQUFLQyxXQUFXdkIsS0FBSztJQUM5QztBQUNKLEdBQUd1QixjQUFlQSxDQUFBQSxhQUFhLENBQUMsS0FDaEMsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMva2V5cy5qcz8wN2Y0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9leHBvcnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1ib29sZWFuLWxpdGVyYWwtY29tcGFyZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAqL1xuaW1wb3J0IHsgZW51bWVyYXRpb24sIGVuY29kZU1lc3NhZ2UsIGRlY29kZU1lc3NhZ2UsIG1lc3NhZ2UgfSBmcm9tICdwcm90b25zLXJ1bnRpbWUnO1xuZXhwb3J0IHZhciBLZXlUeXBlO1xuKGZ1bmN0aW9uIChLZXlUeXBlKSB7XG4gICAgS2V5VHlwZVtcIlJTQVwiXSA9IFwiUlNBXCI7XG4gICAgS2V5VHlwZVtcIkVkMjU1MTlcIl0gPSBcIkVkMjU1MTlcIjtcbiAgICBLZXlUeXBlW1wiU2VjcDI1NmsxXCJdID0gXCJTZWNwMjU2azFcIjtcbn0pKEtleVR5cGUgfHwgKEtleVR5cGUgPSB7fSkpO1xudmFyIF9fS2V5VHlwZVZhbHVlcztcbihmdW5jdGlvbiAoX19LZXlUeXBlVmFsdWVzKSB7XG4gICAgX19LZXlUeXBlVmFsdWVzW19fS2V5VHlwZVZhbHVlc1tcIlJTQVwiXSA9IDBdID0gXCJSU0FcIjtcbiAgICBfX0tleVR5cGVWYWx1ZXNbX19LZXlUeXBlVmFsdWVzW1wiRWQyNTUxOVwiXSA9IDFdID0gXCJFZDI1NTE5XCI7XG4gICAgX19LZXlUeXBlVmFsdWVzW19fS2V5VHlwZVZhbHVlc1tcIlNlY3AyNTZrMVwiXSA9IDJdID0gXCJTZWNwMjU2azFcIjtcbn0pKF9fS2V5VHlwZVZhbHVlcyB8fCAoX19LZXlUeXBlVmFsdWVzID0ge30pKTtcbihmdW5jdGlvbiAoS2V5VHlwZSkge1xuICAgIEtleVR5cGUuY29kZWMgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbnVtZXJhdGlvbihfX0tleVR5cGVWYWx1ZXMpO1xuICAgIH07XG59KShLZXlUeXBlIHx8IChLZXlUeXBlID0ge30pKTtcbmV4cG9ydCB2YXIgUHVibGljS2V5O1xuKGZ1bmN0aW9uIChQdWJsaWNLZXkpIHtcbiAgICBsZXQgX2NvZGVjO1xuICAgIFB1YmxpY0tleS5jb2RlYyA9ICgpID0+IHtcbiAgICAgICAgaWYgKF9jb2RlYyA9PSBudWxsKSB7XG4gICAgICAgICAgICBfY29kZWMgPSBtZXNzYWdlKChvYmosIHcsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdy5mb3JrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouVHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHcudWludDMyKDgpO1xuICAgICAgICAgICAgICAgICAgICBLZXlUeXBlLmNvZGVjKCkuZW5jb2RlKG9iai5UeXBlLCB3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5EYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTgpO1xuICAgICAgICAgICAgICAgICAgICB3LmJ5dGVzKG9iai5EYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMubGVuZ3RoRGVsaW1pdGVkICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB3LmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChyZWFkZXIsIGxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PSBudWxsID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5UeXBlID0gS2V5VHlwZS5jb2RlYygpLmRlY29kZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5EYXRhID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9jb2RlYztcbiAgICB9O1xuICAgIFB1YmxpY0tleS5lbmNvZGUgPSAob2JqKSA9PiB7XG4gICAgICAgIHJldHVybiBlbmNvZGVNZXNzYWdlKG9iaiwgUHVibGljS2V5LmNvZGVjKCkpO1xuICAgIH07XG4gICAgUHVibGljS2V5LmRlY29kZSA9IChidWYpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZU1lc3NhZ2UoYnVmLCBQdWJsaWNLZXkuY29kZWMoKSk7XG4gICAgfTtcbn0pKFB1YmxpY0tleSB8fCAoUHVibGljS2V5ID0ge30pKTtcbmV4cG9ydCB2YXIgUHJpdmF0ZUtleTtcbihmdW5jdGlvbiAoUHJpdmF0ZUtleSkge1xuICAgIGxldCBfY29kZWM7XG4gICAgUHJpdmF0ZUtleS5jb2RlYyA9ICgpID0+IHtcbiAgICAgICAgaWYgKF9jb2RlYyA9PSBudWxsKSB7XG4gICAgICAgICAgICBfY29kZWMgPSBtZXNzYWdlKChvYmosIHcsIG9wdHMgPSB7fSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aERlbGltaXRlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdy5mb3JrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouVHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHcudWludDMyKDgpO1xuICAgICAgICAgICAgICAgICAgICBLZXlUeXBlLmNvZGVjKCkuZW5jb2RlKG9iai5UeXBlLCB3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5EYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdy51aW50MzIoMTgpO1xuICAgICAgICAgICAgICAgICAgICB3LmJ5dGVzKG9iai5EYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMubGVuZ3RoRGVsaW1pdGVkICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB3LmxkZWxpbSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChyZWFkZXIsIGxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGxlbmd0aCA9PSBudWxsID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5UeXBlID0gS2V5VHlwZS5jb2RlYygpLmRlY29kZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5EYXRhID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9jb2RlYztcbiAgICB9O1xuICAgIFByaXZhdGVLZXkuZW5jb2RlID0gKG9iaikgPT4ge1xuICAgICAgICByZXR1cm4gZW5jb2RlTWVzc2FnZShvYmosIFByaXZhdGVLZXkuY29kZWMoKSk7XG4gICAgfTtcbiAgICBQcml2YXRlS2V5LmRlY29kZSA9IChidWYpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZU1lc3NhZ2UoYnVmLCBQcml2YXRlS2V5LmNvZGVjKCkpO1xuICAgIH07XG59KShQcml2YXRlS2V5IHx8IChQcml2YXRlS2V5ID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleXMuanMubWFwIl0sIm5hbWVzIjpbImVudW1lcmF0aW9uIiwiZW5jb2RlTWVzc2FnZSIsImRlY29kZU1lc3NhZ2UiLCJtZXNzYWdlIiwiS2V5VHlwZSIsIl9fS2V5VHlwZVZhbHVlcyIsImNvZGVjIiwiUHVibGljS2V5IiwiX2NvZGVjIiwib2JqIiwidyIsIm9wdHMiLCJsZW5ndGhEZWxpbWl0ZWQiLCJmb3JrIiwiVHlwZSIsInVpbnQzMiIsImVuY29kZSIsIkRhdGEiLCJieXRlcyIsImxkZWxpbSIsInJlYWRlciIsImxlbmd0aCIsImVuZCIsImxlbiIsInBvcyIsInRhZyIsImRlY29kZSIsInNraXBUeXBlIiwiYnVmIiwiUHJpdmF0ZUtleSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/keys.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-class.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-class.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MAX_KEY_SIZE: () => (/* binding */ MAX_KEY_SIZE),\n/* harmony export */ RsaPrivateKey: () => (/* binding */ RsaPrivateKey),\n/* harmony export */ RsaPublicKey: () => (/* binding */ RsaPublicKey),\n/* harmony export */ fromJwk: () => (/* binding */ fromJwk),\n/* harmony export */ generateKeyPair: () => (/* binding */ generateKeyPair),\n/* harmony export */ unmarshalRsaPrivateKey: () => (/* binding */ unmarshalRsaPrivateKey),\n/* harmony export */ unmarshalRsaPublicKey: () => (/* binding */ unmarshalRsaPublicKey)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! multiformats/hashes/sha2 */ \"(ssr)/./node_modules/multiformats/dist/src/hashes/sha2.js\");\n/* harmony import */ var node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node-forge/lib/forge.js */ \"(ssr)/./node_modules/node-forge/lib/forge.js\");\n/* harmony import */ var uint8arrays_equals__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uint8arrays/equals */ \"(ssr)/./node_modules/uint8arrays/dist/src/equals.js\");\n/* harmony import */ var node_forge_lib_sha512_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! node-forge/lib/sha512.js */ \"(ssr)/./node_modules/node-forge/lib/sha512.js\");\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/util.js\");\n/* harmony import */ var _exporter_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./exporter.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/exporter.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./keys.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/keys.js\");\n/* harmony import */ var _rsa_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rsa.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa.js\");\n\n\n// @ts-expect-error types are missing\n\n\n\n\n\n\n\n\nconst MAX_KEY_SIZE = 8192;\nclass RsaPublicKey {\n constructor(key){\n this._key = key;\n }\n verify(data, sig) {\n return _rsa_js__WEBPACK_IMPORTED_MODULE_8__.hashAndVerify(this._key, sig, data);\n }\n marshal() {\n return _rsa_js__WEBPACK_IMPORTED_MODULE_8__.utils.jwkToPkix(this._key);\n }\n get bytes() {\n return _keys_js__WEBPACK_IMPORTED_MODULE_7__.PublicKey.encode({\n Type: _keys_js__WEBPACK_IMPORTED_MODULE_7__.KeyType.RSA,\n Data: this.marshal()\n }).subarray();\n }\n encrypt(bytes) {\n return _rsa_js__WEBPACK_IMPORTED_MODULE_8__.encrypt(this._key, bytes);\n }\n equals(key) {\n return (0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_2__.equals)(this.bytes, key.bytes);\n }\n hash() {\n const p = multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__.sha256.digest(this.bytes);\n if ((0,_util_js__WEBPACK_IMPORTED_MODULE_5__.isPromise)(p)) {\n return p.then(({ bytes })=>bytes);\n }\n return p.bytes;\n }\n}\nclass RsaPrivateKey {\n constructor(key, publicKey){\n this._key = key;\n this._publicKey = publicKey;\n }\n genSecret() {\n return _rsa_js__WEBPACK_IMPORTED_MODULE_8__.getRandomValues(16);\n }\n sign(message) {\n return _rsa_js__WEBPACK_IMPORTED_MODULE_8__.hashAndSign(this._key, message);\n }\n get public() {\n if (this._publicKey == null) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_9__.CodeError(\"public key not provided\", \"ERR_PUBKEY_NOT_PROVIDED\");\n }\n return new RsaPublicKey(this._publicKey);\n }\n decrypt(bytes) {\n return _rsa_js__WEBPACK_IMPORTED_MODULE_8__.decrypt(this._key, bytes);\n }\n marshal() {\n return _rsa_js__WEBPACK_IMPORTED_MODULE_8__.utils.jwkToPkcs1(this._key);\n }\n get bytes() {\n return _keys_js__WEBPACK_IMPORTED_MODULE_7__.PrivateKey.encode({\n Type: _keys_js__WEBPACK_IMPORTED_MODULE_7__.KeyType.RSA,\n Data: this.marshal()\n }).subarray();\n }\n equals(key) {\n return (0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_2__.equals)(this.bytes, key.bytes);\n }\n hash() {\n const p = multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__.sha256.digest(this.bytes);\n if ((0,_util_js__WEBPACK_IMPORTED_MODULE_5__.isPromise)(p)) {\n return p.then(({ bytes })=>bytes);\n }\n return p.bytes;\n }\n /**\n * Gets the ID of the key.\n *\n * The key id is the base58 encoding of the SHA-256 multihash of its public key.\n * The public key is a protobuf encoding containing a type and the DER encoding\n * of the PKCS SubjectPublicKeyInfo.\n */ async id() {\n const hash = await this.public.hash();\n return (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_4__.toString)(hash, \"base58btc\");\n }\n /**\n * Exports the key into a password protected PEM format\n */ async export(password, format = \"pkcs-8\") {\n if (format === \"pkcs-8\") {\n const buffer = new node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_1__.util.ByteBuffer(this.marshal());\n const asn1 = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_1__.asn1.fromDer(buffer);\n const privateKey = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_1__.pki.privateKeyFromAsn1(asn1);\n const options = {\n algorithm: \"aes256\",\n count: 10000,\n saltSize: 128 / 8,\n prfAlgorithm: \"sha512\"\n };\n return node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_1__.pki.encryptRsaPrivateKey(privateKey, password, options);\n } else if (format === \"libp2p-key\") {\n return (0,_exporter_js__WEBPACK_IMPORTED_MODULE_6__.exporter)(this.bytes, password);\n } else {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_9__.CodeError(`export format '${format}' is not supported`, \"ERR_INVALID_EXPORT_FORMAT\");\n }\n }\n}\nasync function unmarshalRsaPrivateKey(bytes) {\n const jwk = _rsa_js__WEBPACK_IMPORTED_MODULE_8__.utils.pkcs1ToJwk(bytes);\n if (_rsa_js__WEBPACK_IMPORTED_MODULE_8__.keySize(jwk) > MAX_KEY_SIZE) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_9__.CodeError(\"key size is too large\", \"ERR_KEY_SIZE_TOO_LARGE\");\n }\n const keys = await _rsa_js__WEBPACK_IMPORTED_MODULE_8__.unmarshalPrivateKey(jwk);\n return new RsaPrivateKey(keys.privateKey, keys.publicKey);\n}\nfunction unmarshalRsaPublicKey(bytes) {\n const jwk = _rsa_js__WEBPACK_IMPORTED_MODULE_8__.utils.pkixToJwk(bytes);\n if (_rsa_js__WEBPACK_IMPORTED_MODULE_8__.keySize(jwk) > MAX_KEY_SIZE) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_9__.CodeError(\"key size is too large\", \"ERR_KEY_SIZE_TOO_LARGE\");\n }\n return new RsaPublicKey(jwk);\n}\nasync function fromJwk(jwk) {\n if (_rsa_js__WEBPACK_IMPORTED_MODULE_8__.keySize(jwk) > MAX_KEY_SIZE) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_9__.CodeError(\"key size is too large\", \"ERR_KEY_SIZE_TOO_LARGE\");\n }\n const keys = await _rsa_js__WEBPACK_IMPORTED_MODULE_8__.unmarshalPrivateKey(jwk);\n return new RsaPrivateKey(keys.privateKey, keys.publicKey);\n}\nasync function generateKeyPair(bits) {\n if (bits > MAX_KEY_SIZE) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_9__.CodeError(\"key size is too large\", \"ERR_KEY_SIZE_TOO_LARGE\");\n }\n const keys = await _rsa_js__WEBPACK_IMPORTED_MODULE_8__.generateKey(bits);\n return new RsaPrivateKey(keys.privateKey, keys.publicKey);\n} //# sourceMappingURL=rsa-class.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvcnNhLWNsYXNzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThDO0FBQ0k7QUFDbEQscUNBQXFDO0FBQ087QUFDb0I7QUFDOUI7QUFDcUM7QUFDaEM7QUFDRTtBQUNSO0FBQ0U7QUFDNUIsTUFBTVcsZUFBZSxLQUFLO0FBQzFCLE1BQU1DO0lBRVRDLFlBQVlDLEdBQUcsQ0FBRTtRQUNiLElBQUksQ0FBQ0MsSUFBSSxHQUFHRDtJQUNoQjtJQUNBRSxPQUFPQyxJQUFJLEVBQUVDLEdBQUcsRUFBRTtRQUNkLE9BQU9SLGtEQUFvQixDQUFDLElBQUksQ0FBQ0ssSUFBSSxFQUFFRyxLQUFLRDtJQUNoRDtJQUNBRyxVQUFVO1FBQ04sT0FBT1Ysb0RBQXNCLENBQUMsSUFBSSxDQUFDSyxJQUFJO0lBQzNDO0lBQ0EsSUFBSVEsUUFBUTtRQUNSLE9BQU9kLCtDQUFhLENBQUNnQixNQUFNLENBQUM7WUFDeEJDLE1BQU1qQiw2Q0FBVyxDQUFDbUIsR0FBRztZQUNyQkMsTUFBTSxJQUFJLENBQUNULE9BQU87UUFDdEIsR0FBR1UsUUFBUTtJQUNmO0lBQ0FDLFFBQVFSLEtBQUssRUFBRTtRQUNYLE9BQU9iLDRDQUFjLENBQUMsSUFBSSxDQUFDSyxJQUFJLEVBQUVRO0lBQ3JDO0lBQ0FwQixPQUFPVyxHQUFHLEVBQUU7UUFDUixPQUFPViwwREFBZ0JBLENBQUMsSUFBSSxDQUFDbUIsS0FBSyxFQUFFVCxJQUFJUyxLQUFLO0lBQ2pEO0lBQ0FTLE9BQU87UUFDSCxNQUFNQyxJQUFJaEMsNERBQU1BLENBQUNpQyxNQUFNLENBQUMsSUFBSSxDQUFDWCxLQUFLO1FBQ2xDLElBQUloQixtREFBU0EsQ0FBQzBCLElBQUk7WUFDZCxPQUFPQSxFQUFFRSxJQUFJLENBQUMsQ0FBQyxFQUFFWixLQUFLLEVBQUUsR0FB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VSxFQUFFYSxLQUFLakMsU0FBUztBQUM1RDtBQUNPLFNBQVNtQyxzQkFBc0JqRCxLQUFLO0lBQ3ZDLE1BQU00QyxNQUFNekQsb0RBQXNCLENBQUNhO0lBQ25DLElBQUliLDRDQUFjLENBQUN5RCxPQUFPeEQsY0FBYztRQUNwQyxNQUFNLElBQUlYLHdEQUFTQSxDQUFDLHlCQUF5QjtJQUNqRDtJQUNBLE9BQU8sSUFBSVksYUFBYXVEO0FBQzVCO0FBQ08sZUFBZU8sUUFBUVAsR0FBRztJQUM3QixJQUFJekQsNENBQWMsQ0FBQ3lELE9BQU94RCxjQUFjO1FBQ3BDLE1BQU0sSUFBSVgsd0RBQVNBLENBQUMseUJBQXlCO0lBQ2pEO0lBQ0EsTUFBTXNFLE9BQU8sTUFBTTVELHdEQUEwQixDQUFDeUQ7SUFDOUMsT0FBTyxJQUFJL0IsY0FBY2tDLEtBQUtiLFVBQVUsRUFBRWEsS0FBS2pDLFNBQVM7QUFDNUQ7QUFDTyxlQUFlc0MsZ0JBQWdCQyxJQUFJO0lBQ3RDLElBQUlBLE9BQU9qRSxjQUFjO1FBQ3JCLE1BQU0sSUFBSVgsd0RBQVNBLENBQUMseUJBQXlCO0lBQ2pEO0lBQ0EsTUFBTXNFLE9BQU8sTUFBTTVELGdEQUFrQixDQUFDa0U7SUFDdEMsT0FBTyxJQUFJeEMsY0FBY2tDLEtBQUtiLFVBQVUsRUFBRWEsS0FBS2pDLFNBQVM7QUFDNUQsRUFDQSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9ub2RlX21vZHVsZXMvQGxpYnAycC9jcnlwdG8vZGlzdC9zcmMva2V5cy9yc2EtY2xhc3MuanM/MTY3NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2RlRXJyb3IgfSBmcm9tICdAbGlicDJwL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tICdtdWx0aWZvcm1hdHMvaGFzaGVzL3NoYTInO1xuLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlcyBhcmUgbWlzc2luZ1xuaW1wb3J0IGZvcmdlIGZyb20gJ25vZGUtZm9yZ2UvbGliL2ZvcmdlLmpzJztcbmltcG9ydCB7IGVxdWFscyBhcyB1aW50OEFycmF5RXF1YWxzIH0gZnJvbSAndWludDhhcnJheXMvZXF1YWxzJztcbmltcG9ydCAnbm9kZS1mb3JnZS9saWIvc2hhNTEyLmpzJztcbmltcG9ydCB7IHRvU3RyaW5nIGFzIHVpbnQ4QXJyYXlUb1N0cmluZyB9IGZyb20gJ3VpbnQ4YXJyYXlzL3RvLXN0cmluZyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IGV4cG9ydGVyIH0gZnJvbSAnLi9leHBvcnRlci5qcyc7XG5pbXBvcnQgKiBhcyBwYm0gZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICcuL3JzYS5qcyc7XG5leHBvcnQgY29uc3QgTUFYX0tFWV9TSVpFID0gODE5MjtcbmV4cG9ydCBjbGFzcyBSc2FQdWJsaWNLZXkge1xuICAgIF9rZXk7XG4gICAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgdmVyaWZ5KGRhdGEsIHNpZykge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmhhc2hBbmRWZXJpZnkodGhpcy5fa2V5LCBzaWcsIGRhdGEpO1xuICAgIH1cbiAgICBtYXJzaGFsKCkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLnV0aWxzLmp3a1RvUGtpeCh0aGlzLl9rZXkpO1xuICAgIH1cbiAgICBnZXQgYnl0ZXMoKSB7XG4gICAgICAgIHJldHVybiBwYm0uUHVibGljS2V5LmVuY29kZSh7XG4gICAgICAgICAgICBUeXBlOiBwYm0uS2V5VHlwZS5SU0EsXG4gICAgICAgICAgICBEYXRhOiB0aGlzLm1hcnNoYWwoKVxuICAgICAgICB9KS5zdWJhcnJheSgpO1xuICAgIH1cbiAgICBlbmNyeXB0KGJ5dGVzKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8uZW5jcnlwdCh0aGlzLl9rZXksIGJ5dGVzKTtcbiAgICB9XG4gICAgZXF1YWxzKGtleSkge1xuICAgICAgICByZXR1cm4gdWludDhBcnJheUVxdWFscyh0aGlzLmJ5dGVzLCBrZXkuYnl0ZXMpO1xuICAgIH1cbiAgICBoYXNoKCkge1xuICAgICAgICBjb25zdCBwID0gc2hhMjU2LmRpZ2VzdCh0aGlzLmJ5dGVzKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHAudGhlbigoeyBieXRlcyB9KSA9PiBieXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHAuYnl0ZXM7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFJzYVByaXZhdGVLZXkge1xuICAgIF9rZXk7XG4gICAgX3B1YmxpY0tleTtcbiAgICBjb25zdHJ1Y3RvcihrZXksIHB1YmxpY0tleSkge1xuICAgICAgICB0aGlzLl9rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuX3B1YmxpY0tleSA9IHB1YmxpY0tleTtcbiAgICB9XG4gICAgZ2VuU2VjcmV0KCkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcygxNik7XG4gICAgfVxuICAgIHNpZ24obWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmhhc2hBbmRTaWduKHRoaXMuX2tleSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIGdldCBwdWJsaWMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wdWJsaWNLZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcigncHVibGljIGtleSBub3QgcHJvdmlkZWQnLCAnRVJSX1BVQktFWV9OT1RfUFJPVklERUQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJzYVB1YmxpY0tleSh0aGlzLl9wdWJsaWNLZXkpO1xuICAgIH1cbiAgICBkZWNyeXB0KGJ5dGVzKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8uZGVjcnlwdCh0aGlzLl9rZXksIGJ5dGVzKTtcbiAgICB9XG4gICAgbWFyc2hhbCgpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by51dGlscy5qd2tUb1BrY3MxKHRoaXMuX2tleSk7XG4gICAgfVxuICAgIGdldCBieXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHBibS5Qcml2YXRlS2V5LmVuY29kZSh7XG4gICAgICAgICAgICBUeXBlOiBwYm0uS2V5VHlwZS5SU0EsXG4gICAgICAgICAgICBEYXRhOiB0aGlzLm1hcnNoYWwoKVxuICAgICAgICB9KS5zdWJhcnJheSgpO1xuICAgIH1cbiAgICBlcXVhbHMoa2V5KSB7XG4gICAgICAgIHJldHVybiB1aW50OEFycmF5RXF1YWxzKHRoaXMuYnl0ZXMsIGtleS5ieXRlcyk7XG4gICAgfVxuICAgIGhhc2goKSB7XG4gICAgICAgIGNvbnN0IHAgPSBzaGEyNTYuZGlnZXN0KHRoaXMuYnl0ZXMpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHApKSB7XG4gICAgICAgICAgICByZXR1cm4gcC50aGVuKCh7IGJ5dGVzIH0pID0+IGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5ieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgSUQgb2YgdGhlIGtleS5cbiAgICAgKlxuICAgICAqIFRoZSBrZXkgaWQgaXMgdGhlIGJhc2U1OCBlbmNvZGluZyBvZiB0aGUgU0hBLTI1NiBtdWx0aWhhc2ggb2YgaXRzIHB1YmxpYyBrZXkuXG4gICAgICogVGhlIHB1YmxpYyBrZXkgaXMgYSBwcm90b2J1ZiBlbmNvZGluZyBjb250YWluaW5nIGEgdHlwZSBhbmQgdGhlIERFUiBlbmNvZGluZ1xuICAgICAqIG9mIHRoZSBQS0NTIFN1YmplY3RQdWJsaWNLZXlJbmZvLlxuICAgICAqL1xuICAgIGFzeW5jIGlkKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gYXdhaXQgdGhpcy5wdWJsaWMuaGFzaCgpO1xuICAgICAgICByZXR1cm4gdWludDhBcnJheVRvU3RyaW5nKGhhc2gsICdiYXNlNThidGMnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyB0aGUga2V5IGludG8gYSBwYXNzd29yZCBwcm90ZWN0ZWQgUEVNIGZvcm1hdFxuICAgICAqL1xuICAgIGFzeW5jIGV4cG9ydChwYXNzd29yZCwgZm9ybWF0ID0gJ3BrY3MtOCcpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ3BrY3MtOCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBmb3JnZS51dGlsLkJ5dGVCdWZmZXIodGhpcy5tYXJzaGFsKCkpO1xuICAgICAgICAgICAgY29uc3QgYXNuMSA9IGZvcmdlLmFzbjEuZnJvbURlcihidWZmZXIpO1xuICAgICAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IGZvcmdlLnBraS5wcml2YXRlS2V5RnJvbUFzbjEoYXNuMSk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGFsZ29yaXRobTogJ2FlczI1NicsXG4gICAgICAgICAgICAgICAgY291bnQ6IDEwMDAwLFxuICAgICAgICAgICAgICAgIHNhbHRTaXplOiAxMjggLyA4LFxuICAgICAgICAgICAgICAgIHByZkFsZ29yaXRobTogJ3NoYTUxMidcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gZm9yZ2UucGtpLmVuY3J5cHRSc2FQcml2YXRlS2V5KHByaXZhdGVLZXksIHBhc3N3b3JkLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09ICdsaWJwMnAta2V5Jykge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydGVyKHRoaXMuYnl0ZXMsIHBhc3N3b3JkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoYGV4cG9ydCBmb3JtYXQgJyR7Zm9ybWF0fScgaXMgbm90IHN1cHBvcnRlZGAsICdFUlJfSU5WQUxJRF9FWFBPUlRfRk9STUFUJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5tYXJzaGFsUnNhUHJpdmF0ZUtleShieXRlcykge1xuICAgIGNvbnN0IGp3ayA9IGNyeXB0by51dGlscy5wa2NzMVRvSndrKGJ5dGVzKTtcbiAgICBpZiAoY3J5cHRvLmtleVNpemUoandrKSA+IE1BWF9LRVlfU0laRSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdrZXkgc2l6ZSBpcyB0b28gbGFyZ2UnLCAnRVJSX0tFWV9TSVpFX1RPT19MQVJHRScpO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gYXdhaXQgY3J5cHRvLnVubWFyc2hhbFByaXZhdGVLZXkoandrKTtcbiAgICByZXR1cm4gbmV3IFJzYVByaXZhdGVLZXkoa2V5cy5wcml2YXRlS2V5LCBrZXlzLnB1YmxpY0tleSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5tYXJzaGFsUnNhUHVibGljS2V5KGJ5dGVzKSB7XG4gICAgY29uc3QgandrID0gY3J5cHRvLnV0aWxzLnBraXhUb0p3ayhieXRlcyk7XG4gICAgaWYgKGNyeXB0by5rZXlTaXplKGp3aykgPiBNQVhfS0VZX1NJWkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcigna2V5IHNpemUgaXMgdG9vIGxhcmdlJywgJ0VSUl9LRVlfU0laRV9UT09fTEFSR0UnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSc2FQdWJsaWNLZXkoandrKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmcm9tSndrKGp3aykge1xuICAgIGlmIChjcnlwdG8ua2V5U2l6ZShqd2spID4gTUFYX0tFWV9TSVpFKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2tleSBzaXplIGlzIHRvbyBsYXJnZScsICdFUlJfS0VZX1NJWkVfVE9PX0xBUkdFJyk7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBhd2FpdCBjcnlwdG8udW5tYXJzaGFsUHJpdmF0ZUtleShqd2spO1xuICAgIHJldHVybiBuZXcgUnNhUHJpdmF0ZUtleShrZXlzLnByaXZhdGVLZXksIGtleXMucHVibGljS2V5KTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUtleVBhaXIoYml0cykge1xuICAgIGlmIChiaXRzID4gTUFYX0tFWV9TSVpFKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2tleSBzaXplIGlzIHRvbyBsYXJnZScsICdFUlJfS0VZX1NJWkVfVE9PX0xBUkdFJyk7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBhd2FpdCBjcnlwdG8uZ2VuZXJhdGVLZXkoYml0cyk7XG4gICAgcmV0dXJuIG5ldyBSc2FQcml2YXRlS2V5KGtleXMucHJpdmF0ZUtleSwga2V5cy5wdWJsaWNLZXkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnNhLWNsYXNzLmpzLm1hcCJdLCJuYW1lcyI6WyJDb2RlRXJyb3IiLCJzaGEyNTYiLCJmb3JnZSIsImVxdWFscyIsInVpbnQ4QXJyYXlFcXVhbHMiLCJ0b1N0cmluZyIsInVpbnQ4QXJyYXlUb1N0cmluZyIsImlzUHJvbWlzZSIsImV4cG9ydGVyIiwicGJtIiwiY3J5cHRvIiwiTUFYX0tFWV9TSVpFIiwiUnNhUHVibGljS2V5IiwiY29uc3RydWN0b3IiLCJrZXkiLCJfa2V5IiwidmVyaWZ5IiwiZGF0YSIsInNpZyIsImhhc2hBbmRWZXJpZnkiLCJtYXJzaGFsIiwidXRpbHMiLCJqd2tUb1BraXgiLCJieXRlcyIsIlB1YmxpY0tleSIsImVuY29kZSIsIlR5cGUiLCJLZXlUeXBlIiwiUlNBIiwiRGF0YSIsInN1YmFycmF5IiwiZW5jcnlwdCIsImhhc2giLCJwIiwiZGlnZXN0IiwidGhlbiIsIlJzYVByaXZhdGVLZXkiLCJwdWJsaWNLZXkiLCJfcHVibGljS2V5IiwiZ2VuU2VjcmV0IiwiZ2V0UmFuZG9tVmFsdWVzIiwic2lnbiIsIm1lc3NhZ2UiLCJoYXNoQW5kU2lnbiIsInB1YmxpYyIsImRlY3J5cHQiLCJqd2tUb1BrY3MxIiwiUHJpdmF0ZUtleSIsImlkIiwiZXhwb3J0IiwicGFzc3dvcmQiLCJmb3JtYXQiLCJidWZmZXIiLCJ1dGlsIiwiQnl0ZUJ1ZmZlciIsImFzbjEiLCJmcm9tRGVyIiwicHJpdmF0ZUtleSIsInBraSIsInByaXZhdGVLZXlGcm9tQXNuMSIsIm9wdGlvbnMiLCJhbGdvcml0aG0iLCJjb3VudCIsInNhbHRTaXplIiwicHJmQWxnb3JpdGhtIiwiZW5jcnlwdFJzYVByaXZhdGVLZXkiLCJ1bm1hcnNoYWxSc2FQcml2YXRlS2V5IiwiandrIiwicGtjczFUb0p3ayIsImtleVNpemUiLCJrZXlzIiwidW5tYXJzaGFsUHJpdmF0ZUtleSIsInVubWFyc2hhbFJzYVB1YmxpY0tleSIsInBraXhUb0p3ayIsImZyb21Kd2siLCJnZW5lcmF0ZUtleVBhaXIiLCJiaXRzIiwiZ2VuZXJhdGVLZXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-class.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-utils.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-utils.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ jwkToPkcs1: () => (/* binding */ jwkToPkcs1),\n/* harmony export */ jwkToPkix: () => (/* binding */ jwkToPkix),\n/* harmony export */ pkcs1ToJwk: () => (/* binding */ pkcs1ToJwk),\n/* harmony export */ pkixToJwk: () => (/* binding */ pkixToJwk)\n/* harmony export */ });\n/* harmony import */ var node_forge_lib_asn1_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node-forge/lib/asn1.js */ \"(ssr)/./node_modules/node-forge/lib/asn1.js\");\n/* harmony import */ var node_forge_lib_rsa_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node-forge/lib/rsa.js */ \"(ssr)/./node_modules/node-forge/lib/rsa.js\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node-forge/lib/forge.js */ \"(ssr)/./node_modules/node-forge/lib/forge.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../util.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/util.js\");\n\n\n\n// @ts-expect-error types are missing\n\n\n\n\n// Convert a PKCS#1 in ASN1 DER format to a JWK key\nfunction pkcs1ToJwk(bytes) {\n const asn1 = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.asn1.fromDer((0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_4__.toString)(bytes, \"ascii\"));\n const privateKey = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.pki.privateKeyFromAsn1(asn1);\n // https://tools.ietf.org/html/rfc7518#section-6.3.1\n return {\n kty: \"RSA\",\n n: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.n),\n e: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.e),\n d: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.d),\n p: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.p),\n q: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.q),\n dp: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.dP),\n dq: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.dQ),\n qi: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(privateKey.qInv),\n alg: \"RS256\"\n };\n}\n// Convert a JWK key into PKCS#1 in ASN1 DER format\nfunction jwkToPkcs1(jwk) {\n if (jwk.n == null || jwk.e == null || jwk.d == null || jwk.p == null || jwk.q == null || jwk.dp == null || jwk.dq == null || jwk.qi == null) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_6__.CodeError(\"JWK was missing components\", \"ERR_INVALID_PARAMETERS\");\n }\n const asn1 = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.pki.privateKeyToAsn1({\n n: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.n),\n e: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.e),\n d: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.d),\n p: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.p),\n q: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.q),\n dP: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.dp),\n dQ: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.dq),\n qInv: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.qi)\n });\n return (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_3__.fromString)(node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.asn1.toDer(asn1).getBytes(), \"ascii\");\n}\n// Convert a PKCIX in ASN1 DER format to a JWK key\nfunction pkixToJwk(bytes) {\n const asn1 = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.asn1.fromDer((0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_4__.toString)(bytes, \"ascii\"));\n const publicKey = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.pki.publicKeyFromAsn1(asn1);\n return {\n kty: \"RSA\",\n n: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(publicKey.n),\n e: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.bigIntegerToUintBase64url)(publicKey.e)\n };\n}\n// Convert a JWK key to PKCIX in ASN1 DER format\nfunction jwkToPkix(jwk) {\n if (jwk.n == null || jwk.e == null) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_6__.CodeError(\"JWK was missing components\", \"ERR_INVALID_PARAMETERS\");\n }\n const asn1 = node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.pki.publicKeyToAsn1({\n n: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.n),\n e: (0,_util_js__WEBPACK_IMPORTED_MODULE_5__.base64urlToBigInteger)(jwk.e)\n });\n return (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_3__.fromString)(node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.asn1.toDer(asn1).getBytes(), \"ascii\");\n} //# sourceMappingURL=rsa-utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvcnNhLXV0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQWdDO0FBQ0Q7QUFDZTtBQUM5QyxxQ0FBcUM7QUFDTztBQUNpQztBQUNOO0FBQ1M7QUFDaEYsbURBQW1EO0FBQzVDLFNBQVNRLFdBQVdDLEtBQUs7SUFDNUIsTUFBTUMsT0FBT1QseURBQVUsQ0FBQ1UsT0FBTyxDQUFDTiwrREFBa0JBLENBQUNJLE9BQU87SUFDMUQsTUFBTUcsYUFBYVgsd0RBQVMsQ0FBQ2Esa0JBQWtCLENBQUNKO0lBQ2hELG9EQUFvRDtJQUNwRCxPQUFPO1FBQ0hLLEtBQUs7UUFDTEMsR0FBR1YsbUVBQXlCQSxDQUFDTSxXQUFXSSxDQUFDO1FBQ3pDQyxHQUFHWCxtRUFBeUJBLENBQUNNLFdBQVdLLENBQUM7UUFDekNDLEdBQUdaLG1FQUF5QkEsQ0FBQ00sV0FBV00sQ0FBQztRQUN6Q0MsR0FBR2IsbUVBQXlCQSxDQUFDTSxXQUFXTyxDQUFDO1FBQ3pDQyxHQUFHZCxtRUFBeUJBLENBQUNNLFdBQVdRLENBQUM7UUFDekNDLElBQUlmLG1FQUF5QkEsQ0FBQ00sV0FBV1UsRUFBRTtRQUMzQ0MsSUFBSWpCLG1FQUF5QkEsQ0FBQ00sV0FBV1ksRUFBRTtRQUMzQ0MsSUFBSW5CLG1FQUF5QkEsQ0FBQ00sV0FBV2MsSUFBSTtRQUM3Q0MsS0FBSztJQUNUO0FBQ0o7QUFDQSxtREFBbUQ7QUFDNUMsU0FBU0MsV0FBV0MsR0FBRztJQUMxQixJQUFJQSxJQUFJYixDQUFDLElBQUksUUFBUWEsSUFBSVosQ0FBQyxJQUFJLFFBQVFZLElBQUlYLENBQUMsSUFBSSxRQUFRVyxJQUFJVixDQUFDLElBQUksUUFBUVUsSUFBSVQsQ0FBQyxJQUFJLFFBQVFTLElBQUlSLEVBQUUsSUFBSSxRQUFRUSxJQUFJTixFQUFFLElBQUksUUFBUU0sSUFBSUosRUFBRSxJQUFJLE1BQU07UUFDekksTUFBTSxJQUFJekIsd0RBQVNBLENBQUMsOEJBQThCO0lBQ3REO0lBQ0EsTUFBTVUsT0FBT1Qsd0RBQVMsQ0FBQzZCLGdCQUFnQixDQUFDO1FBQ3BDZCxHQUFHVCwrREFBcUJBLENBQUNzQixJQUFJYixDQUFDO1FBQzlCQyxHQUFHViwrREFBcUJBLENBQUNzQixJQUFJWixDQUFDO1FBQzlCQyxHQUFHWCwrREFBcUJBLENBQUNzQixJQUFJWCxDQUFDO1FBQzlCQyxHQUFHWiwrREFBcUJBLENBQUNzQixJQUFJVixDQUFDO1FBQzlCQyxHQUFHYiwrREFBcUJBLENBQUNzQixJQUFJVCxDQUFDO1FBQzlCRSxJQUFJZiwrREFBcUJBLENBQUNzQixJQUFJUixFQUFFO1FBQ2hDRyxJQUFJakIsK0RBQXFCQSxDQUFDc0IsSUFBSU4sRUFBRTtRQUNoQ0csTUFBTW5CLCtEQUFxQkEsQ0FBQ3NCLElBQUlKLEVBQUU7SUFDdEM7SUFDQSxPQUFPdEIsbUVBQW9CQSxDQUFDRix5REFBVSxDQUFDOEIsS0FBSyxDQUFDckIsTUFBTXNCLFFBQVEsSUFBSTtBQUNuRTtBQUNBLGtEQUFrRDtBQUMzQyxTQUFTQyxVQUFVeEIsS0FBSztJQUMzQixNQUFNQyxPQUFPVCx5REFBVSxDQUFDVSxPQUFPLENBQUNOLCtEQUFrQkEsQ0FBQ0ksT0FBTztJQUMxRCxNQUFNeUIsWUFBWWpDLHdEQUFTLENBQUNrQyxpQkFBaUIsQ0FBQ3pCO0lBQzlDLE9BQU87UUFDSEssS0FBSztRQUNMQyxHQUFHVixtRUFBeUJBLENBQUM0QixVQUFVbEIsQ0FBQztRQUN4Q0MsR0FBR1gsbUVBQXlCQSxDQUFDNEIsVUFBVWpCLENBQUM7SUFDNUM7QUFDSjtBQUNBLGdEQUFnRDtBQUN6QyxTQUFTbUIsVUFBVVAsR0FBRztJQUN6QixJQUFJQSxJQUFJYixDQUFDLElBQUksUUFBUWEsSUFBSVosQ0FBQyxJQUFJLE1BQU07UUFDaEMsTUFBTSxJQUFJakIsd0RBQVNBLENBQUMsOEJBQThCO0lBQ3REO0lBQ0EsTUFBTVUsT0FBT1Qsd0RBQVMsQ0FBQ29DLGVBQWUsQ0FBQztRQUNuQ3JCLEdBQUdULCtEQUFxQkEsQ0FBQ3NCLElBQUliLENBQUM7UUFDOUJDLEdBQUdWLCtEQUFxQkEsQ0FBQ3NCLElBQUlaLENBQUM7SUFDbEM7SUFDQSxPQUFPZCxtRUFBb0JBLENBQUNGLHlEQUFVLENBQUM4QixLQUFLLENBQUNyQixNQUFNc0IsUUFBUSxJQUFJO0FBQ25FLEVBQ0EscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvcnNhLXV0aWxzLmpzPzMwMWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdub2RlLWZvcmdlL2xpYi9hc24xLmpzJztcbmltcG9ydCAnbm9kZS1mb3JnZS9saWIvcnNhLmpzJztcbmltcG9ydCB7IENvZGVFcnJvciB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbi8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZXMgYXJlIG1pc3NpbmdcbmltcG9ydCBmb3JnZSBmcm9tICdub2RlLWZvcmdlL2xpYi9mb3JnZS5qcyc7XG5pbXBvcnQgeyBmcm9tU3RyaW5nIGFzIHVpbnQ4QXJyYXlGcm9tU3RyaW5nIH0gZnJvbSAndWludDhhcnJheXMvZnJvbS1zdHJpbmcnO1xuaW1wb3J0IHsgdG9TdHJpbmcgYXMgdWludDhBcnJheVRvU3RyaW5nIH0gZnJvbSAndWludDhhcnJheXMvdG8tc3RyaW5nJztcbmltcG9ydCB7IGJpZ0ludGVnZXJUb1VpbnRCYXNlNjR1cmwsIGJhc2U2NHVybFRvQmlnSW50ZWdlciB9IGZyb20gJy4vLi4vdXRpbC5qcyc7XG4vLyBDb252ZXJ0IGEgUEtDUyMxIGluIEFTTjEgREVSIGZvcm1hdCB0byBhIEpXSyBrZXlcbmV4cG9ydCBmdW5jdGlvbiBwa2NzMVRvSndrKGJ5dGVzKSB7XG4gICAgY29uc3QgYXNuMSA9IGZvcmdlLmFzbjEuZnJvbURlcih1aW50OEFycmF5VG9TdHJpbmcoYnl0ZXMsICdhc2NpaScpKTtcbiAgICBjb25zdCBwcml2YXRlS2V5ID0gZm9yZ2UucGtpLnByaXZhdGVLZXlGcm9tQXNuMShhc24xKTtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxOCNzZWN0aW9uLTYuMy4xXG4gICAgcmV0dXJuIHtcbiAgICAgICAga3R5OiAnUlNBJyxcbiAgICAgICAgbjogYmlnSW50ZWdlclRvVWludEJhc2U2NHVybChwcml2YXRlS2V5Lm4pLFxuICAgICAgICBlOiBiaWdJbnRlZ2VyVG9VaW50QmFzZTY0dXJsKHByaXZhdGVLZXkuZSksXG4gICAgICAgIGQ6IGJpZ0ludGVnZXJUb1VpbnRCYXNlNjR1cmwocHJpdmF0ZUtleS5kKSxcbiAgICAgICAgcDogYmlnSW50ZWdlclRvVWludEJhc2U2NHVybChwcml2YXRlS2V5LnApLFxuICAgICAgICBxOiBiaWdJbnRlZ2VyVG9VaW50QmFzZTY0dXJsKHByaXZhdGVLZXkucSksXG4gICAgICAgIGRwOiBiaWdJbnRlZ2VyVG9VaW50QmFzZTY0dXJsKHByaXZhdGVLZXkuZFApLFxuICAgICAgICBkcTogYmlnSW50ZWdlclRvVWludEJhc2U2NHVybChwcml2YXRlS2V5LmRRKSxcbiAgICAgICAgcWk6IGJpZ0ludGVnZXJUb1VpbnRCYXNlNjR1cmwocHJpdmF0ZUtleS5xSW52KSxcbiAgICAgICAgYWxnOiAnUlMyNTYnXG4gICAgfTtcbn1cbi8vIENvbnZlcnQgYSBKV0sga2V5IGludG8gUEtDUyMxIGluIEFTTjEgREVSIGZvcm1hdFxuZXhwb3J0IGZ1bmN0aW9uIGp3a1RvUGtjczEoandrKSB7XG4gICAgaWYgKGp3ay5uID09IG51bGwgfHwgandrLmUgPT0gbnVsbCB8fCBqd2suZCA9PSBudWxsIHx8IGp3ay5wID09IG51bGwgfHwgandrLnEgPT0gbnVsbCB8fCBqd2suZHAgPT0gbnVsbCB8fCBqd2suZHEgPT0gbnVsbCB8fCBqd2sucWkgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdKV0sgd2FzIG1pc3NpbmcgY29tcG9uZW50cycsICdFUlJfSU5WQUxJRF9QQVJBTUVURVJTJyk7XG4gICAgfVxuICAgIGNvbnN0IGFzbjEgPSBmb3JnZS5wa2kucHJpdmF0ZUtleVRvQXNuMSh7XG4gICAgICAgIG46IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2subiksXG4gICAgICAgIGU6IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2suZSksXG4gICAgICAgIGQ6IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2suZCksXG4gICAgICAgIHA6IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2sucCksXG4gICAgICAgIHE6IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2sucSksXG4gICAgICAgIGRQOiBiYXNlNjR1cmxUb0JpZ0ludGVnZXIoandrLmRwKSxcbiAgICAgICAgZFE6IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2suZHEpLFxuICAgICAgICBxSW52OiBiYXNlNjR1cmxUb0JpZ0ludGVnZXIoandrLnFpKVxuICAgIH0pO1xuICAgIHJldHVybiB1aW50OEFycmF5RnJvbVN0cmluZyhmb3JnZS5hc24xLnRvRGVyKGFzbjEpLmdldEJ5dGVzKCksICdhc2NpaScpO1xufVxuLy8gQ29udmVydCBhIFBLQ0lYIGluIEFTTjEgREVSIGZvcm1hdCB0byBhIEpXSyBrZXlcbmV4cG9ydCBmdW5jdGlvbiBwa2l4VG9Kd2soYnl0ZXMpIHtcbiAgICBjb25zdCBhc24xID0gZm9yZ2UuYXNuMS5mcm9tRGVyKHVpbnQ4QXJyYXlUb1N0cmluZyhieXRlcywgJ2FzY2lpJykpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IGZvcmdlLnBraS5wdWJsaWNLZXlGcm9tQXNuMShhc24xKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBrdHk6ICdSU0EnLFxuICAgICAgICBuOiBiaWdJbnRlZ2VyVG9VaW50QmFzZTY0dXJsKHB1YmxpY0tleS5uKSxcbiAgICAgICAgZTogYmlnSW50ZWdlclRvVWludEJhc2U2NHVybChwdWJsaWNLZXkuZSlcbiAgICB9O1xufVxuLy8gQ29udmVydCBhIEpXSyBrZXkgdG8gUEtDSVggaW4gQVNOMSBERVIgZm9ybWF0XG5leHBvcnQgZnVuY3Rpb24gandrVG9Qa2l4KGp3aykge1xuICAgIGlmIChqd2subiA9PSBudWxsIHx8IGp3ay5lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcignSldLIHdhcyBtaXNzaW5nIGNvbXBvbmVudHMnLCAnRVJSX0lOVkFMSURfUEFSQU1FVEVSUycpO1xuICAgIH1cbiAgICBjb25zdCBhc24xID0gZm9yZ2UucGtpLnB1YmxpY0tleVRvQXNuMSh7XG4gICAgICAgIG46IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2subiksXG4gICAgICAgIGU6IGJhc2U2NHVybFRvQmlnSW50ZWdlcihqd2suZSlcbiAgICB9KTtcbiAgICByZXR1cm4gdWludDhBcnJheUZyb21TdHJpbmcoZm9yZ2UuYXNuMS50b0Rlcihhc24xKS5nZXRCeXRlcygpLCAnYXNjaWknKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJzYS11dGlscy5qcy5tYXAiXSwibmFtZXMiOlsiQ29kZUVycm9yIiwiZm9yZ2UiLCJmcm9tU3RyaW5nIiwidWludDhBcnJheUZyb21TdHJpbmciLCJ0b1N0cmluZyIsInVpbnQ4QXJyYXlUb1N0cmluZyIsImJpZ0ludGVnZXJUb1VpbnRCYXNlNjR1cmwiLCJiYXNlNjR1cmxUb0JpZ0ludGVnZXIiLCJwa2NzMVRvSndrIiwiYnl0ZXMiLCJhc24xIiwiZnJvbURlciIsInByaXZhdGVLZXkiLCJwa2kiLCJwcml2YXRlS2V5RnJvbUFzbjEiLCJrdHkiLCJuIiwiZSIsImQiLCJwIiwicSIsImRwIiwiZFAiLCJkcSIsImRRIiwicWkiLCJxSW52IiwiYWxnIiwiandrVG9Qa2NzMSIsImp3ayIsInByaXZhdGVLZXlUb0FzbjEiLCJ0b0RlciIsImdldEJ5dGVzIiwicGtpeFRvSndrIiwicHVibGljS2V5IiwicHVibGljS2V5RnJvbUFzbjEiLCJqd2tUb1BraXgiLCJwdWJsaWNLZXlUb0FzbjEiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-utils.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa.js":
/*!***********************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa.js ***!
\***********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decrypt: () => (/* binding */ decrypt),\n/* harmony export */ encrypt: () => (/* binding */ encrypt),\n/* harmony export */ generateKey: () => (/* binding */ generateKey),\n/* harmony export */ getRandomValues: () => (/* reexport safe */ _random_bytes_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ hashAndSign: () => (/* binding */ hashAndSign),\n/* harmony export */ hashAndVerify: () => (/* binding */ hashAndVerify),\n/* harmony export */ keySize: () => (/* binding */ keySize),\n/* harmony export */ unmarshalPrivateKey: () => (/* binding */ unmarshalPrivateKey),\n/* harmony export */ utils: () => (/* reexport module object */ _rsa_utils_js__WEBPACK_IMPORTED_MODULE_3__)\n/* harmony export */ });\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! util */ \"util\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var _random_bytes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../random-bytes.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/random-bytes.js\");\n/* harmony import */ var _rsa_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rsa-utils.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa-utils.js\");\n\n\n\n\n\nconst keypair = (0,util__WEBPACK_IMPORTED_MODULE_1__.promisify)(crypto__WEBPACK_IMPORTED_MODULE_0__.generateKeyPair);\n\nasync function generateKey(bits) {\n // @ts-expect-error node types are missing jwk as a format\n const key = await keypair(\"rsa\", {\n modulusLength: bits,\n publicKeyEncoding: {\n type: \"pkcs1\",\n format: \"jwk\"\n },\n privateKeyEncoding: {\n type: \"pkcs1\",\n format: \"jwk\"\n }\n });\n return {\n // @ts-expect-error node types are missing jwk as a format\n privateKey: key.privateKey,\n // @ts-expect-error node types are missing jwk as a format\n publicKey: key.publicKey\n };\n}\n// Takes a jwk key\nasync function unmarshalPrivateKey(key) {\n if (key == null) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CodeError(\"Missing key parameter\", \"ERR_MISSING_KEY\");\n }\n return {\n privateKey: key,\n publicKey: {\n kty: key.kty,\n n: key.n,\n e: key.e\n }\n };\n}\n\nasync function hashAndSign(key, msg) {\n const hash = crypto__WEBPACK_IMPORTED_MODULE_0__.createSign(\"RSA-SHA256\");\n if (msg instanceof Uint8Array) {\n hash.update(msg);\n } else {\n for (const buf of msg){\n hash.update(buf);\n }\n }\n // @ts-expect-error node types are missing jwk as a format\n return hash.sign({\n format: \"jwk\",\n key\n });\n}\nasync function hashAndVerify(key, sig, msg) {\n const hash = crypto__WEBPACK_IMPORTED_MODULE_0__.createVerify(\"RSA-SHA256\");\n if (msg instanceof Uint8Array) {\n hash.update(msg);\n } else {\n for (const buf of msg){\n hash.update(buf);\n }\n }\n // @ts-expect-error node types are missing jwk as a format\n return hash.verify({\n format: \"jwk\",\n key\n }, sig);\n}\nconst padding = crypto__WEBPACK_IMPORTED_MODULE_0__.constants.RSA_PKCS1_PADDING;\nfunction encrypt(key, bytes) {\n if (bytes instanceof Uint8Array) {\n // @ts-expect-error node types are missing jwk as a format\n return crypto__WEBPACK_IMPORTED_MODULE_0__.publicEncrypt({\n format: \"jwk\",\n key,\n padding\n }, bytes);\n } else {\n // @ts-expect-error node types are missing jwk as a format\n return crypto__WEBPACK_IMPORTED_MODULE_0__.publicEncrypt({\n format: \"jwk\",\n key,\n padding\n }, bytes.subarray());\n }\n}\nfunction decrypt(key, bytes) {\n if (bytes instanceof Uint8Array) {\n // @ts-expect-error node types are missing jwk as a format\n return crypto__WEBPACK_IMPORTED_MODULE_0__.privateDecrypt({\n format: \"jwk\",\n key,\n padding\n }, bytes);\n } else {\n // @ts-expect-error node types are missing jwk as a format\n return crypto__WEBPACK_IMPORTED_MODULE_0__.privateDecrypt({\n format: \"jwk\",\n key,\n padding\n }, bytes.subarray());\n }\n}\nfunction keySize(jwk) {\n if (jwk.kty !== \"RSA\") {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CodeError(\"invalid key type\", \"ERR_INVALID_KEY_TYPE\");\n } else if (jwk.n == null) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_4__.CodeError(\"invalid key modulus\", \"ERR_INVALID_KEY_MODULUS\");\n }\n const modulus = Buffer.from(jwk.n, \"base64\");\n return modulus.length * 8;\n} //# sourceMappingURL=rsa.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvcnNhLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTRCO0FBQ0s7QUFDYTtBQUNEO0FBQ0w7QUFDeEMsTUFBTUssVUFBVUosK0NBQVNBLENBQUNELG1EQUFzQjtBQUMvQjtBQUNWLGVBQWVPLFlBQVlDLElBQUk7SUFDbEMsMERBQTBEO0lBQzFELE1BQU1DLE1BQU0sTUFBTUosUUFBUSxPQUFPO1FBQzdCSyxlQUFlRjtRQUNmRyxtQkFBbUI7WUFBRUMsTUFBTTtZQUFTQyxRQUFRO1FBQU07UUFDbERDLG9CQUFvQjtZQUFFRixNQUFNO1lBQVNDLFFBQVE7UUFBTTtJQUN2RDtJQUNBLE9BQU87UUFDSCwwREFBMEQ7UUFDMURFLFlBQVlOLElBQUlNLFVBQVU7UUFDMUIsMERBQTBEO1FBQzFEQyxXQUFXUCxJQUFJTyxTQUFTO0lBQzVCO0FBQ0o7QUFDQSxrQkFBa0I7QUFDWCxlQUFlQyxvQkFBb0JSLEdBQUc7SUFDekMsSUFBSUEsT0FBTyxNQUFNO1FBQ2IsTUFBTSxJQUFJUCx3REFBU0EsQ0FBQyx5QkFBeUI7SUFDakQ7SUFDQSxPQUFPO1FBQ0hhLFlBQVlOO1FBQ1pPLFdBQVc7WUFDUEUsS0FBS1QsSUFBSVMsR0FBRztZQUNaQyxHQUFHVixJQUFJVSxDQUFDO1lBQ1JDLEdBQUdYLElBQUlXLENBQUM7UUFDWjtJQUNKO0FBQ0o7QUFDMEM7QUFDbkMsZUFBZUUsWUFBWWIsR0FBRyxFQUFFYyxHQUFHO0lBQ3RDLE1BQU1DLE9BQU94Qiw4Q0FBaUIsQ0FBQztJQUMvQixJQUFJdUIsZUFBZUcsWUFBWTtRQUMzQkYsS0FBS0csTUFBTSxDQUFDSjtJQUNoQixPQUNLO1FBQ0QsS0FBSyxNQUFNSyxPQUFPTCxJQUFLO1lBQ25CQyxLQUFLRyxNQUFNLENBQUNDO1FBQ2hCO0lBQ0o7SUFDQSwwREFBMEQ7SUFDMUQsT0FBT0osS0FBS0ssSUFBSSxDQUFDO1FBQUVoQixRQUFRO1FBQU9KO0lBQUk7QUFDMUM7QUFDTyxlQUFlcUIsY0FBY3JCLEdBQUcsRUFBRXNCLEdBQUcsRUFBRVIsR0FBRztJQUM3QyxNQUFNQyxPQUFPeEIsZ0RBQW1CLENBQUM7SUFDakMsSUFBSXVCLGVBQWVHLFlBQVk7UUFDM0JGLEtBQUtHLE1BQU0sQ0FBQ0o7SUFDaEIsT0FDSztRQUNELEtBQUssTUFBTUssT0FBT0wsSUFBSztZQUNuQkMsS0FBS0csTUFBTSxDQUFDQztRQUNoQjtJQUNKO0lBQ0EsMERBQTBEO0lBQzFELE9BQU9KLEtBQUtTLE1BQU0sQ0FBQztRQUFFcEIsUUFBUTtRQUFPSjtJQUFJLEdBQUdzQjtBQUMvQztBQUNBLE1BQU1HLFVBQVVsQyw2Q0FBZ0IsQ0FBQ29DLGlCQUFpQjtBQUMzQyxTQUFTQyxRQUFRNUIsR0FBRyxFQUFFNkIsS0FBSztJQUM5QixJQUFJQSxpQkFBaUJaLFlBQVk7UUFDN0IsMERBQTBEO1FBQzFELE9BQU8xQixpREFBb0IsQ0FBQztZQUFFYSxRQUFRO1lBQU9KO1lBQUt5QjtRQUFRLEdBQUdJO0lBQ2pFLE9BQ0s7UUFDRCwwREFBMEQ7UUFDMUQsT0FBT3RDLGlEQUFvQixDQUFDO1lBQUVhLFFBQVE7WUFBT0o7WUFBS3lCO1FBQVEsR0FBR0ksTUFBTUUsUUFBUTtJQUMvRTtBQUNKO0FBQ08sU0FBU0MsUUFBUWhDLEdBQUcsRUFBRTZCLEtBQUs7SUFDOUIsSUFBSUEsaUJBQWlCWixZQUFZO1FBQzdCLDBEQUEwRDtRQUMxRCxPQUFPMUIsa0RBQXFCLENBQUM7WUFBRWEsUUFBUTtZQUFPSjtZQUFLeUI7UUFBUSxHQUFHSTtJQUNsRSxPQUNLO1FBQ0QsMERBQTBEO1FBQzFELE9BQU90QyxrREFBcUIsQ0FBQztZQUFFYSxRQUFRO1lBQU9KO1lBQUt5QjtRQUFRLEdBQUdJLE1BQU1FLFFBQVE7SUFDaEY7QUFDSjtBQUNPLFNBQVNHLFFBQVFDLEdBQUc7SUFDdkIsSUFBSUEsSUFBSTFCLEdBQUcsS0FBSyxPQUFPO1FBQ25CLE1BQU0sSUFBSWhCLHdEQUFTQSxDQUFDLG9CQUFvQjtJQUM1QyxPQUNLLElBQUkwQyxJQUFJekIsQ0FBQyxJQUFJLE1BQU07UUFDcEIsTUFBTSxJQUFJakIsd0RBQVNBLENBQUMsdUJBQXVCO0lBQy9DO0lBQ0EsTUFBTTJDLFVBQVVDLE9BQU9DLElBQUksQ0FBQ0gsSUFBSXpCLENBQUMsRUFBRTtJQUNuQyxPQUFPMEIsUUFBUUcsTUFBTSxHQUFHO0FBQzVCLEVBQ0EsK0JBQStCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvcnNhLmpzPzZiNzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyBDb2RlRXJyb3IgfSBmcm9tICdAbGlicDJwL2ludGVyZmFjZSc7XG5pbXBvcnQgcmFuZG9tQnl0ZXMgZnJvbSAnLi4vcmFuZG9tLWJ5dGVzLmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vcnNhLXV0aWxzLmpzJztcbmNvbnN0IGtleXBhaXIgPSBwcm9taXNpZnkoY3J5cHRvLmdlbmVyYXRlS2V5UGFpcik7XG5leHBvcnQgeyB1dGlscyB9O1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlS2V5KGJpdHMpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vZGUgdHlwZXMgYXJlIG1pc3NpbmcgandrIGFzIGEgZm9ybWF0XG4gICAgY29uc3Qga2V5ID0gYXdhaXQga2V5cGFpcigncnNhJywge1xuICAgICAgICBtb2R1bHVzTGVuZ3RoOiBiaXRzLFxuICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzogeyB0eXBlOiAncGtjczEnLCBmb3JtYXQ6ICdqd2snIH0sXG4gICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzogeyB0eXBlOiAncGtjczEnLCBmb3JtYXQ6ICdqd2snIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vZGUgdHlwZXMgYXJlIG1pc3NpbmcgandrIGFzIGEgZm9ybWF0XG4gICAgICAgIHByaXZhdGVLZXk6IGtleS5wcml2YXRlS2V5LFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vZGUgdHlwZXMgYXJlIG1pc3NpbmcgandrIGFzIGEgZm9ybWF0XG4gICAgICAgIHB1YmxpY0tleToga2V5LnB1YmxpY0tleVxuICAgIH07XG59XG4vLyBUYWtlcyBhIGp3ayBrZXlcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bm1hcnNoYWxQcml2YXRlS2V5KGtleSkge1xuICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdNaXNzaW5nIGtleSBwYXJhbWV0ZXInLCAnRVJSX01JU1NJTkdfS0VZJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByaXZhdGVLZXk6IGtleSxcbiAgICAgICAgcHVibGljS2V5OiB7XG4gICAgICAgICAgICBrdHk6IGtleS5rdHksXG4gICAgICAgICAgICBuOiBrZXkubixcbiAgICAgICAgICAgIGU6IGtleS5lXG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0IHsgcmFuZG9tQnl0ZXMgYXMgZ2V0UmFuZG9tVmFsdWVzIH07XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFzaEFuZFNpZ24oa2V5LCBtc2cpIHtcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZVNpZ24oJ1JTQS1TSEEyNTYnKTtcbiAgICBpZiAobXNnIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICBoYXNoLnVwZGF0ZShtc2cpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBidWYgb2YgbXNnKSB7XG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShidWYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igbm9kZSB0eXBlcyBhcmUgbWlzc2luZyBqd2sgYXMgYSBmb3JtYXRcbiAgICByZXR1cm4gaGFzaC5zaWduKHsgZm9ybWF0OiAnandrJywga2V5IH0pO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc2hBbmRWZXJpZnkoa2V5LCBzaWcsIG1zZykge1xuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KCdSU0EtU0hBMjU2Jyk7XG4gICAgaWYgKG1zZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgaGFzaC51cGRhdGUobXNnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgYnVmIG9mIG1zZykge1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoYnVmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vZGUgdHlwZXMgYXJlIG1pc3NpbmcgandrIGFzIGEgZm9ybWF0XG4gICAgcmV0dXJuIGhhc2gudmVyaWZ5KHsgZm9ybWF0OiAnandrJywga2V5IH0sIHNpZyk7XG59XG5jb25zdCBwYWRkaW5nID0gY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUEFERElORztcbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0KGtleSwgYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igbm9kZSB0eXBlcyBhcmUgbWlzc2luZyBqd2sgYXMgYSBmb3JtYXRcbiAgICAgICAgcmV0dXJuIGNyeXB0by5wdWJsaWNFbmNyeXB0KHsgZm9ybWF0OiAnandrJywga2V5LCBwYWRkaW5nIH0sIGJ5dGVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igbm9kZSB0eXBlcyBhcmUgbWlzc2luZyBqd2sgYXMgYSBmb3JtYXRcbiAgICAgICAgcmV0dXJuIGNyeXB0by5wdWJsaWNFbmNyeXB0KHsgZm9ybWF0OiAnandrJywga2V5LCBwYWRkaW5nIH0sIGJ5dGVzLnN1YmFycmF5KCkpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0KGtleSwgYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igbm9kZSB0eXBlcyBhcmUgbWlzc2luZyBqd2sgYXMgYSBmb3JtYXRcbiAgICAgICAgcmV0dXJuIGNyeXB0by5wcml2YXRlRGVjcnlwdCh7IGZvcm1hdDogJ2p3aycsIGtleSwgcGFkZGluZyB9LCBieXRlcyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vZGUgdHlwZXMgYXJlIG1pc3NpbmcgandrIGFzIGEgZm9ybWF0XG4gICAgICAgIHJldHVybiBjcnlwdG8ucHJpdmF0ZURlY3J5cHQoeyBmb3JtYXQ6ICdqd2snLCBrZXksIHBhZGRpbmcgfSwgYnl0ZXMuc3ViYXJyYXkoKSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGtleVNpemUoandrKSB7XG4gICAgaWYgKGp3ay5rdHkgIT09ICdSU0EnKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoJ2ludmFsaWQga2V5IHR5cGUnLCAnRVJSX0lOVkFMSURfS0VZX1RZUEUnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoandrLm4gPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdpbnZhbGlkIGtleSBtb2R1bHVzJywgJ0VSUl9JTlZBTElEX0tFWV9NT0RVTFVTJyk7XG4gICAgfVxuICAgIGNvbnN0IG1vZHVsdXMgPSBCdWZmZXIuZnJvbShqd2subiwgJ2Jhc2U2NCcpO1xuICAgIHJldHVybiBtb2R1bHVzLmxlbmd0aCAqIDg7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yc2EuanMubWFwIl0sIm5hbWVzIjpbImNyeXB0byIsInByb21pc2lmeSIsIkNvZGVFcnJvciIsInJhbmRvbUJ5dGVzIiwidXRpbHMiLCJrZXlwYWlyIiwiZ2VuZXJhdGVLZXlQYWlyIiwiZ2VuZXJhdGVLZXkiLCJiaXRzIiwia2V5IiwibW9kdWx1c0xlbmd0aCIsInB1YmxpY0tleUVuY29kaW5nIiwidHlwZSIsImZvcm1hdCIsInByaXZhdGVLZXlFbmNvZGluZyIsInByaXZhdGVLZXkiLCJwdWJsaWNLZXkiLCJ1bm1hcnNoYWxQcml2YXRlS2V5Iiwia3R5IiwibiIsImUiLCJnZXRSYW5kb21WYWx1ZXMiLCJoYXNoQW5kU2lnbiIsIm1zZyIsImhhc2giLCJjcmVhdGVTaWduIiwiVWludDhBcnJheSIsInVwZGF0ZSIsImJ1ZiIsInNpZ24iLCJoYXNoQW5kVmVyaWZ5Iiwic2lnIiwiY3JlYXRlVmVyaWZ5IiwidmVyaWZ5IiwicGFkZGluZyIsImNvbnN0YW50cyIsIlJTQV9QS0NTMV9QQURESU5HIiwiZW5jcnlwdCIsImJ5dGVzIiwicHVibGljRW5jcnlwdCIsInN1YmFycmF5IiwiZGVjcnlwdCIsInByaXZhdGVEZWNyeXB0Iiwia2V5U2l6ZSIsImp3ayIsIm1vZHVsdXMiLCJCdWZmZXIiLCJmcm9tIiwibGVuZ3RoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/rsa.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1-class.js":
/*!***********************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1-class.js ***!
\***********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Secp256k1PrivateKey: () => (/* binding */ Secp256k1PrivateKey),\n/* harmony export */ Secp256k1PublicKey: () => (/* binding */ Secp256k1PublicKey),\n/* harmony export */ generateKeyPair: () => (/* binding */ generateKeyPair),\n/* harmony export */ unmarshalSecp256k1PrivateKey: () => (/* binding */ unmarshalSecp256k1PrivateKey),\n/* harmony export */ unmarshalSecp256k1PublicKey: () => (/* binding */ unmarshalSecp256k1PublicKey)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! multiformats/hashes/sha2 */ \"(ssr)/./node_modules/multiformats/dist/src/hashes/sha2.js\");\n/* harmony import */ var uint8arrays_equals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uint8arrays/equals */ \"(ssr)/./node_modules/uint8arrays/dist/src/equals.js\");\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/util.js\");\n/* harmony import */ var _exporter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./exporter.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/exporter.js\");\n/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./keys.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/keys.js\");\n/* harmony import */ var _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./secp256k1.js */ \"(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1.js\");\n\n\n\n\n\n\n\n\nclass Secp256k1PublicKey {\n constructor(key){\n _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.validatePublicKey(key);\n this._key = key;\n }\n verify(data, sig) {\n return _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.hashAndVerify(this._key, sig, data);\n }\n marshal() {\n return _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.compressPublicKey(this._key);\n }\n get bytes() {\n return _keys_js__WEBPACK_IMPORTED_MODULE_5__.PublicKey.encode({\n Type: _keys_js__WEBPACK_IMPORTED_MODULE_5__.KeyType.Secp256k1,\n Data: this.marshal()\n }).subarray();\n }\n equals(key) {\n return (0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_1__.equals)(this.bytes, key.bytes);\n }\n async hash() {\n const p = multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__.sha256.digest(this.bytes);\n let bytes;\n if ((0,_util_js__WEBPACK_IMPORTED_MODULE_3__.isPromise)(p)) {\n ({ bytes } = await p);\n } else {\n bytes = p.bytes;\n }\n return bytes;\n }\n}\nclass Secp256k1PrivateKey {\n constructor(key, publicKey){\n this._key = key;\n this._publicKey = publicKey ?? _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.computePublicKey(key);\n _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.validatePrivateKey(this._key);\n _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.validatePublicKey(this._publicKey);\n }\n sign(message) {\n return _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.hashAndSign(this._key, message);\n }\n get public() {\n return new Secp256k1PublicKey(this._publicKey);\n }\n marshal() {\n return this._key;\n }\n get bytes() {\n return _keys_js__WEBPACK_IMPORTED_MODULE_5__.PrivateKey.encode({\n Type: _keys_js__WEBPACK_IMPORTED_MODULE_5__.KeyType.Secp256k1,\n Data: this.marshal()\n }).subarray();\n }\n equals(key) {\n return (0,uint8arrays_equals__WEBPACK_IMPORTED_MODULE_1__.equals)(this.bytes, key.bytes);\n }\n hash() {\n const p = multiformats_hashes_sha2__WEBPACK_IMPORTED_MODULE_0__.sha256.digest(this.bytes);\n if ((0,_util_js__WEBPACK_IMPORTED_MODULE_3__.isPromise)(p)) {\n return p.then(({ bytes })=>bytes);\n }\n return p.bytes;\n }\n /**\n * Gets the ID of the key.\n *\n * The key id is the base58 encoding of the SHA-256 multihash of its public key.\n * The public key is a protobuf encoding containing a type and the DER encoding\n * of the PKCS SubjectPublicKeyInfo.\n */ async id() {\n const hash = await this.public.hash();\n return (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_2__.toString)(hash, \"base58btc\");\n }\n /**\n * Exports the key into a password protected `format`\n */ async export(password, format = \"libp2p-key\") {\n if (format === \"libp2p-key\") {\n return (0,_exporter_js__WEBPACK_IMPORTED_MODULE_4__.exporter)(this.bytes, password);\n } else {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_7__.CodeError(`export format '${format}' is not supported`, \"ERR_INVALID_EXPORT_FORMAT\");\n }\n }\n}\nfunction unmarshalSecp256k1PrivateKey(bytes) {\n return new Secp256k1PrivateKey(bytes);\n}\nfunction unmarshalSecp256k1PublicKey(bytes) {\n return new Secp256k1PublicKey(bytes);\n}\nasync function generateKeyPair() {\n const privateKeyBytes = _secp256k1_js__WEBPACK_IMPORTED_MODULE_6__.generateKey();\n return new Secp256k1PrivateKey(privateKeyBytes);\n} //# sourceMappingURL=secp256k1-class.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvc2VjcDI1NmsxLWNsYXNzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOEM7QUFDSTtBQUNjO0FBQ087QUFDaEM7QUFDRTtBQUNDO0FBQ0Q7QUFDbEMsTUFBTVU7SUFFVEMsWUFBWUMsR0FBRyxDQUFFO1FBQ2JILDREQUF3QixDQUFDRztRQUN6QixJQUFJLENBQUNFLElBQUksR0FBR0Y7SUFDaEI7SUFDQUcsT0FBT0MsSUFBSSxFQUFFQyxHQUFHLEVBQUU7UUFDZCxPQUFPUix3REFBb0IsQ0FBQyxJQUFJLENBQUNLLElBQUksRUFBRUcsS0FBS0Q7SUFDaEQ7SUFDQUcsVUFBVTtRQUNOLE9BQU9WLDREQUF3QixDQUFDLElBQUksQ0FBQ0ssSUFBSTtJQUM3QztJQUNBLElBQUlPLFFBQVE7UUFDUixPQUFPYiwrQ0FBc0IsQ0FBQ2UsTUFBTSxDQUFDO1lBQ2pDQyxNQUFNaEIsNkNBQW9CLENBQUNrQixTQUFTO1lBQ3BDQyxNQUFNLElBQUksQ0FBQ1IsT0FBTztRQUN0QixHQUFHUyxRQUFRO0lBQ2Y7SUFDQTFCLE9BQU9VLEdBQUcsRUFBRTtRQUNSLE9BQU9ULDBEQUFnQkEsQ0FBQyxJQUFJLENBQUNrQixLQUFLLEVBQUVULElBQUlTLEtBQUs7SUFDakQ7SUFDQSxNQUFNUSxPQUFPO1FBQ1QsTUFBTUMsSUFBSTdCLDREQUFNQSxDQUFDOEIsTUFBTSxDQUFDLElBQUksQ0FBQ1YsS0FBSztRQUNsQyxJQUFJQTtRQUNKLElBQUlmLG1EQUFTQSxDQUFDd0IsSUFBSTtZQUNiLEdBQUVULEtBQUssRUFBRSxHQUFHLE1BQU1TLENBQUFBO1FBQ3ZCLE9BQ0s7WUFDRFQsUUFBUVMsRUFBRVQsS0FBSztRQUNuQjtRQUNBLE9BQU9BO0lBQ1g7QUFDSjtBQUNPLE1BQU1XO0lBR1RyQixZQUFZQyxHQUFHLEVBQUVxQixTQUFTLENBQUU7UUFDeEIsSUFBSSxDQUFDbkIsSUFBSSxHQUFHRjtRQUNaLElBQUksQ0FBQ3NCLFVBQVUsR0FBR0QsYUFBYXhCLDJEQUF1QixDQUFDRztRQUN2REgsNkRBQXlCLENBQUMsSUFBSSxDQUFDSyxJQUFJO1FBQ25DTCw0REFBd0IsQ0FBQyxJQUFJLENBQUN5QixVQUFVO0lBQzVDO0lBQ0FHLEtBQUtDLE9BQU8sRUFBRTtRQUNWLE9BQU83QixzREFBa0IsQ0FBQyxJQUFJLENBQUNLLElBQUksRUFBRXdCO0lBQ3pDO0lBQ0EsSUFBSUUsU0FBUztRQUNULE9BQU8sSUFBSTlCLG1CQUFtQixJQUFJLENBQUN3QixVQUFVO0lBQ2pEO0lBQ0FmLFVBQVU7UUFDTixPQUFPLElBQUksQ0FBQ0wsSUFBSTtJQUNwQjtJQUNBLElBQUlPLFFBQVE7UUFDUixPQUFPYixnREFBdUIsQ0FBQ2UsTUFBTSxDQUFDO1lBQ2xDQyxNQUFNaEIsNkNBQW9CLENBQUNrQixTQUFTO1lBQ3BDQyxNQUFNLElBQUksQ0FBQ1IsT0FBTztRQUN0QixHQUFHUyxRQUFRO0lBQ2Y7SUFDQTFCLE9BQU9VLEdBQUcsRUFBRTtRQUNSLE9BQU9ULDBEQUFnQkEsQ0FBQyxJQUFJLENBQUNrQixLQUFLLEVBQUVULElBQUlTLEtBQUs7SUFDakQ7SUFDQVEsT0FBTztRQUNILE1BQU1DLElBQUk3Qiw0REFBTUEsQ0FBQzhCLE1BQU0sQ0FBQyxJQUFJLENBQUNWLEtBQUs7UUFDbEMsSUFBSWYsbURBQVNBLENBQUN3QixJQUFJO1lBQ2QsT0FBT0EsRUFBRVksSUFBSSxDQUFDLENBQUMsRUFBRXJCLEtBQUssRUFBRSxHQUFLQTtRQUNqQztRQUNBLE9BQU9TLEVBQUVULEtBQUs7SUFDbEI7SUFDQTs7Ozs7O0tBTUMsR0FDRCxNQUFNc0IsS0FBSztRQUNQLE1BQU1kLE9BQU8sTUFBTSxJQUFJLENBQUNXLE1BQU0sQ0FBQ1gsSUFBSTtRQUNuQyxPQUFPeEIsK0RBQWtCQSxDQUFDd0IsTUFBTTtJQUNwQztJQUNBOztLQUVDLEdBQ0QsTUFBTWUsT0FBT0MsUUFBUSxFQUFFQyxTQUFTLFlBQVksRUFBRTtRQUMxQyxJQUFJQSxXQUFXLGNBQWM7WUFDekIsT0FBT3ZDLHNEQUFRQSxDQUFDLElBQUksQ0FBQ2MsS0FBSyxFQUFFd0I7UUFDaEMsT0FDSztZQUNELE1BQU0sSUFBSTdDLHdEQUFTQSxDQUFDLENBQUMsZUFBZSxFQUFFOEMsT0FBTyxrQkFBa0IsQ0FBQyxFQUFFO1FBQ3RFO0lBQ0o7QUFDSjtBQUNPLFNBQVNDLDZCQUE2QjFCLEtBQUs7SUFDOUMsT0FBTyxJQUFJVyxvQkFBb0JYO0FBQ25DO0FBQ08sU0FBUzJCLDRCQUE0QjNCLEtBQUs7SUFDN0MsT0FBTyxJQUFJWCxtQkFBbUJXO0FBQ2xDO0FBQ08sZUFBZTRCO0lBQ2xCLE1BQU1DLGtCQUFrQnpDLHNEQUFrQjtJQUMxQyxPQUFPLElBQUl1QixvQkFBb0JrQjtBQUNuQyxFQUNBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL25vZGVfbW9kdWxlcy9AbGlicDJwL2NyeXB0by9kaXN0L3NyYy9rZXlzL3NlY3AyNTZrMS1jbGFzcy5qcz85ODhhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZGVFcnJvciB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ211bHRpZm9ybWF0cy9oYXNoZXMvc2hhMic7XG5pbXBvcnQgeyBlcXVhbHMgYXMgdWludDhBcnJheUVxdWFscyB9IGZyb20gJ3VpbnQ4YXJyYXlzL2VxdWFscyc7XG5pbXBvcnQgeyB0b1N0cmluZyBhcyB1aW50OEFycmF5VG9TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy90by1zdHJpbmcnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyBleHBvcnRlciB9IGZyb20gJy4vZXhwb3J0ZXIuanMnO1xuaW1wb3J0ICogYXMga2V5c1Byb3RvYnVmIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnLi9zZWNwMjU2azEuanMnO1xuZXhwb3J0IGNsYXNzIFNlY3AyNTZrMVB1YmxpY0tleSB7XG4gICAgX2tleTtcbiAgICBjb25zdHJ1Y3RvcihrZXkpIHtcbiAgICAgICAgY3J5cHRvLnZhbGlkYXRlUHVibGljS2V5KGtleSk7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgdmVyaWZ5KGRhdGEsIHNpZykge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmhhc2hBbmRWZXJpZnkodGhpcy5fa2V5LCBzaWcsIGRhdGEpO1xuICAgIH1cbiAgICBtYXJzaGFsKCkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmNvbXByZXNzUHVibGljS2V5KHRoaXMuX2tleSk7XG4gICAgfVxuICAgIGdldCBieXRlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXNQcm90b2J1Zi5QdWJsaWNLZXkuZW5jb2RlKHtcbiAgICAgICAgICAgIFR5cGU6IGtleXNQcm90b2J1Zi5LZXlUeXBlLlNlY3AyNTZrMSxcbiAgICAgICAgICAgIERhdGE6IHRoaXMubWFyc2hhbCgpXG4gICAgICAgIH0pLnN1YmFycmF5KCk7XG4gICAgfVxuICAgIGVxdWFscyhrZXkpIHtcbiAgICAgICAgcmV0dXJuIHVpbnQ4QXJyYXlFcXVhbHModGhpcy5ieXRlcywga2V5LmJ5dGVzKTtcbiAgICB9XG4gICAgYXN5bmMgaGFzaCgpIHtcbiAgICAgICAgY29uc3QgcCA9IHNoYTI1Ni5kaWdlc3QodGhpcy5ieXRlcyk7XG4gICAgICAgIGxldCBieXRlcztcbiAgICAgICAgaWYgKGlzUHJvbWlzZShwKSkge1xuICAgICAgICAgICAgKHsgYnl0ZXMgfSA9IGF3YWl0IHApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnl0ZXMgPSBwLmJ5dGVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgU2VjcDI1NmsxUHJpdmF0ZUtleSB7XG4gICAgX2tleTtcbiAgICBfcHVibGljS2V5O1xuICAgIGNvbnN0cnVjdG9yKGtleSwgcHVibGljS2V5KSB7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICAgICAgdGhpcy5fcHVibGljS2V5ID0gcHVibGljS2V5ID8/IGNyeXB0by5jb21wdXRlUHVibGljS2V5KGtleSk7XG4gICAgICAgIGNyeXB0by52YWxpZGF0ZVByaXZhdGVLZXkodGhpcy5fa2V5KTtcbiAgICAgICAgY3J5cHRvLnZhbGlkYXRlUHVibGljS2V5KHRoaXMuX3B1YmxpY0tleSk7XG4gICAgfVxuICAgIHNpZ24obWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmhhc2hBbmRTaWduKHRoaXMuX2tleSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIGdldCBwdWJsaWMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VjcDI1NmsxUHVibGljS2V5KHRoaXMuX3B1YmxpY0tleSk7XG4gICAgfVxuICAgIG1hcnNoYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXk7XG4gICAgfVxuICAgIGdldCBieXRlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXNQcm90b2J1Zi5Qcml2YXRlS2V5LmVuY29kZSh7XG4gICAgICAgICAgICBUeXBlOiBrZXlzUHJvdG9idWYuS2V5VHlwZS5TZWNwMjU2azEsXG4gICAgICAgICAgICBEYXRhOiB0aGlzLm1hcnNoYWwoKVxuICAgICAgICB9KS5zdWJhcnJheSgpO1xuICAgIH1cbiAgICBlcXVhbHMoa2V5KSB7XG4gICAgICAgIHJldHVybiB1aW50OEFycmF5RXF1YWxzKHRoaXMuYnl0ZXMsIGtleS5ieXRlcyk7XG4gICAgfVxuICAgIGhhc2goKSB7XG4gICAgICAgIGNvbnN0IHAgPSBzaGEyNTYuZGlnZXN0KHRoaXMuYnl0ZXMpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHApKSB7XG4gICAgICAgICAgICByZXR1cm4gcC50aGVuKCh7IGJ5dGVzIH0pID0+IGJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcC5ieXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgSUQgb2YgdGhlIGtleS5cbiAgICAgKlxuICAgICAqIFRoZSBrZXkgaWQgaXMgdGhlIGJhc2U1OCBlbmNvZGluZyBvZiB0aGUgU0hBLTI1NiBtdWx0aWhhc2ggb2YgaXRzIHB1YmxpYyBrZXkuXG4gICAgICogVGhlIHB1YmxpYyBrZXkgaXMgYSBwcm90b2J1ZiBlbmNvZGluZyBjb250YWluaW5nIGEgdHlwZSBhbmQgdGhlIERFUiBlbmNvZGluZ1xuICAgICAqIG9mIHRoZSBQS0NTIFN1YmplY3RQdWJsaWNLZXlJbmZvLlxuICAgICAqL1xuICAgIGFzeW5jIGlkKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gYXdhaXQgdGhpcy5wdWJsaWMuaGFzaCgpO1xuICAgICAgICByZXR1cm4gdWludDhBcnJheVRvU3RyaW5nKGhhc2gsICdiYXNlNThidGMnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0cyB0aGUga2V5IGludG8gYSBwYXNzd29yZCBwcm90ZWN0ZWQgYGZvcm1hdGBcbiAgICAgKi9cbiAgICBhc3luYyBleHBvcnQocGFzc3dvcmQsIGZvcm1hdCA9ICdsaWJwMnAta2V5Jykge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbGlicDJwLWtleScpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRlcih0aGlzLmJ5dGVzLCBwYXNzd29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKGBleHBvcnQgZm9ybWF0ICcke2Zvcm1hdH0nIGlzIG5vdCBzdXBwb3J0ZWRgLCAnRVJSX0lOVkFMSURfRVhQT1JUX0ZPUk1BVCcpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbFNlY3AyNTZrMVByaXZhdGVLZXkoYnl0ZXMpIHtcbiAgICByZXR1cm4gbmV3IFNlY3AyNTZrMVByaXZhdGVLZXkoYnl0ZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVubWFyc2hhbFNlY3AyNTZrMVB1YmxpY0tleShieXRlcykge1xuICAgIHJldHVybiBuZXcgU2VjcDI1NmsxUHVibGljS2V5KGJ5dGVzKTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUtleVBhaXIoKSB7XG4gICAgY29uc3QgcHJpdmF0ZUtleUJ5dGVzID0gY3J5cHRvLmdlbmVyYXRlS2V5KCk7XG4gICAgcmV0dXJuIG5ldyBTZWNwMjU2azFQcml2YXRlS2V5KHByaXZhdGVLZXlCeXRlcyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZWNwMjU2azEtY2xhc3MuanMubWFwIl0sIm5hbWVzIjpbIkNvZGVFcnJvciIsInNoYTI1NiIsImVxdWFscyIsInVpbnQ4QXJyYXlFcXVhbHMiLCJ0b1N0cmluZyIsInVpbnQ4QXJyYXlUb1N0cmluZyIsImlzUHJvbWlzZSIsImV4cG9ydGVyIiwia2V5c1Byb3RvYnVmIiwiY3J5cHRvIiwiU2VjcDI1NmsxUHVibGljS2V5IiwiY29uc3RydWN0b3IiLCJrZXkiLCJ2YWxpZGF0ZVB1YmxpY0tleSIsIl9rZXkiLCJ2ZXJpZnkiLCJkYXRhIiwic2lnIiwiaGFzaEFuZFZlcmlmeSIsIm1hcnNoYWwiLCJjb21wcmVzc1B1YmxpY0tleSIsImJ5dGVzIiwiUHVibGljS2V5IiwiZW5jb2RlIiwiVHlwZSIsIktleVR5cGUiLCJTZWNwMjU2azEiLCJEYXRhIiwic3ViYXJyYXkiLCJoYXNoIiwicCIsImRpZ2VzdCIsIlNlY3AyNTZrMVByaXZhdGVLZXkiLCJwdWJsaWNLZXkiLCJfcHVibGljS2V5IiwiY29tcHV0ZVB1YmxpY0tleSIsInZhbGlkYXRlUHJpdmF0ZUtleSIsInNpZ24iLCJtZXNzYWdlIiwiaGFzaEFuZFNpZ24iLCJwdWJsaWMiLCJQcml2YXRlS2V5IiwidGhlbiIsImlkIiwiZXhwb3J0IiwicGFzc3dvcmQiLCJmb3JtYXQiLCJ1bm1hcnNoYWxTZWNwMjU2azFQcml2YXRlS2V5IiwidW5tYXJzaGFsU2VjcDI1NmsxUHVibGljS2V5IiwiZ2VuZXJhdGVLZXlQYWlyIiwicHJpdmF0ZUtleUJ5dGVzIiwiZ2VuZXJhdGVLZXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1-class.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1.js":
/*!*****************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1.js ***!
\*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ compressPublicKey: () => (/* binding */ compressPublicKey),\n/* harmony export */ computePublicKey: () => (/* binding */ computePublicKey),\n/* harmony export */ decompressPublicKey: () => (/* binding */ decompressPublicKey),\n/* harmony export */ generateKey: () => (/* binding */ generateKey),\n/* harmony export */ hashAndSign: () => (/* binding */ hashAndSign),\n/* harmony export */ hashAndVerify: () => (/* binding */ hashAndVerify),\n/* harmony export */ privateKeyLength: () => (/* binding */ PRIVATE_KEY_BYTE_LENGTH),\n/* harmony export */ validatePrivateKey: () => (/* binding */ validatePrivateKey),\n/* harmony export */ validatePublicKey: () => (/* binding */ validatePublicKey)\n/* harmony export */ });\n/* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:crypto */ \"node:crypto\");\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noble/curves/secp256k1 */ \"(ssr)/./node_modules/@noble/curves/esm/secp256k1.js\");\n\n\n\nconst PRIVATE_KEY_BYTE_LENGTH = 32;\n\nfunction generateKey() {\n return _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.utils.randomPrivateKey();\n}\n/**\n * Hash and sign message with private key\n */ function hashAndSign(key, msg) {\n const hash = node_crypto__WEBPACK_IMPORTED_MODULE_0__.createHash(\"sha256\");\n if (msg instanceof Uint8Array) {\n hash.update(msg);\n } else {\n for (const buf of msg){\n hash.update(buf);\n }\n }\n const digest = hash.digest();\n try {\n const signature = _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.sign(digest, key);\n return signature.toDERRawBytes();\n } catch (err) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_2__.CodeError(String(err), \"ERR_INVALID_INPUT\");\n }\n}\n/**\n * Hash message and verify signature with public key\n */ function hashAndVerify(key, sig, msg) {\n const hash = node_crypto__WEBPACK_IMPORTED_MODULE_0__.createHash(\"sha256\");\n if (msg instanceof Uint8Array) {\n hash.update(msg);\n } else {\n for (const buf of msg){\n hash.update(buf);\n }\n }\n const digest = hash.digest();\n try {\n return _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.verify(sig, digest, key);\n } catch (err) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_2__.CodeError(String(err), \"ERR_INVALID_INPUT\");\n }\n}\nfunction compressPublicKey(key) {\n const point = _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.ProjectivePoint.fromHex(key).toRawBytes(true);\n return point;\n}\nfunction decompressPublicKey(key) {\n const point = _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.ProjectivePoint.fromHex(key).toRawBytes(false);\n return point;\n}\nfunction validatePrivateKey(key) {\n try {\n _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.getPublicKey(key, true);\n } catch (err) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_2__.CodeError(String(err), \"ERR_INVALID_PRIVATE_KEY\");\n }\n}\nfunction validatePublicKey(key) {\n try {\n _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.ProjectivePoint.fromHex(key);\n } catch (err) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_2__.CodeError(String(err), \"ERR_INVALID_PUBLIC_KEY\");\n }\n}\nfunction computePublicKey(privateKey) {\n try {\n return _noble_curves_secp256k1__WEBPACK_IMPORTED_MODULE_1__.secp256k1.getPublicKey(privateKey, true);\n } catch (err) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_2__.CodeError(String(err), \"ERR_INVALID_PRIVATE_KEY\");\n }\n} //# sourceMappingURL=secp256k1.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL2tleXMvc2VjcDI1NmsxLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFpQztBQUNhO0FBQ2M7QUFDNUQsTUFBTUksMEJBQTBCO0FBQ3VCO0FBQ2hELFNBQVNFO0lBQ1osT0FBT0gsOERBQUlBLENBQUNJLEtBQUssQ0FBQ0MsZ0JBQWdCO0FBQ3RDO0FBQ0E7O0NBRUMsR0FDTSxTQUFTQyxZQUFZQyxHQUFHLEVBQUVDLEdBQUc7SUFDaEMsTUFBTUMsT0FBT1osbURBQWlCLENBQUM7SUFDL0IsSUFBSVcsZUFBZUcsWUFBWTtRQUMzQkYsS0FBS0csTUFBTSxDQUFDSjtJQUNoQixPQUNLO1FBQ0QsS0FBSyxNQUFNSyxPQUFPTCxJQUFLO1lBQ25CQyxLQUFLRyxNQUFNLENBQUNDO1FBQ2hCO0lBQ0o7SUFDQSxNQUFNQyxTQUFTTCxLQUFLSyxNQUFNO0lBQzFCLElBQUk7UUFDQSxNQUFNQyxZQUFZZiw4REFBSUEsQ0FBQ2dCLElBQUksQ0FBQ0YsUUFBUVA7UUFDcEMsT0FBT1EsVUFBVUUsYUFBYTtJQUNsQyxFQUNBLE9BQU9DLEtBQUs7UUFDUixNQUFNLElBQUlwQix3REFBU0EsQ0FBQ3FCLE9BQU9ELE1BQU07SUFDckM7QUFDSjtBQUNBOztDQUVDLEdBQ00sU0FBU0UsY0FBY2IsR0FBRyxFQUFFYyxHQUFHLEVBQUViLEdBQUc7SUFDdkMsTUFBTUMsT0FBT1osbURBQWlCLENBQUM7SUFDL0IsSUFBSVcsZUFBZUcsWUFBWTtRQUMzQkYsS0FBS0csTUFBTSxDQUFDSjtJQUNoQixPQUNLO1FBQ0QsS0FBSyxNQUFNSyxPQUFPTCxJQUFLO1lBQ25CQyxLQUFLRyxNQUFNLENBQUNDO1FBQ2hCO0lBQ0o7SUFDQSxNQUFNQyxTQUFTTCxLQUFLSyxNQUFNO0lBQzFCLElBQUk7UUFDQSxPQUFPZCw4REFBSUEsQ0FBQ3NCLE1BQU0sQ0FBQ0QsS0FBS1AsUUFBUVA7SUFDcEMsRUFDQSxPQUFPVyxLQUFLO1FBQ1IsTUFBTSxJQUFJcEIsd0RBQVNBLENBQUNxQixPQUFPRCxNQUFNO0lBQ3JDO0FBQ0o7QUFDTyxTQUFTSyxrQkFBa0JoQixHQUFHO0lBQ2pDLE1BQU1pQixRQUFReEIsOERBQUlBLENBQUN5QixlQUFlLENBQUNDLE9BQU8sQ0FBQ25CLEtBQUtvQixVQUFVLENBQUM7SUFDM0QsT0FBT0g7QUFDWDtBQUNPLFNBQVNJLG9CQUFvQnJCLEdBQUc7SUFDbkMsTUFBTWlCLFFBQVF4Qiw4REFBSUEsQ0FBQ3lCLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDbkIsS0FBS29CLFVBQVUsQ0FBQztJQUMzRCxPQUFPSDtBQUNYO0FBQ08sU0FBU0ssbUJBQW1CdEIsR0FBRztJQUNsQyxJQUFJO1FBQ0FQLDhEQUFJQSxDQUFDOEIsWUFBWSxDQUFDdkIsS0FBSztJQUMzQixFQUNBLE9BQU9XLEtBQUs7UUFDUixNQUFNLElBQUlwQix3REFBU0EsQ0FBQ3FCLE9BQU9ELE1BQU07SUFDckM7QUFDSjtBQUNPLFNBQVNhLGtCQUFrQnhCLEdBQUc7SUFDakMsSUFBSTtRQUNBUCw4REFBSUEsQ0FBQ3lCLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDbkI7SUFDakMsRUFDQSxPQUFPVyxLQUFLO1FBQ1IsTUFBTSxJQUFJcEIsd0RBQVNBLENBQUNxQixPQUFPRCxNQUFNO0lBQ3JDO0FBQ0o7QUFDTyxTQUFTYyxpQkFBaUJDLFVBQVU7SUFDdkMsSUFBSTtRQUNBLE9BQU9qQyw4REFBSUEsQ0FBQzhCLFlBQVksQ0FBQ0csWUFBWTtJQUN6QyxFQUNBLE9BQU9mLEtBQUs7UUFDUixNQUFNLElBQUlwQix3REFBU0EsQ0FBQ3FCLE9BQU9ELE1BQU07SUFDckM7QUFDSixFQUNBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbGlicDJwLW5vaXNlL25vZGVfbW9kdWxlcy9AbGlicDJwL2NyeXB0by9kaXN0L3NyYy9rZXlzL3NlY3AyNTZrMS5qcz80NDc2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgQ29kZUVycm9yIH0gZnJvbSAnQGxpYnAycC9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgc2VjcDI1NmsxIGFzIHNlY3AgfSBmcm9tICdAbm9ibGUvY3VydmVzL3NlY3AyNTZrMSc7XG5jb25zdCBQUklWQVRFX0tFWV9CWVRFX0xFTkdUSCA9IDMyO1xuZXhwb3J0IHsgUFJJVkFURV9LRVlfQllURV9MRU5HVEggYXMgcHJpdmF0ZUtleUxlbmd0aCB9O1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS2V5KCkge1xuICAgIHJldHVybiBzZWNwLnV0aWxzLnJhbmRvbVByaXZhdGVLZXkoKTtcbn1cbi8qKlxuICogSGFzaCBhbmQgc2lnbiBtZXNzYWdlIHdpdGggcHJpdmF0ZSBrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hBbmRTaWduKGtleSwgbXNnKSB7XG4gICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgICBpZiAobXNnIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICBoYXNoLnVwZGF0ZShtc2cpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBidWYgb2YgbXNnKSB7XG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShidWYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpZ2VzdCA9IGhhc2guZGlnZXN0KCk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2VjcC5zaWduKGRpZ2VzdCwga2V5KTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS50b0RFUlJhd0J5dGVzKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcihTdHJpbmcoZXJyKSwgJ0VSUl9JTlZBTElEX0lOUFVUJyk7XG4gICAgfVxufVxuLyoqXG4gKiBIYXNoIG1lc3NhZ2UgYW5kIHZlcmlmeSBzaWduYXR1cmUgd2l0aCBwdWJsaWMga2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoQW5kVmVyaWZ5KGtleSwgc2lnLCBtc2cpIHtcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICAgIGlmIChtc2cgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIGhhc2gudXBkYXRlKG1zZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBtc2cpIHtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGJ1Zik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlnZXN0ID0gaGFzaC5kaWdlc3QoKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2VjcC52ZXJpZnkoc2lnLCBkaWdlc3QsIGtleSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcihTdHJpbmcoZXJyKSwgJ0VSUl9JTlZBTElEX0lOUFVUJyk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXByZXNzUHVibGljS2V5KGtleSkge1xuICAgIGNvbnN0IHBvaW50ID0gc2VjcC5Qcm9qZWN0aXZlUG9pbnQuZnJvbUhleChrZXkpLnRvUmF3Qnl0ZXModHJ1ZSk7XG4gICAgcmV0dXJuIHBvaW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlY29tcHJlc3NQdWJsaWNLZXkoa2V5KSB7XG4gICAgY29uc3QgcG9pbnQgPSBzZWNwLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KGtleSkudG9SYXdCeXRlcyhmYWxzZSk7XG4gICAgcmV0dXJuIHBvaW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJpdmF0ZUtleShrZXkpIHtcbiAgICB0cnkge1xuICAgICAgICBzZWNwLmdldFB1YmxpY0tleShrZXksIHRydWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoU3RyaW5nKGVyciksICdFUlJfSU5WQUxJRF9QUklWQVRFX0tFWScpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVB1YmxpY0tleShrZXkpIHtcbiAgICB0cnkge1xuICAgICAgICBzZWNwLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KGtleSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvZGVFcnJvcihTdHJpbmcoZXJyKSwgJ0VSUl9JTlZBTElEX1BVQkxJQ19LRVknKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVB1YmxpY0tleShwcml2YXRlS2V5KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHNlY3AuZ2V0UHVibGljS2V5KHByaXZhdGVLZXksIHRydWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBDb2RlRXJyb3IoU3RyaW5nKGVyciksICdFUlJfSU5WQUxJRF9QUklWQVRFX0tFWScpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlY3AyNTZrMS5qcy5tYXAiXSwibmFtZXMiOlsiY3J5cHRvIiwiQ29kZUVycm9yIiwic2VjcDI1NmsxIiwic2VjcCIsIlBSSVZBVEVfS0VZX0JZVEVfTEVOR1RIIiwicHJpdmF0ZUtleUxlbmd0aCIsImdlbmVyYXRlS2V5IiwidXRpbHMiLCJyYW5kb21Qcml2YXRlS2V5IiwiaGFzaEFuZFNpZ24iLCJrZXkiLCJtc2ciLCJoYXNoIiwiY3JlYXRlSGFzaCIsIlVpbnQ4QXJyYXkiLCJ1cGRhdGUiLCJidWYiLCJkaWdlc3QiLCJzaWduYXR1cmUiLCJzaWduIiwidG9ERVJSYXdCeXRlcyIsImVyciIsIlN0cmluZyIsImhhc2hBbmRWZXJpZnkiLCJzaWciLCJ2ZXJpZnkiLCJjb21wcmVzc1B1YmxpY0tleSIsInBvaW50IiwiUHJvamVjdGl2ZVBvaW50IiwiZnJvbUhleCIsInRvUmF3Qnl0ZXMiLCJkZWNvbXByZXNzUHVibGljS2V5IiwidmFsaWRhdGVQcml2YXRlS2V5IiwiZ2V0UHVibGljS2V5IiwidmFsaWRhdGVQdWJsaWNLZXkiLCJjb21wdXRlUHVibGljS2V5IiwicHJpdmF0ZUtleSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/keys/secp256k1.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/random-bytes.js":
/*!***************************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/random-bytes.js ***!
\***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ randomBytes)\n/* harmony export */ });\n/* harmony import */ var _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libp2p/interface */ \"(ssr)/./node_modules/@libp2p/interface/dist/src/errors.js\");\n/* harmony import */ var _noble_hashes_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noble/hashes/utils */ \"(ssr)/./node_modules/@noble/hashes/esm/utils.js\");\n\n\n/**\n * Generates a Uint8Array with length `number` populated by random bytes\n */ function randomBytes(length) {\n if (isNaN(length) || length <= 0) {\n throw new _libp2p_interface__WEBPACK_IMPORTED_MODULE_0__.CodeError(\"random bytes length must be a Number bigger than 0\", \"ERR_INVALID_LENGTH\");\n }\n return (0,_noble_hashes_utils__WEBPACK_IMPORTED_MODULE_1__.randomBytes)(length);\n} //# sourceMappingURL=random-bytes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL3JhbmRvbS1ieXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEM7QUFDYTtBQUMzRDs7Q0FFQyxHQUNjLFNBQVNDLFlBQVlFLE1BQU07SUFDdEMsSUFBSUMsTUFBTUQsV0FBV0EsVUFBVSxHQUFHO1FBQzlCLE1BQU0sSUFBSUgsd0RBQVNBLENBQUMsc0RBQXNEO0lBQzlFO0lBQ0EsT0FBT0UsZ0VBQUtBLENBQUNDO0FBQ2pCLEVBQ0Esd0NBQXdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL3JhbmRvbS1ieXRlcy5qcz8yYTYzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZGVFcnJvciB9IGZyb20gJ0BsaWJwMnAvaW50ZXJmYWNlJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIGFzIHJhbmRCIH0gZnJvbSAnQG5vYmxlL2hhc2hlcy91dGlscyc7XG4vKipcbiAqIEdlbmVyYXRlcyBhIFVpbnQ4QXJyYXkgd2l0aCBsZW5ndGggYG51bWJlcmAgcG9wdWxhdGVkIGJ5IHJhbmRvbSBieXRlc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5kb21CeXRlcyhsZW5ndGgpIHtcbiAgICBpZiAoaXNOYU4obGVuZ3RoKSB8fCBsZW5ndGggPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29kZUVycm9yKCdyYW5kb20gYnl0ZXMgbGVuZ3RoIG11c3QgYmUgYSBOdW1iZXIgYmlnZ2VyIHRoYW4gMCcsICdFUlJfSU5WQUxJRF9MRU5HVEgnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmRCKGxlbmd0aCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYW5kb20tYnl0ZXMuanMubWFwIl0sIm5hbWVzIjpbIkNvZGVFcnJvciIsInJhbmRvbUJ5dGVzIiwicmFuZEIiLCJsZW5ndGgiLCJpc05hTiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/random-bytes.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/util.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/util.js ***!
\*******************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ base64urlToBigInteger: () => (/* binding */ base64urlToBigInteger),\n/* harmony export */ base64urlToBuffer: () => (/* binding */ base64urlToBuffer),\n/* harmony export */ bigIntegerToUintBase64url: () => (/* binding */ bigIntegerToUintBase64url),\n/* harmony export */ isPromise: () => (/* binding */ isPromise)\n/* harmony export */ });\n/* harmony import */ var node_forge_lib_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node-forge/lib/util.js */ \"(ssr)/./node_modules/node-forge/lib/util.js\");\n/* harmony import */ var node_forge_lib_jsbn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node-forge/lib/jsbn.js */ \"(ssr)/./node_modules/node-forge/lib/jsbn.js\");\n/* harmony import */ var node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node-forge/lib/forge.js */ \"(ssr)/./node_modules/node-forge/lib/forge.js\");\n/* harmony import */ var uint8arrays_concat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! uint8arrays/concat */ \"(ssr)/./node_modules/uint8arrays/dist/src/concat.node.js\");\n/* harmony import */ var uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! uint8arrays/from-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/from-string.node.js\");\n/* harmony import */ var uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! uint8arrays/to-string */ \"(ssr)/./node_modules/uint8arrays/dist/src/to-string.node.js\");\n\n\n// @ts-expect-error types are missing\n\n\n\n\nfunction bigIntegerToUintBase64url(num, len) {\n // Call `.abs()` to convert to unsigned\n let buf = Uint8Array.from(num.abs().toByteArray()); // toByteArray converts to big endian\n // toByteArray() gives us back a signed array, which will include a leading 0\n // byte if the most significant bit of the number is 1:\n // https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-integer\n // Our number will always be positive so we should remove the leading padding.\n buf = buf[0] === 0 ? buf.subarray(1) : buf;\n if (len != null) {\n if (buf.length > len) throw new Error(\"byte array longer than desired length\");\n buf = (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_3__.concat)([\n new Uint8Array(len - buf.length),\n buf\n ]);\n }\n return (0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_5__.toString)(buf, \"base64url\");\n}\n// Convert a base64url encoded string to a BigInteger\nfunction base64urlToBigInteger(str) {\n const buf = base64urlToBuffer(str);\n return new node_forge_lib_forge_js__WEBPACK_IMPORTED_MODULE_2__.jsbn.BigInteger((0,uint8arrays_to_string__WEBPACK_IMPORTED_MODULE_5__.toString)(buf, \"base16\"), 16);\n}\nfunction base64urlToBuffer(str, len) {\n let buf = (0,uint8arrays_from_string__WEBPACK_IMPORTED_MODULE_4__.fromString)(str, \"base64urlpad\");\n if (len != null) {\n if (buf.length > len) throw new Error(\"byte array longer than desired length\");\n buf = (0,uint8arrays_concat__WEBPACK_IMPORTED_MODULE_3__.concat)([\n new Uint8Array(len - buf.length),\n buf\n ]);\n }\n return buf;\n}\nfunction isPromise(thing) {\n if (thing == null) {\n return false;\n }\n return typeof thing.then === \"function\" && typeof thing.catch === \"function\" && typeof thing.finally === \"function\";\n} //# sourceMappingURL=util.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9saWJwMnAtbm9pc2Uvbm9kZV9tb2R1bGVzL0BsaWJwMnAvY3J5cHRvL2Rpc3Qvc3JjL3V0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFnQztBQUNBO0FBQ2hDLHFDQUFxQztBQUNPO0FBQ29CO0FBQ2E7QUFDTjtBQUNoRSxTQUFTTywwQkFBMEJDLEdBQUcsRUFBRUMsR0FBRztJQUM5Qyx1Q0FBdUM7SUFDdkMsSUFBSUMsTUFBTUMsV0FBV0MsSUFBSSxDQUFDSixJQUFJSyxHQUFHLEdBQUdDLFdBQVcsS0FBSyxxQ0FBcUM7SUFDekYsNkVBQTZFO0lBQzdFLHVEQUF1RDtJQUN2RCw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFSixNQUFNQSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUlBLElBQUlLLFFBQVEsQ0FBQyxLQUFLTDtJQUN2QyxJQUFJRCxPQUFPLE1BQU07UUFDYixJQUFJQyxJQUFJTSxNQUFNLEdBQUdQLEtBQ2IsTUFBTSxJQUFJUSxNQUFNO1FBQ3BCUCxNQUFNUiwwREFBZ0JBLENBQUM7WUFBQyxJQUFJUyxXQUFXRixNQUFNQyxJQUFJTSxNQUFNO1lBQUdOO1NBQUk7SUFDbEU7SUFDQSxPQUFPSiwrREFBa0JBLENBQUNJLEtBQUs7QUFDbkM7QUFDQSxxREFBcUQ7QUFDOUMsU0FBU1Esc0JBQXNCQyxHQUFHO0lBQ3JDLE1BQU1ULE1BQU1VLGtCQUFrQkQ7SUFDOUIsT0FBTyxJQUFJbkIseURBQVUsQ0FBQ3NCLFVBQVUsQ0FBQ2hCLCtEQUFrQkEsQ0FBQ0ksS0FBSyxXQUFXO0FBQ3hFO0FBQ08sU0FBU1Usa0JBQWtCRCxHQUFHLEVBQUVWLEdBQUc7SUFDdEMsSUFBSUMsTUFBTU4sbUVBQW9CQSxDQUFDZSxLQUFLO0lBQ3BDLElBQUlWLE9BQU8sTUFBTTtRQUNiLElBQUlDLElBQUlNLE1BQU0sR0FBR1AsS0FDYixNQUFNLElBQUlRLE1BQU07UUFDcEJQLE1BQU1SLDBEQUFnQkEsQ0FBQztZQUFDLElBQUlTLFdBQVdGLE1BQU1DLElBQUlNLE1BQU07WUFBR047U0FBSTtJQUNsRTtJQUNBLE9BQU9BO0FBQ1g7QUFDTyxTQUFTYSxVQUFVQyxLQUFLO0lBQzNCLElBQUlBLFNBQVMsTUFBTTtRQUNmLE9BQU87SUFDWDtJQUNBLE9BQU8sT0FBT0EsTUFBTUMsSUFBSSxLQUFLLGNBQ3pCLE9BQU9ELE1BQU1FLEtBQUssS0FBSyxjQUN2QixPQUFPRixNQUFNRyxPQUFPLEtBQUs7QUFDakMsRUFDQSxnQ0FBZ0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL2xpYnAycC1ub2lzZS9ub2RlX21vZHVsZXMvQGxpYnAycC9jcnlwdG8vZGlzdC9zcmMvdXRpbC5qcz9iZGZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnbm9kZS1mb3JnZS9saWIvdXRpbC5qcyc7XG5pbXBvcnQgJ25vZGUtZm9yZ2UvbGliL2pzYm4uanMnO1xuLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlcyBhcmUgbWlzc2luZ1xuaW1wb3J0IGZvcmdlIGZyb20gJ25vZGUtZm9yZ2UvbGliL2ZvcmdlLmpzJztcbmltcG9ydCB7IGNvbmNhdCBhcyB1aW50OEFycmF5Q29uY2F0IH0gZnJvbSAndWludDhhcnJheXMvY29uY2F0JztcbmltcG9ydCB7IGZyb21TdHJpbmcgYXMgdWludDhBcnJheUZyb21TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy9mcm9tLXN0cmluZyc7XG5pbXBvcnQgeyB0b1N0cmluZyBhcyB1aW50OEFycmF5VG9TdHJpbmcgfSBmcm9tICd1aW50OGFycmF5cy90by1zdHJpbmcnO1xuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludGVnZXJUb1VpbnRCYXNlNjR1cmwobnVtLCBsZW4pIHtcbiAgICAvLyBDYWxsIGAuYWJzKClgIHRvIGNvbnZlcnQgdG8gdW5zaWduZWRcbiAgICBsZXQgYnVmID0gVWludDhBcnJheS5mcm9tKG51bS5hYnMoKS50b0J5dGVBcnJheSgpKTsgLy8gdG9CeXRlQXJyYXkgY29udmVydHMgdG8gYmlnIGVuZGlhblxuICAgIC8vIHRvQnl0ZUFycmF5KCkgZ2l2ZXMgdXMgYmFjayBhIHNpZ25lZCBhcnJheSwgd2hpY2ggd2lsbCBpbmNsdWRlIGEgbGVhZGluZyAwXG4gICAgLy8gYnl0ZSBpZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIG51bWJlciBpcyAxOlxuICAgIC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvc2VjY2VydGVucm9sbC9hYm91dC1pbnRlZ2VyXG4gICAgLy8gT3VyIG51bWJlciB3aWxsIGFsd2F5cyBiZSBwb3NpdGl2ZSBzbyB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBsZWFkaW5nIHBhZGRpbmcuXG4gICAgYnVmID0gYnVmWzBdID09PSAwID8gYnVmLnN1YmFycmF5KDEpIDogYnVmO1xuICAgIGlmIChsZW4gIT0gbnVsbCkge1xuICAgICAgICBpZiAoYnVmLmxlbmd0aCA+IGxlbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCcpO1xuICAgICAgICBidWYgPSB1aW50OEFycmF5Q29uY2F0KFtuZXcgVWludDhBcnJheShsZW4gLSBidWYubGVuZ3RoKSwgYnVmXSk7XG4gICAgfVxuICAgIHJldHVybiB1aW50OEFycmF5VG9TdHJpbmcoYnVmLCAnYmFzZTY0dXJsJyk7XG59XG4vLyBDb252ZXJ0IGEgYmFzZTY0dXJsIGVuY29kZWQgc3RyaW5nIHRvIGEgQmlnSW50ZWdlclxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NHVybFRvQmlnSW50ZWdlcihzdHIpIHtcbiAgICBjb25zdCBidWYgPSBiYXNlNjR1cmxUb0J1ZmZlcihzdHIpO1xuICAgIHJldHVybiBuZXcgZm9yZ2UuanNibi5CaWdJbnRlZ2VyKHVpbnQ4QXJyYXlUb1N0cmluZyhidWYsICdiYXNlMTYnKSwgMTYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NHVybFRvQnVmZmVyKHN0ciwgbGVuKSB7XG4gICAgbGV0IGJ1ZiA9IHVpbnQ4QXJyYXlGcm9tU3RyaW5nKHN0ciwgJ2Jhc2U2NHVybHBhZCcpO1xuICAgIGlmIChsZW4gIT0gbnVsbCkge1xuICAgICAgICBpZiAoYnVmLmxlbmd0aCA+IGxlbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCcpO1xuICAgICAgICBidWYgPSB1aW50OEFycmF5Q29uY2F0KFtuZXcgVWludDhBcnJheShsZW4gLSBidWYubGVuZ3RoKSwgYnVmXSk7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlKHRoaW5nKSB7XG4gICAgaWYgKHRoaW5nID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgdHlwZW9mIHRoaW5nLmNhdGNoID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiB0aGluZy5maW5hbGx5ID09PSAnZnVuY3Rpb24nO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiXSwibmFtZXMiOlsiZm9yZ2UiLCJjb25jYXQiLCJ1aW50OEFycmF5Q29uY2F0IiwiZnJvbVN0cmluZyIsInVpbnQ4QXJyYXlGcm9tU3RyaW5nIiwidG9TdHJpbmciLCJ1aW50OEFycmF5VG9TdHJpbmciLCJiaWdJbnRlZ2VyVG9VaW50QmFzZTY0dXJsIiwibnVtIiwibGVuIiwiYnVmIiwiVWludDhBcnJheSIsImZyb20iLCJhYnMiLCJ0b0J5dGVBcnJheSIsInN1YmFycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJiYXNlNjR1cmxUb0JpZ0ludGVnZXIiLCJzdHIiLCJiYXNlNjR1cmxUb0J1ZmZlciIsImpzYm4iLCJCaWdJbnRlZ2VyIiwiaXNQcm9taXNlIiwidGhpbmciLCJ0aGVuIiwiY2F0Y2giLCJmaW5hbGx5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/libp2p-noise/node_modules/@libp2p/crypto/dist/src/util.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/netmask/dist/src/cidr.js":
/*!**********************************************************!*\
!*** ./node_modules/@chainsafe/netmask/dist/src/cidr.js ***!
\**********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cidrMask: () => (/* binding */ cidrMask),\n/* harmony export */ parseCidr: () => (/* binding */ parseCidr)\n/* harmony export */ });\n/* harmony import */ var _chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @chainsafe/is-ip/parse */ \"(ssr)/./node_modules/@chainsafe/is-ip/lib/parse.js\");\n/* harmony import */ var _ip_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ip.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/ip.js\");\n\n\nfunction parseCidr(s) {\n const [address, maskString] = s.split(\"/\");\n if (!address || !maskString) throw new Error(\"Failed to parse given CIDR: \" + s);\n let ipLength = _ip_js__WEBPACK_IMPORTED_MODULE_1__.IPv4Len;\n let ip = (0,_chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__.parseIPv4)(address);\n if (ip == null) {\n ipLength = _ip_js__WEBPACK_IMPORTED_MODULE_1__.IPv6Len;\n ip = (0,_chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__.parseIPv6)(address);\n if (ip == null) throw new Error(\"Failed to parse given CIDR: \" + s);\n }\n const m = parseInt(maskString, 10);\n if (Number.isNaN(m) || String(m).length !== maskString.length || m < 0 || m > ipLength * 8) {\n throw new Error(\"Failed to parse given CIDR: \" + s);\n }\n const mask = cidrMask(m, 8 * ipLength);\n return {\n network: (0,_ip_js__WEBPACK_IMPORTED_MODULE_1__.maskIp)(ip, mask),\n mask\n };\n}\nfunction cidrMask(ones, bits) {\n if (bits !== 8 * _ip_js__WEBPACK_IMPORTED_MODULE_1__.IPv4Len && bits !== 8 * _ip_js__WEBPACK_IMPORTED_MODULE_1__.IPv6Len) throw new Error(\"Invalid CIDR mask\");\n if (ones < 0 || ones > bits) throw new Error(\"Invalid CIDR mask\");\n const l = bits / 8;\n const m = new Uint8Array(l);\n for(let i = 0; i < l; i++){\n if (ones >= 8) {\n m[i] = 0xff;\n ones -= 8;\n continue;\n }\n m[i] = 255 - (0xff >> ones);\n ones = 0;\n }\n return m;\n} //# sourceMappingURL=cidr.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9uZXRtYXNrL2Rpc3Qvc3JjL2NpZHIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE4RDtBQUNYO0FBQzVDLFNBQVNLLFVBQVVDLENBQUM7SUFDdkIsTUFBTSxDQUFDQyxTQUFTQyxXQUFXLEdBQUdGLEVBQUVHLEtBQUssQ0FBQztJQUN0QyxJQUFJLENBQUNGLFdBQVcsQ0FBQ0MsWUFDYixNQUFNLElBQUlFLE1BQU0saUNBQWlDSjtJQUNyRCxJQUFJSyxXQUFXVCwyQ0FBT0E7SUFDdEIsSUFBSVUsS0FBS1osaUVBQVNBLENBQUNPO0lBQ25CLElBQUlLLE1BQU0sTUFBTTtRQUNaRCxXQUFXUiwyQ0FBT0E7UUFDbEJTLEtBQUtYLGlFQUFTQSxDQUFDTTtRQUNmLElBQUlLLE1BQU0sTUFDTixNQUFNLElBQUlGLE1BQU0saUNBQWlDSjtJQUN6RDtJQUNBLE1BQU1PLElBQUlDLFNBQVNOLFlBQVk7SUFDL0IsSUFBSU8sT0FBT0MsS0FBSyxDQUFDSCxNQUNiSSxPQUFPSixHQUFHSyxNQUFNLEtBQUtWLFdBQVdVLE1BQU0sSUFDdENMLElBQUksS0FDSkEsSUFBSUYsV0FBVyxHQUFHO1FBQ2xCLE1BQU0sSUFBSUQsTUFBTSxpQ0FBaUNKO0lBQ3JEO0lBQ0EsTUFBTWEsT0FBT0MsU0FBU1AsR0FBRyxJQUFJRjtJQUM3QixPQUFPO1FBQ0hVLFNBQVNqQiw4Q0FBTUEsQ0FBQ1EsSUFBSU87UUFDcEJBO0lBQ0o7QUFDSjtBQUNPLFNBQVNDLFNBQVNFLElBQUksRUFBRUMsSUFBSTtJQUMvQixJQUFJQSxTQUFTLElBQUlyQiwyQ0FBT0EsSUFBSXFCLFNBQVMsSUFBSXBCLDJDQUFPQSxFQUM1QyxNQUFNLElBQUlPLE1BQU07SUFDcEIsSUFBSVksT0FBTyxLQUFLQSxPQUFPQyxNQUNuQixNQUFNLElBQUliLE1BQU07SUFDcEIsTUFBTWMsSUFBSUQsT0FBTztJQUNqQixNQUFNVixJQUFJLElBQUlZLFdBQVdEO0lBQ3pCLElBQUssSUFBSUUsSUFBSSxHQUFHQSxJQUFJRixHQUFHRSxJQUFLO1FBQ3hCLElBQUlKLFFBQVEsR0FBRztZQUNYVCxDQUFDLENBQUNhLEVBQUUsR0FBRztZQUNQSixRQUFRO1lBQ1I7UUFDSjtRQUNBVCxDQUFDLENBQUNhLEVBQUUsR0FBRyxNQUFPLFNBQVFKLElBQUc7UUFDekJBLE9BQU87SUFDWDtJQUNBLE9BQU9UO0FBQ1gsRUFDQSxnQ0FBZ0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL25ldG1hc2svZGlzdC9zcmMvY2lkci5qcz8zM2MzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlSVB2NCwgcGFyc2VJUHY2IH0gZnJvbSBcIkBjaGFpbnNhZmUvaXMtaXAvcGFyc2VcIjtcbmltcG9ydCB7IElQdjRMZW4sIElQdjZMZW4sIG1hc2tJcCB9IGZyb20gXCIuL2lwLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDaWRyKHMpIHtcbiAgICBjb25zdCBbYWRkcmVzcywgbWFza1N0cmluZ10gPSBzLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAoIWFkZHJlc3MgfHwgIW1hc2tTdHJpbmcpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBnaXZlbiBDSURSOiBcIiArIHMpO1xuICAgIGxldCBpcExlbmd0aCA9IElQdjRMZW47XG4gICAgbGV0IGlwID0gcGFyc2VJUHY0KGFkZHJlc3MpO1xuICAgIGlmIChpcCA9PSBudWxsKSB7XG4gICAgICAgIGlwTGVuZ3RoID0gSVB2NkxlbjtcbiAgICAgICAgaXAgPSBwYXJzZUlQdjYoYWRkcmVzcyk7XG4gICAgICAgIGlmIChpcCA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGdpdmVuIENJRFI6IFwiICsgcyk7XG4gICAgfVxuICAgIGNvbnN0IG0gPSBwYXJzZUludChtYXNrU3RyaW5nLCAxMCk7XG4gICAgaWYgKE51bWJlci5pc05hTihtKSB8fFxuICAgICAgICBTdHJpbmcobSkubGVuZ3RoICE9PSBtYXNrU3RyaW5nLmxlbmd0aCB8fFxuICAgICAgICBtIDwgMCB8fFxuICAgICAgICBtID4gaXBMZW5ndGggKiA4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBnaXZlbiBDSURSOiBcIiArIHMpO1xuICAgIH1cbiAgICBjb25zdCBtYXNrID0gY2lkck1hc2sobSwgOCAqIGlwTGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBuZXR3b3JrOiBtYXNrSXAoaXAsIG1hc2spLFxuICAgICAgICBtYXNrLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY2lkck1hc2sob25lcywgYml0cykge1xuICAgIGlmIChiaXRzICE9PSA4ICogSVB2NExlbiAmJiBiaXRzICE9PSA4ICogSVB2NkxlbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBDSURSIG1hc2tcIik7XG4gICAgaWYgKG9uZXMgPCAwIHx8IG9uZXMgPiBiaXRzKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIENJRFIgbWFza1wiKTtcbiAgICBjb25zdCBsID0gYml0cyAvIDg7XG4gICAgY29uc3QgbSA9IG5ldyBVaW50OEFycmF5KGwpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChvbmVzID49IDgpIHtcbiAgICAgICAgICAgIG1baV0gPSAweGZmO1xuICAgICAgICAgICAgb25lcyAtPSA4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbVtpXSA9IDI1NSAtICgweGZmID4+IG9uZXMpO1xuICAgICAgICBvbmVzID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaWRyLmpzLm1hcCJdLCJuYW1lcyI6WyJwYXJzZUlQdjQiLCJwYXJzZUlQdjYiLCJJUHY0TGVuIiwiSVB2NkxlbiIsIm1hc2tJcCIsInBhcnNlQ2lkciIsInMiLCJhZGRyZXNzIiwibWFza1N0cmluZyIsInNwbGl0IiwiRXJyb3IiLCJpcExlbmd0aCIsImlwIiwibSIsInBhcnNlSW50IiwiTnVtYmVyIiwiaXNOYU4iLCJTdHJpbmciLCJsZW5ndGgiLCJtYXNrIiwiY2lkck1hc2siLCJuZXR3b3JrIiwib25lcyIsImJpdHMiLCJsIiwiVWludDhBcnJheSIsImkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/netmask/dist/src/cidr.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/netmask/dist/src/index.js":
/*!***********************************************************!*\
!*** ./node_modules/@chainsafe/netmask/dist/src/index.js ***!
\***********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IpNet: () => (/* reexport safe */ _ipnet_js__WEBPACK_IMPORTED_MODULE_0__.IpNet),\n/* harmony export */ cidrContains: () => (/* binding */ cidrContains),\n/* harmony export */ iPv4FromIPv6: () => (/* reexport safe */ _ip_js__WEBPACK_IMPORTED_MODULE_2__.iPv4FromIPv6),\n/* harmony export */ ipToString: () => (/* reexport safe */ _util_js__WEBPACK_IMPORTED_MODULE_1__.ipToString),\n/* harmony export */ isIPv4mappedIPv6: () => (/* reexport safe */ _ip_js__WEBPACK_IMPORTED_MODULE_2__.isIPv4mappedIPv6),\n/* harmony export */ maskIp: () => (/* reexport safe */ _ip_js__WEBPACK_IMPORTED_MODULE_2__.maskIp),\n/* harmony export */ parseCidr: () => (/* reexport safe */ _cidr_js__WEBPACK_IMPORTED_MODULE_3__.parseCidr)\n/* harmony export */ });\n/* harmony import */ var _ipnet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ipnet.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/ipnet.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/util.js\");\n/* harmony import */ var _ip_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ip.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/ip.js\");\n/* harmony import */ var _cidr_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cidr.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/cidr.js\");\n\n\n\n\n\n/**\n * Checks if cidr block contains ip address\n * @param cidr ipv4 or ipv6 formatted cidr . Example 198.51.100.14/24 or 2001:db8::/48\n * @param ip ipv4 or ipv6 address Example 198.51.100.14 or 2001:db8::\n *\n */ function cidrContains(cidr, ip) {\n const ipnet = new _ipnet_js__WEBPACK_IMPORTED_MODULE_0__.IpNet(cidr);\n return ipnet.contains(ip);\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9uZXRtYXNrL2Rpc3Qvc3JjL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQW1DO0FBQ0k7QUFDMEI7QUFDOUI7QUFDRztBQUN0Qzs7Ozs7Q0FLQyxHQUNNLFNBQVNNLGFBQWFDLElBQUksRUFBRUMsRUFBRTtJQUNqQyxNQUFNQyxRQUFRLElBQUlULDRDQUFLQSxDQUFDTztJQUN4QixPQUFPRSxNQUFNQyxRQUFRLENBQUNGO0FBQzFCLEVBQ0EsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZmx1c2gtbm90ZXMvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9uZXRtYXNrL2Rpc3Qvc3JjL2luZGV4LmpzPzU2MTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSXBOZXQgfSBmcm9tIFwiLi9pcG5ldC5qc1wiO1xuZXhwb3J0IHsgaXBUb1N0cmluZyB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCB7IG1hc2tJcCwgaVB2NEZyb21JUHY2LCBpc0lQdjRtYXBwZWRJUHY2IH0gZnJvbSBcIi4vaXAuanNcIjtcbmV4cG9ydCB7IElwTmV0IH0gZnJvbSBcIi4vaXBuZXQuanNcIjtcbmV4cG9ydCB7IHBhcnNlQ2lkciB9IGZyb20gXCIuL2NpZHIuanNcIjtcbi8qKlxuICogQ2hlY2tzIGlmIGNpZHIgYmxvY2sgY29udGFpbnMgaXAgYWRkcmVzc1xuICogQHBhcmFtIGNpZHIgaXB2NCBvciBpcHY2IGZvcm1hdHRlZCBjaWRyIC4gRXhhbXBsZSAxOTguNTEuMTAwLjE0LzI0IG9yIDIwMDE6ZGI4OjovNDhcbiAqIEBwYXJhbSBpcCBpcHY0IG9yIGlwdjYgYWRkcmVzcyBFeGFtcGxlIDE5OC41MS4xMDAuMTQgb3IgMjAwMTpkYjg6OlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNpZHJDb250YWlucyhjaWRyLCBpcCkge1xuICAgIGNvbnN0IGlwbmV0ID0gbmV3IElwTmV0KGNpZHIpO1xuICAgIHJldHVybiBpcG5ldC5jb250YWlucyhpcCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiSXBOZXQiLCJpcFRvU3RyaW5nIiwibWFza0lwIiwiaVB2NEZyb21JUHY2IiwiaXNJUHY0bWFwcGVkSVB2NiIsInBhcnNlQ2lkciIsImNpZHJDb250YWlucyIsImNpZHIiLCJpcCIsImlwbmV0IiwiY29udGFpbnMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/netmask/dist/src/index.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/netmask/dist/src/ip.js":
/*!********************************************************!*\
!*** ./node_modules/@chainsafe/netmask/dist/src/ip.js ***!
\********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IPv4Len: () => (/* binding */ IPv4Len),\n/* harmony export */ IPv6Len: () => (/* binding */ IPv6Len),\n/* harmony export */ containsIp: () => (/* binding */ containsIp),\n/* harmony export */ iPv4FromIPv6: () => (/* binding */ iPv4FromIPv6),\n/* harmony export */ ipv4Prefix: () => (/* binding */ ipv4Prefix),\n/* harmony export */ isIPv4mappedIPv6: () => (/* binding */ isIPv4mappedIPv6),\n/* harmony export */ maskIp: () => (/* binding */ maskIp),\n/* harmony export */ maxIPv6Octet: () => (/* binding */ maxIPv6Octet)\n/* harmony export */ });\n/* harmony import */ var _chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @chainsafe/is-ip/parse */ \"(ssr)/./node_modules/@chainsafe/is-ip/lib/parse.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/util.js\");\n\n\nconst IPv4Len = 4;\nconst IPv6Len = 16;\nconst maxIPv6Octet = parseInt(\"0xFFFF\", 16);\nconst ipv4Prefix = new Uint8Array([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 255,\n 255\n]);\nfunction maskIp(ip, mask) {\n if (mask.length === IPv6Len && ip.length === IPv4Len && (0,_util_js__WEBPACK_IMPORTED_MODULE_1__.allFF)(mask, 0, 11)) {\n mask = mask.slice(12);\n }\n if (mask.length === IPv4Len && ip.length === IPv6Len && (0,_util_js__WEBPACK_IMPORTED_MODULE_1__.deepEqual)(ip, ipv4Prefix, 0, 11)) {\n ip = ip.slice(12);\n }\n const n = ip.length;\n if (n != mask.length) {\n throw new Error(\"Failed to mask ip\");\n }\n const out = new Uint8Array(n);\n for(let i = 0; i < n; i++){\n out[i] = ip[i] & mask[i];\n }\n return out;\n}\nfunction containsIp(net, ip) {\n if (typeof ip === \"string\") {\n ip = (0,_chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__.parseIP)(ip);\n }\n if (ip == null) throw new Error(\"Invalid ip\");\n if (ip.length !== net.network.length) {\n return false;\n }\n for(let i = 0; i < ip.length; i++){\n if ((net.network[i] & net.mask[i]) !== (ip[i] & net.mask[i])) {\n return false;\n }\n }\n return true;\n}\nfunction iPv4FromIPv6(ip) {\n if (!isIPv4mappedIPv6(ip)) {\n throw new Error(\"Must have 0xffff prefix\");\n }\n return ip.slice(12);\n}\nfunction isIPv4mappedIPv6(ip) {\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_1__.deepEqual)(ip, ipv4Prefix, 0, 11);\n} //# sourceMappingURL=ip.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9uZXRtYXNrL2Rpc3Qvc3JjL2lwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBaUQ7QUFDSjtBQUN0QyxNQUFNRyxVQUFVLEVBQUU7QUFDbEIsTUFBTUMsVUFBVSxHQUFHO0FBQ25CLE1BQU1DLGVBQWVDLFNBQVMsVUFBVSxJQUFJO0FBQzVDLE1BQU1DLGFBQWEsSUFBSUMsV0FBVztJQUNyQztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUc7SUFBRztJQUFHO0lBQUs7Q0FDdEMsRUFBRTtBQUNJLFNBQVNDLE9BQU9DLEVBQUUsRUFBRUMsSUFBSTtJQUMzQixJQUFJQSxLQUFLQyxNQUFNLEtBQUtSLFdBQVdNLEdBQUdFLE1BQU0sS0FBS1QsV0FBV0YsK0NBQUtBLENBQUNVLE1BQU0sR0FBRyxLQUFLO1FBQ3hFQSxPQUFPQSxLQUFLRSxLQUFLLENBQUM7SUFDdEI7SUFDQSxJQUFJRixLQUFLQyxNQUFNLEtBQUtULFdBQ2hCTyxHQUFHRSxNQUFNLEtBQUtSLFdBQ2RGLG1EQUFTQSxDQUFDUSxJQUFJSCxZQUFZLEdBQUcsS0FBSztRQUNsQ0csS0FBS0EsR0FBR0csS0FBSyxDQUFDO0lBQ2xCO0lBQ0EsTUFBTUMsSUFBSUosR0FBR0UsTUFBTTtJQUNuQixJQUFJRSxLQUFLSCxLQUFLQyxNQUFNLEVBQUU7UUFDbEIsTUFBTSxJQUFJRyxNQUFNO0lBQ3BCO0lBQ0EsTUFBTUMsTUFBTSxJQUFJUixXQUFXTTtJQUMzQixJQUFLLElBQUlHLElBQUksR0FBR0EsSUFBSUgsR0FBR0csSUFBSztRQUN4QkQsR0FBRyxDQUFDQyxFQUFFLEdBQUdQLEVBQUUsQ0FBQ08sRUFBRSxHQUFHTixJQUFJLENBQUNNLEVBQUU7SUFDNUI7SUFDQSxPQUFPRDtBQUNYO0FBQ08sU0FBU0UsV0FBV0MsR0FBRyxFQUFFVCxFQUFFO0lBQzlCLElBQUksT0FBT0EsT0FBTyxVQUFVO1FBQ3hCQSxLQUFLViwrREFBT0EsQ0FBQ1U7SUFDakI7SUFDQSxJQUFJQSxNQUFNLE1BQ04sTUFBTSxJQUFJSyxNQUFNO0lBQ3BCLElBQUlMLEdBQUdFLE1BQU0sS0FBS08sSUFBSUMsT0FBTyxDQUFDUixNQUFNLEVBQUU7UUFDbEMsT0FBTztJQUNYO0lBQ0EsSUFBSyxJQUFJSyxJQUFJLEdBQUdBLElBQUlQLEdBQUdFLE1BQU0sRUFBRUssSUFBSztRQUNoQyxJQUFJLENBQUNFLElBQUlDLE9BQU8sQ0FBQ0gsRUFBRSxHQUFHRSxJQUFJUixJQUFJLENBQUNNLEVBQUUsTUFBT1AsQ0FBQUEsRUFBRSxDQUFDTyxFQUFFLEdBQUdFLElBQUlSLElBQUksQ0FBQ00sRUFBRSxHQUFHO1lBQzFELE9BQU87UUFDWDtJQUNKO0lBQ0EsT0FBTztBQUNYO0FBQ08sU0FBU0ksYUFBYVgsRUFBRTtJQUMzQixJQUFJLENBQUNZLGlCQUFpQlosS0FBSztRQUN2QixNQUFNLElBQUlLLE1BQU07SUFDcEI7SUFDQSxPQUFPTCxHQUFHRyxLQUFLLENBQUM7QUFDcEI7QUFDTyxTQUFTUyxpQkFBaUJaLEVBQUU7SUFDL0IsT0FBT1IsbURBQVNBLENBQUNRLElBQUlILFlBQVksR0FBRztBQUN4QyxFQUNBLDhCQUE4QiIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbmV0bWFzay9kaXN0L3NyYy9pcC5qcz9hOWJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlSVAgfSBmcm9tIFwiQGNoYWluc2FmZS9pcy1pcC9wYXJzZVwiO1xuaW1wb3J0IHsgYWxsRkYsIGRlZXBFcXVhbCB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCBJUHY0TGVuID0gNDtcbmV4cG9ydCBjb25zdCBJUHY2TGVuID0gMTY7XG5leHBvcnQgY29uc3QgbWF4SVB2Nk9jdGV0ID0gcGFyc2VJbnQoXCIweEZGRkZcIiwgMTYpO1xuZXhwb3J0IGNvbnN0IGlwdjRQcmVmaXggPSBuZXcgVWludDhBcnJheShbXG4gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU1LCAyNTUsXG5dKTtcbmV4cG9ydCBmdW5jdGlvbiBtYXNrSXAoaXAsIG1hc2spIHtcbiAgICBpZiAobWFzay5sZW5ndGggPT09IElQdjZMZW4gJiYgaXAubGVuZ3RoID09PSBJUHY0TGVuICYmIGFsbEZGKG1hc2ssIDAsIDExKSkge1xuICAgICAgICBtYXNrID0gbWFzay5zbGljZSgxMik7XG4gICAgfVxuICAgIGlmIChtYXNrLmxlbmd0aCA9PT0gSVB2NExlbiAmJlxuICAgICAgICBpcC5sZW5ndGggPT09IElQdjZMZW4gJiZcbiAgICAgICAgZGVlcEVxdWFsKGlwLCBpcHY0UHJlZml4LCAwLCAxMSkpIHtcbiAgICAgICAgaXAgPSBpcC5zbGljZSgxMik7XG4gICAgfVxuICAgIGNvbnN0IG4gPSBpcC5sZW5ndGg7XG4gICAgaWYgKG4gIT0gbWFzay5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIG1hc2sgaXBcIik7XG4gICAgfVxuICAgIGNvbnN0IG91dCA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IGlwW2ldICYgbWFza1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0lwKG5ldCwgaXApIHtcbiAgICBpZiAodHlwZW9mIGlwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlwID0gcGFyc2VJUChpcCk7XG4gICAgfVxuICAgIGlmIChpcCA9PSBudWxsKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlwXCIpO1xuICAgIGlmIChpcC5sZW5ndGggIT09IG5ldC5uZXR3b3JrLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKChuZXQubmV0d29ya1tpXSAmIG5ldC5tYXNrW2ldKSAhPT0gKGlwW2ldICYgbmV0Lm1hc2tbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaVB2NEZyb21JUHY2KGlwKSB7XG4gICAgaWYgKCFpc0lQdjRtYXBwZWRJUHY2KGlwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGhhdmUgMHhmZmZmIHByZWZpeFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGlwLnNsaWNlKDEyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0lQdjRtYXBwZWRJUHY2KGlwKSB7XG4gICAgcmV0dXJuIGRlZXBFcXVhbChpcCwgaXB2NFByZWZpeCwgMCwgMTEpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXAuanMubWFwIl0sIm5hbWVzIjpbInBhcnNlSVAiLCJhbGxGRiIsImRlZXBFcXVhbCIsIklQdjRMZW4iLCJJUHY2TGVuIiwibWF4SVB2Nk9jdGV0IiwicGFyc2VJbnQiLCJpcHY0UHJlZml4IiwiVWludDhBcnJheSIsIm1hc2tJcCIsImlwIiwibWFzayIsImxlbmd0aCIsInNsaWNlIiwibiIsIkVycm9yIiwib3V0IiwiaSIsImNvbnRhaW5zSXAiLCJuZXQiLCJuZXR3b3JrIiwiaVB2NEZyb21JUHY2IiwiaXNJUHY0bWFwcGVkSVB2NiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/netmask/dist/src/ip.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/netmask/dist/src/ipnet.js":
/*!***********************************************************!*\
!*** ./node_modules/@chainsafe/netmask/dist/src/ipnet.js ***!
\***********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IpNet: () => (/* binding */ IpNet)\n/* harmony export */ });\n/* harmony import */ var _chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @chainsafe/is-ip/parse */ \"(ssr)/./node_modules/@chainsafe/is-ip/lib/parse.js\");\n/* harmony import */ var _cidr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cidr.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/cidr.js\");\n/* harmony import */ var _ip_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ip.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/ip.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/util.js\");\n\n\n\n\nclass IpNet {\n /**\n *\n * @param ipOrCidr either network ip or full cidr address\n * @param mask in case ipOrCidr is network this can be either mask in decimal format or as ip address\n */ constructor(ipOrCidr, mask){\n if (mask == null) {\n ({ network: this.network, mask: this.mask } = (0,_cidr_js__WEBPACK_IMPORTED_MODULE_1__.parseCidr)(ipOrCidr));\n } else {\n const ipResult = (0,_chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__.parseIP)(ipOrCidr);\n if (ipResult == null) {\n throw new Error(\"Failed to parse network\");\n }\n mask = String(mask);\n const m = parseInt(mask, 10);\n if (Number.isNaN(m) || String(m).length !== mask.length || m < 0 || m > ipResult.length * 8) {\n const maskResult = (0,_chainsafe_is_ip_parse__WEBPACK_IMPORTED_MODULE_0__.parseIP)(mask);\n if (maskResult == null) {\n throw new Error(\"Failed to parse mask\");\n }\n this.mask = maskResult;\n } else {\n this.mask = (0,_cidr_js__WEBPACK_IMPORTED_MODULE_1__.cidrMask)(m, 8 * ipResult.length);\n }\n this.network = (0,_ip_js__WEBPACK_IMPORTED_MODULE_2__.maskIp)(ipResult, this.mask);\n }\n }\n /**\n * Checks if netmask contains ip address\n * @param ip\n * @returns\n */ contains(ip) {\n return (0,_ip_js__WEBPACK_IMPORTED_MODULE_2__.containsIp)({\n network: this.network,\n mask: this.mask\n }, ip);\n }\n /**Serializes back to string format */ toString() {\n const l = (0,_util_js__WEBPACK_IMPORTED_MODULE_3__.simpleMaskLength)(this.mask);\n const mask = l !== -1 ? String(l) : (0,_util_js__WEBPACK_IMPORTED_MODULE_3__.maskToHex)(this.mask);\n return (0,_util_js__WEBPACK_IMPORTED_MODULE_3__.ipToString)(this.network) + \"/\" + mask;\n }\n} //# sourceMappingURL=ipnet.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9uZXRtYXNrL2Rpc3Qvc3JjL2lwbmV0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQWlEO0FBQ0Q7QUFDSDtBQUN1QjtBQUM3RCxNQUFNUTtJQUNUOzs7O0tBSUMsR0FDREMsWUFBWUMsUUFBUSxFQUFFQyxJQUFJLENBQUU7UUFDeEIsSUFBSUEsUUFBUSxNQUFNO1lBQ2IsR0FBRUMsU0FBUyxJQUFJLENBQUNBLE9BQU8sRUFBRUQsTUFBTSxJQUFJLENBQUNBLElBQUksRUFBRSxHQUFHVCxtREFBU0EsQ0FBQ1EsU0FBUTtRQUNwRSxPQUNLO1lBQ0QsTUFBTUcsV0FBV2IsK0RBQU9BLENBQUNVO1lBQ3pCLElBQUlHLFlBQVksTUFBTTtnQkFDbEIsTUFBTSxJQUFJQyxNQUFNO1lBQ3BCO1lBQ0FILE9BQU9JLE9BQU9KO1lBQ2QsTUFBTUssSUFBSUMsU0FBU04sTUFBTTtZQUN6QixJQUFJTyxPQUFPQyxLQUFLLENBQUNILE1BQ2JELE9BQU9DLEdBQUdJLE1BQU0sS0FBS1QsS0FBS1MsTUFBTSxJQUNoQ0osSUFBSSxLQUNKQSxJQUFJSCxTQUFTTyxNQUFNLEdBQUcsR0FBRztnQkFDekIsTUFBTUMsYUFBYXJCLCtEQUFPQSxDQUFDVztnQkFDM0IsSUFBSVUsY0FBYyxNQUFNO29CQUNwQixNQUFNLElBQUlQLE1BQU07Z0JBQ3BCO2dCQUNBLElBQUksQ0FBQ0gsSUFBSSxHQUFHVTtZQUNoQixPQUNLO2dCQUNELElBQUksQ0FBQ1YsSUFBSSxHQUFHVixrREFBUUEsQ0FBQ2UsR0FBRyxJQUFJSCxTQUFTTyxNQUFNO1lBQy9DO1lBQ0EsSUFBSSxDQUFDUixPQUFPLEdBQUdSLDhDQUFNQSxDQUFDUyxVQUFVLElBQUksQ0FBQ0YsSUFBSTtRQUM3QztJQUNKO0lBQ0E7Ozs7S0FJQyxHQUNEVyxTQUFTQyxFQUFFLEVBQUU7UUFDVCxPQUFPcEIsa0RBQVVBLENBQUM7WUFBRVMsU0FBUyxJQUFJLENBQUNBLE9BQU87WUFBRUQsTUFBTSxJQUFJLENBQUNBLElBQUk7UUFBQyxHQUFHWTtJQUNsRTtJQUNBLG9DQUFvQyxHQUNwQ0MsV0FBVztRQUNQLE1BQU1DLElBQUlsQiwwREFBZ0JBLENBQUMsSUFBSSxDQUFDSSxJQUFJO1FBQ3BDLE1BQU1BLE9BQU9jLE1BQU0sQ0FBQyxJQUFJVixPQUFPVSxLQUFLbkIsbURBQVNBLENBQUMsSUFBSSxDQUFDSyxJQUFJO1FBQ3ZELE9BQU9OLG9EQUFVQSxDQUFDLElBQUksQ0FBQ08sT0FBTyxJQUFJLE1BQU1EO0lBQzVDO0FBQ0osRUFDQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9mbHVzaC1ub3Rlcy8uL25vZGVfbW9kdWxlcy9AY2hhaW5zYWZlL25ldG1hc2svZGlzdC9zcmMvaXBuZXQuanM/OTE0NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZUlQIH0gZnJvbSBcIkBjaGFpbnNhZmUvaXMtaXAvcGFyc2VcIjtcbmltcG9ydCB7IGNpZHJNYXNrLCBwYXJzZUNpZHIgfSBmcm9tIFwiLi9jaWRyLmpzXCI7XG5pbXBvcnQgeyBjb250YWluc0lwLCBtYXNrSXAgfSBmcm9tIFwiLi9pcC5qc1wiO1xuaW1wb3J0IHsgaXBUb1N0cmluZywgbWFza1RvSGV4LCBzaW1wbGVNYXNrTGVuZ3RoIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuZXhwb3J0IGNsYXNzIElwTmV0IHtcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpcE9yQ2lkciBlaXRoZXIgbmV0d29yayBpcCBvciBmdWxsIGNpZHIgYWRkcmVzc1xuICAgICAqIEBwYXJhbSBtYXNrIGluIGNhc2UgaXBPckNpZHIgaXMgbmV0d29yayB0aGlzIGNhbiBiZSBlaXRoZXIgbWFzayBpbiBkZWNpbWFsIGZvcm1hdCBvciBhcyBpcCBhZGRyZXNzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaXBPckNpZHIsIG1hc2spIHtcbiAgICAgICAgaWYgKG1hc2sgPT0gbnVsbCkge1xuICAgICAgICAgICAgKHsgbmV0d29yazogdGhpcy5uZXR3b3JrLCBtYXNrOiB0aGlzLm1hc2sgfSA9IHBhcnNlQ2lkcihpcE9yQ2lkcikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXBSZXN1bHQgPSBwYXJzZUlQKGlwT3JDaWRyKTtcbiAgICAgICAgICAgIGlmIChpcFJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIG5ldHdvcmtcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXNrID0gU3RyaW5nKG1hc2spO1xuICAgICAgICAgICAgY29uc3QgbSA9IHBhcnNlSW50KG1hc2ssIDEwKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4obSkgfHxcbiAgICAgICAgICAgICAgICBTdHJpbmcobSkubGVuZ3RoICE9PSBtYXNrLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgIG0gPCAwIHx8XG4gICAgICAgICAgICAgICAgbSA+IGlwUmVzdWx0Lmxlbmd0aCAqIDgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXNrUmVzdWx0ID0gcGFyc2VJUChtYXNrKTtcbiAgICAgICAgICAgICAgICBpZiAobWFza1Jlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBtYXNrXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1hc2sgPSBtYXNrUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrID0gY2lkck1hc2sobSwgOCAqIGlwUmVzdWx0Lmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5ldHdvcmsgPSBtYXNrSXAoaXBSZXN1bHQsIHRoaXMubWFzayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIG5ldG1hc2sgY29udGFpbnMgaXAgYWRkcmVzc1xuICAgICAqIEBwYXJhbSBpcFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgY29udGFpbnMoaXApIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zSXAoeyBuZXR3b3JrOiB0aGlzLm5ldHdvcmssIG1hc2s6IHRoaXMubWFzayB9LCBpcCk7XG4gICAgfVxuICAgIC8qKlNlcmlhbGl6ZXMgYmFjayB0byBzdHJpbmcgZm9ybWF0ICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IGwgPSBzaW1wbGVNYXNrTGVuZ3RoKHRoaXMubWFzayk7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBsICE9PSAtMSA/IFN0cmluZyhsKSA6IG1hc2tUb0hleCh0aGlzLm1hc2spO1xuICAgICAgICByZXR1cm4gaXBUb1N0cmluZyh0aGlzLm5ldHdvcmspICsgXCIvXCIgKyBtYXNrO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlwbmV0LmpzLm1hcCJdLCJuYW1lcyI6WyJwYXJzZUlQIiwiY2lkck1hc2siLCJwYXJzZUNpZHIiLCJjb250YWluc0lwIiwibWFza0lwIiwiaXBUb1N0cmluZyIsIm1hc2tUb0hleCIsInNpbXBsZU1hc2tMZW5ndGgiLCJJcE5ldCIsImNvbnN0cnVjdG9yIiwiaXBPckNpZHIiLCJtYXNrIiwibmV0d29yayIsImlwUmVzdWx0IiwiRXJyb3IiLCJTdHJpbmciLCJtIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJpc05hTiIsImxlbmd0aCIsIm1hc2tSZXN1bHQiLCJjb250YWlucyIsImlwIiwidG9TdHJpbmciLCJsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/netmask/dist/src/ipnet.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/@chainsafe/netmask/dist/src/util.js":
/*!**********************************************************!*\
!*** ./node_modules/@chainsafe/netmask/dist/src/util.js ***!
\**********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ allFF: () => (/* binding */ allFF),\n/* harmony export */ deepEqual: () => (/* binding */ deepEqual),\n/* harmony export */ ipToString: () => (/* binding */ ipToString),\n/* harmony export */ maskToHex: () => (/* binding */ maskToHex),\n/* harmony export */ simpleMaskLength: () => (/* binding */ simpleMaskLength)\n/* harmony export */ });\n/* harmony import */ var _ip_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ip.js */ \"(ssr)/./node_modules/@chainsafe/netmask/dist/src/ip.js\");\n\nfunction allFF(a, from, to) {\n let i = 0;\n for (const e of a){\n if (i < from) continue;\n if (i > to) break;\n if (e !== 0xff) return false;\n i++;\n }\n return true;\n}\nfunction deepEqual(a, b, from, to) {\n let i = 0;\n for (const e of a){\n if (i < from) continue;\n if (i > to) break;\n if (e !== b[i]) return false;\n i++;\n }\n return true;\n}\n/***\n * Returns long ip format\n */ function ipToString(ip) {\n switch(ip.length){\n case _ip_js__WEBPACK_IMPORTED_MODULE_0__.IPv4Len:\n {\n return ip.join(\".\");\n }\n case _ip_js__WEBPACK_IMPORTED_MODULE_0__.IPv6Len:\n {\n const result = [];\n for(let i = 0; i < ip.length; i++){\n if (i % 2 === 0) {\n result.push(ip[i].toString(16).padStart(2, \"0\") + ip[i + 1].toString(16).padStart(2, \"0\"));\n }\n }\n return result.join(\":\");\n }\n default:\n {\n throw new Error(\"Invalid ip length\");\n }\n }\n}\n/**\n * If mask is a sequence of 1 bits followed by 0 bits, return number of 1 bits else -1\n */ function simpleMaskLength(mask) {\n let ones = 0;\n // eslint-disable-next-line prefer-const\n for (let [index, byte] of mask.entries()){\n if (byte === 0xff) {\n ones += 8;\n continue;\n }\n while((byte & 0x80) != 0){\n ones++;\n byte = byte << 1;\n }\n if ((byte & 0x80) != 0) {\n return -1;\n }\n for(let i = index + 1; i < mask.length; i++){\n if (mask[i] != 0) {\n return -1;\n }\n }\n break;\n }\n return ones;\n}\nfunction maskToHex(mask) {\n let hex = \"0x\";\n for (const byte of mask){\n hex += (byte >> 4).toString(16) + (byte & 0x0f).toString(16);\n }\n return hex;\n} //# sourceMappingURL=util.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQGNoYWluc2FmZS9uZXRtYXNrL2Rpc3Qvc3JjL3V0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTJDO0FBQ3BDLFNBQVNFLE1BQU1DLENBQUMsRUFBRUMsSUFBSSxFQUFFQyxFQUFFO0lBQzdCLElBQUlDLElBQUk7SUFDUixLQUFLLE1BQU1DLEtBQUtKLEVBQUc7UUFDZixJQUFJRyxJQUFJRixNQUNKO1FBQ0osSUFBSUUsSUFBSUQsSUFDSjtRQUNKLElBQUlFLE1BQU0sTUFDTixPQUFPO1FBQ1hEO0lBQ0o7SUFDQSxPQUFPO0FBQ1g7QUFDTyxTQUFTRSxVQUFVTCxDQUFDLEVBQUVNLENBQUMsRUFBRUwsSUFBSSxFQUFFQyxFQUFFO0lBQ3BDLElBQUlDLElBQUk7SUFDUixLQUFLLE1BQU1DLEtBQUtKLEVBQUc7UUFDZixJQUFJRyxJQUFJRixNQUNKO1FBQ0osSUFBSUUsSUFBSUQsSUFDSjtRQUNKLElBQUlFLE1BQU1FLENBQUMsQ0FBQ0gsRUFBRSxFQUNWLE9BQU87UUFDWEE7SUFDSjtJQUNBLE9BQU87QUFDWDtBQUNBOztDQUVDLEdBQ00sU0FBU0ksV0FBV0MsRUFBRTtJQUN6QixPQUFRQSxHQUFHQyxNQUFNO1FBQ2IsS0FBS1osMkNBQU9BO1lBQUU7Z0JBQ1YsT0FBT1csR0FBR0UsSUFBSSxDQUFDO1lBQ25CO1FBQ0EsS0FBS1osMkNBQU9BO1lBQUU7Z0JBQ1YsTUFBTWEsU0FBUyxFQUFFO2dCQUNqQixJQUFLLElBQUlSLElBQUksR0FBR0EsSUFBSUssR0FBR0MsTUFBTSxFQUFFTixJQUFLO29CQUNoQyxJQUFJQSxJQUFJLE1BQU0sR0FBRzt3QkFDYlEsT0FBT0MsSUFBSSxDQUFDSixFQUFFLENBQUNMLEVBQUUsQ0FBQ1UsUUFBUSxDQUFDLElBQUlDLFFBQVEsQ0FBQyxHQUFHLE9BQ3ZDTixFQUFFLENBQUNMLElBQUksRUFBRSxDQUFDVSxRQUFRLENBQUMsSUFBSUMsUUFBUSxDQUFDLEdBQUc7b0JBQzNDO2dCQUNKO2dCQUNBLE9BQU9ILE9BQU9ELElBQUksQ0FBQztZQUN2QjtRQUNBO1lBQVM7Z0JBQ0wsTUFBTSxJQUFJSyxNQUFNO1lBQ3BCO0lBQ0o7QUFDSjtBQUNBOztDQUVDLEdBQ00sU0FBU0MsaUJBQWlCQyxJQUFJO0lBQ2pDLElBQUlDLE9BQU87SUFDWCx3Q0FBd0M7SUFDeEMsS0FBSyxJQUFJLENBQUNDLE9BQU9DLEtBQUssSUFBSUgsS0FBS0ksT0FBTyxHQUFJO1FBQ3RDLElBQUlELFNBQVMsTUFBTTtZQUNmRixRQUFRO1lBQ1I7UUFDSjtRQUNBLE1BQU8sQ0FBQ0UsT0FBTyxJQUFHLEtBQU0sRUFBRztZQUN2QkY7WUFDQUUsT0FBT0EsUUFBUTtRQUNuQjtRQUNBLElBQUksQ0FBQ0EsT0FBTyxJQUFHLEtBQU0sR0FBRztZQUNwQixPQUFPLENBQUM7UUFDWjtRQUNBLElBQUssSUFBSWpCLElBQUlnQixRQUFRLEdBQUdoQixJQUFJYyxLQUFLUixNQUFNLEVBQUVOLElBQUs7WUFDMUMsSUFBSWMsSUFBSSxDQUFDZCxFQUFFLElBQUksR0FBRztnQkFDZCxPQUFPLENBQUM7WUFDWjtRQUNKO1FBQ0E7SUFDSjtJQUNBLE9BQU9lO0FBQ1g7QUFDTyxTQUFTSSxVQUFVTCxJQUFJO0lBQzFCLElBQUlNLE1BQU07SUFDVixLQUFLLE1BQU1ILFFBQVFILEtBQU07UUFDckJNLE9BQU8sQ0FBQ0gsUUFBUSxHQUFHUCxRQUFRLENBQUMsTUFBTSxDQUFDTyxPQUFPLElBQUcsRUFBR1AsUUFBUSxDQUFDO0lBQzdEO0lBQ0EsT0FBT1U7QUFDWCxFQUNBLGdDQUFnQyIsInNvdXJjZXMiOlsid2VicGFjazovL2ZsdXNoLW5vdGVzLy4vbm9kZV9tb2R1bGVzL0BjaGFpbnNhZmUvbmV0bWFzay9kaXN0L3NyYy91dGlsLmpzPzY2MzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVB2NExlbiwgSVB2NkxlbiB9IGZyb20gXCIuL2lwLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gYWxsRkYoYSwgZnJvbSwgdG8pIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBlIG9mIGEpIHtcbiAgICAgICAgaWYgKGkgPCBmcm9tKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChpID4gdG8pXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaWYgKGUgIT09IDB4ZmYpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIsIGZyb20sIHRvKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3QgZSBvZiBhKSB7XG4gICAgICAgIGlmIChpIDwgZnJvbSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaSA+IHRvKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChlICE9PSBiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqKlxuICogUmV0dXJucyBsb25nIGlwIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXBUb1N0cmluZyhpcCkge1xuICAgIHN3aXRjaCAoaXAubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgSVB2NExlbjoge1xuICAgICAgICAgICAgcmV0dXJuIGlwLmpvaW4oXCIuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSVB2Nkxlbjoge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgJSAyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlwW2ldLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaXBbaSArIDFdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbihcIjpcIik7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpcCBsZW5ndGhcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIElmIG1hc2sgaXMgYSBzZXF1ZW5jZSBvZiAxIGJpdHMgZm9sbG93ZWQgYnkgMCBiaXRzLCByZXR1cm4gbnVtYmVyIG9mIDEgYml0cyBlbHNlIC0xXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVNYXNrTGVuZ3RoKG1hc2spIHtcbiAgICBsZXQgb25lcyA9IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGZvciAobGV0IFtpbmRleCwgYnl0ZV0gb2YgbWFzay5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZmYpIHtcbiAgICAgICAgICAgIG9uZXMgKz0gODtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICgoYnl0ZSAmIDB4ODApICE9IDApIHtcbiAgICAgICAgICAgIG9uZXMrKztcbiAgICAgICAgICAgIGJ5dGUgPSBieXRlIDw8IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChieXRlICYgMHg4MCkgIT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobWFza1tpXSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb25lcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXNrVG9IZXgobWFzaykge1xuICAgIGxldCBoZXggPSBcIjB4XCI7XG4gICAgZm9yIChjb25zdCBieXRlIG9mIG1hc2spIHtcbiAgICAgICAgaGV4ICs9IChieXRlID4+IDQpLnRvU3RyaW5nKDE2KSArIChieXRlICYgMHgwZikudG9TdHJpbmcoMTYpO1xuICAgIH1cbiAgICByZXR1cm4gaGV4O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXAiXSwibmFtZXMiOlsiSVB2NExlbiIsIklQdjZMZW4iLCJhbGxGRiIsImEiLCJmcm9tIiwidG8iLCJpIiwiZSIsImRlZXBFcXVhbCIsImIiLCJpcFRvU3RyaW5nIiwiaXAiLCJsZW5ndGgiLCJqb2luIiwicmVzdWx0IiwicHVzaCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJFcnJvciIsInNpbXBsZU1hc2tMZW5ndGgiLCJtYXNrIiwib25lcyIsImluZGV4IiwiYnl0ZSIsImVudHJpZXMiLCJtYXNrVG9IZXgiLCJoZXgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@chainsafe/netmask/dist/src/util.js\n");
/***/ })
};
;