"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/iobuffer";
exports.ids = ["vendor-chunks/iobuffer"];
exports.modules = {
/***/ "(ssr)/./node_modules/iobuffer/lib-esm/IOBuffer.js":
/*!***************************************************!*\
!*** ./node_modules/iobuffer/lib-esm/IOBuffer.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IOBuffer: () => (/* binding */ IOBuffer)\n/* harmony export */ });\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text */ \"(ssr)/./node_modules/iobuffer/lib-esm/text.js\");\n\nconst defaultByteLength = 1024 * 8;\nconst hostBigEndian = (() => {\n const array = new Uint8Array(4);\n const view = new Uint32Array(array.buffer);\n return !((view[0] = 1) & array[0]);\n})();\nconst typedArrays = {\n int8: globalThis.Int8Array,\n uint8: globalThis.Uint8Array,\n int16: globalThis.Int16Array,\n uint16: globalThis.Uint16Array,\n int32: globalThis.Int32Array,\n uint32: globalThis.Uint32Array,\n uint64: globalThis.BigUint64Array,\n int64: globalThis.BigInt64Array,\n float32: globalThis.Float32Array,\n float64: globalThis.Float64Array,\n};\nclass IOBuffer {\n /**\n * Reference to the internal ArrayBuffer object.\n */\n buffer;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n byteLength;\n /**\n * Byte offset of the internal ArrayBuffer.\n */\n byteOffset;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n length;\n /**\n * The current offset of the buffer's pointer.\n */\n offset;\n lastWrittenByte;\n littleEndian;\n _data;\n _mark;\n _marks;\n /**\n * Create a new IOBuffer.\n * @param data - The data to construct the IOBuffer with.\n * If data is a number, it will be the new buffer's length
\n * If data is `undefined`, the buffer will be initialized with a default length of 8Kb
\n * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n * @param options - An object for the options.\n * @returns A new IOBuffer instance.\n */\n constructor(data = defaultByteLength, options = {}) {\n let dataIsGiven = false;\n if (typeof data === 'number') {\n data = new ArrayBuffer(data);\n }\n else {\n dataIsGiven = true;\n this.lastWrittenByte = data.byteLength;\n }\n const offset = options.offset ? options.offset >>> 0 : 0;\n const byteLength = data.byteLength - offset;\n let dvOffset = offset;\n if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n if (data.byteLength !== data.buffer.byteLength) {\n dvOffset = data.byteOffset + offset;\n }\n data = data.buffer;\n }\n if (dataIsGiven) {\n this.lastWrittenByte = byteLength;\n }\n else {\n this.lastWrittenByte = 0;\n }\n this.buffer = data;\n this.length = byteLength;\n this.byteLength = byteLength;\n this.byteOffset = dvOffset;\n this.offset = 0;\n this.littleEndian = true;\n this._data = new DataView(this.buffer, dvOffset, byteLength);\n this._mark = 0;\n this._marks = [];\n }\n /**\n * Checks if the memory allocated to the buffer is sufficient to store more\n * bytes after the offset.\n * @param byteLength - The needed memory in bytes.\n * @returns `true` if there is sufficient space and `false` otherwise.\n */\n available(byteLength = 1) {\n return this.offset + byteLength <= this.length;\n }\n /**\n * Check if little-endian mode is used for reading and writing multi-byte\n * values.\n * @returns `true` if little-endian mode is used, `false` otherwise.\n */\n isLittleEndian() {\n return this.littleEndian;\n }\n /**\n * Set little-endian mode for reading and writing multi-byte values.\n * @returns This.\n */\n setLittleEndian() {\n this.littleEndian = true;\n return this;\n }\n /**\n * Check if big-endian mode is used for reading and writing multi-byte values.\n * @returns `true` if big-endian mode is used, `false` otherwise.\n */\n isBigEndian() {\n return !this.littleEndian;\n }\n /**\n * Switches to big-endian mode for reading and writing multi-byte values.\n * @returns This.\n */\n setBigEndian() {\n this.littleEndian = false;\n return this;\n }\n /**\n * Move the pointer n bytes forward.\n * @param n - Number of bytes to skip.\n * @returns This.\n */\n skip(n = 1) {\n this.offset += n;\n return this;\n }\n /**\n * Move the pointer n bytes backward.\n * @param n - Number of bytes to move back.\n * @returns This.\n */\n back(n = 1) {\n this.offset -= n;\n return this;\n }\n /**\n * Move the pointer to the given offset.\n * @param offset - The offset to move to.\n * @returns This.\n */\n seek(offset) {\n this.offset = offset;\n return this;\n }\n /**\n * Store the current pointer offset.\n * @see {@link IOBuffer#reset}\n * @returns This.\n */\n mark() {\n this._mark = this.offset;\n return this;\n }\n /**\n * Move the pointer back to the last pointer offset set by mark.\n * @see {@link IOBuffer#mark}\n * @returns This.\n */\n reset() {\n this.offset = this._mark;\n return this;\n }\n /**\n * Push the current pointer offset to the mark stack.\n * @see {@link IOBuffer#popMark}\n * @returns This.\n */\n pushMark() {\n this._marks.push(this.offset);\n return this;\n }\n /**\n * Pop the last pointer offset from the mark stack, and set the current\n * pointer offset to the popped value.\n * @see {@link IOBuffer#pushMark}\n * @returns This.\n */\n popMark() {\n const offset = this._marks.pop();\n if (offset === undefined) {\n throw new Error('Mark stack empty');\n }\n this.seek(offset);\n return this;\n }\n /**\n * Move the pointer offset back to 0.\n * @returns This.\n */\n rewind() {\n this.offset = 0;\n return this;\n }\n /**\n * Make sure the buffer has sufficient memory to write a given byteLength at\n * the current pointer offset.\n * If the buffer's memory is insufficient, this method will create a new\n * buffer (a copy) with a length that is twice (byteLength + current offset).\n * @param byteLength - The needed memory in bytes.\n * @returns This.\n */\n ensureAvailable(byteLength = 1) {\n if (!this.available(byteLength)) {\n const lengthNeeded = this.offset + byteLength;\n const newLength = lengthNeeded * 2;\n const newArray = new Uint8Array(newLength);\n newArray.set(new Uint8Array(this.buffer));\n this.buffer = newArray.buffer;\n this.length = newLength;\n this.byteLength = newLength;\n this._data = new DataView(this.buffer);\n }\n return this;\n }\n /**\n * Read a byte and return false if the byte's value is 0, or true otherwise.\n * Moves pointer forward by one byte.\n * @returns The read boolean.\n */\n readBoolean() {\n return this.readUint8() !== 0;\n }\n /**\n * Read a signed 8-bit integer and move pointer forward by 1 byte.\n * @returns The read byte.\n */\n readInt8() {\n return this._data.getInt8(this.offset++);\n }\n /**\n * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n * @returns The read byte.\n */\n readUint8() {\n return this._data.getUint8(this.offset++);\n }\n /**\n * Alias for {@link IOBuffer#readUint8}.\n * @returns The read byte.\n */\n readByte() {\n return this.readUint8();\n }\n /**\n * Read `n` bytes and move pointer forward by `n` bytes.\n * @param n - Number of bytes to read.\n * @returns The read bytes.\n */\n readBytes(n = 1) {\n return this.readArray(n, 'uint8');\n }\n /**\n * Creates an array of corresponding to the type `type` and size `size`.\n * For example type `uint8` will create a `Uint8Array`.\n * @param size - size of the resulting array\n * @param type - number type of elements to read\n * @returns The read array.\n */\n readArray(size, type) {\n const bytes = typedArrays[type].BYTES_PER_ELEMENT * size;\n const offset = this.byteOffset + this.offset;\n const slice = this.buffer.slice(offset, offset + bytes);\n if (this.littleEndian === hostBigEndian &&\n type !== 'uint8' &&\n type !== 'int8') {\n const slice = new Uint8Array(this.buffer.slice(offset, offset + bytes));\n slice.reverse();\n const returnArray = new typedArrays[type](slice.buffer);\n this.offset += bytes;\n returnArray.reverse();\n return returnArray;\n }\n const returnArray = new typedArrays[type](slice);\n this.offset += bytes;\n return returnArray;\n }\n /**\n * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n * @returns The read value.\n */\n readInt16() {\n const value = this._data.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n * @returns The read value.\n */\n readUint16() {\n const value = this._data.getUint16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n * @returns The read value.\n */\n readInt32() {\n const value = this._data.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n * @returns The read value.\n */\n readUint32() {\n const value = this._data.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit floating number and move pointer forward by 4 bytes.\n * @returns The read value.\n */\n readFloat32() {\n const value = this._data.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 64-bit floating number and move pointer forward by 8 bytes.\n * @returns The read value.\n */\n readFloat64() {\n const value = this._data.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 64-bit signed integer number and move pointer forward by 8 bytes.\n * @returns The read value.\n */\n readBigInt64() {\n const value = this._data.getBigInt64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n * @returns The read value.\n */\n readBigUint64() {\n const value = this._data.getBigUint64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n * @returns The read character.\n */\n readChar() {\n // eslint-disable-next-line unicorn/prefer-code-point\n return String.fromCharCode(this.readInt8());\n }\n /**\n * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n * @param n - Number of characters to read.\n * @returns The read characters.\n */\n readChars(n = 1) {\n let result = '';\n for (let i = 0; i < n; i++) {\n result += this.readChar();\n }\n return result;\n }\n /**\n * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n * forward by `n` bytes.\n * @param n - Number of bytes to read.\n * @returns The decoded string.\n */\n readUtf8(n = 1) {\n return (0,_text__WEBPACK_IMPORTED_MODULE_0__.decode)(this.readBytes(n));\n }\n /**\n * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n * forward by `n` bytes.\n * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n * @param n - Number of bytes to read.\n * @param encoding - The encoding to use. Default is 'utf8'.\n * @returns The decoded string.\n */\n decodeText(n = 1, encoding = 'utf8') {\n return (0,_text__WEBPACK_IMPORTED_MODULE_0__.decode)(this.readBytes(n), encoding);\n }\n /**\n * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n * forward by 1 byte.\n * @param value - The value to write.\n * @returns This.\n */\n writeBoolean(value) {\n this.writeUint8(value ? 0xff : 0x00);\n return this;\n }\n /**\n * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n * @param value - The value to write.\n * @returns This.\n */\n writeInt8(value) {\n this.ensureAvailable(1);\n this._data.setInt8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n * byte.\n * @param value - The value to write.\n * @returns This.\n */\n writeUint8(value) {\n this.ensureAvailable(1);\n this._data.setUint8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * An alias for {@link IOBuffer#writeUint8}.\n * @param value - The value to write.\n * @returns This.\n */\n writeByte(value) {\n return this.writeUint8(value);\n }\n /**\n * Write all elements of `bytes` as uint8 values and move pointer forward by\n * `bytes.length` bytes.\n * @param bytes - The array of bytes to write.\n * @returns This.\n */\n writeBytes(bytes) {\n this.ensureAvailable(bytes.length);\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < bytes.length; i++) {\n this._data.setUint8(this.offset++, bytes[i]);\n }\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit signed integer and move pointer forward by 2\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeInt16(value) {\n this.ensureAvailable(2);\n this._data.setInt16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeUint16(value) {\n this.ensureAvailable(2);\n this._data.setUint16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit signed integer and move pointer forward by 4\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeInt32(value) {\n this.ensureAvailable(4);\n this._data.setInt32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeUint32(value) {\n this.ensureAvailable(4);\n this._data.setUint32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit floating number and move pointer forward by 4\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeFloat32(value) {\n this.ensureAvailable(4);\n this._data.setFloat32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit floating number and move pointer forward by 8\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeFloat64(value) {\n this.ensureAvailable(8);\n this._data.setFloat64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit signed bigint and move pointer forward by 8\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeBigInt64(value) {\n this.ensureAvailable(8);\n this._data.setBigInt64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeBigUint64(value) {\n this.ensureAvailable(8);\n this._data.setBigUint64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n * and move pointer forward by 1 byte.\n * @param str - The character to write.\n * @returns This.\n */\n writeChar(str) {\n // eslint-disable-next-line unicorn/prefer-code-point\n return this.writeUint8(str.charCodeAt(0));\n }\n /**\n * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n * and move pointer forward by `str.length` bytes.\n * @param str - The characters to write.\n * @returns This.\n */\n writeChars(str) {\n for (let i = 0; i < str.length; i++) {\n // eslint-disable-next-line unicorn/prefer-code-point\n this.writeUint8(str.charCodeAt(i));\n }\n return this;\n }\n /**\n * UTF-8 encode and write `str` to the current pointer offset and move pointer\n * forward according to the encoded length.\n * @param str - The string to write.\n * @returns This.\n */\n writeUtf8(str) {\n return this.writeBytes((0,_text__WEBPACK_IMPORTED_MODULE_0__.encode)(str));\n }\n /**\n * Export a Uint8Array view of the internal buffer.\n * The view starts at the byte offset and its length\n * is calculated to stop at the last written byte or the original length.\n * @returns A new Uint8Array view.\n */\n toArray() {\n return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n }\n /**\n * Get the total number of bytes written so far, regardless of the current offset.\n * @returns - Total number of bytes.\n */\n getWrittenByteLength() {\n return this.lastWrittenByte - this.byteOffset;\n }\n /**\n * Update the last written byte offset\n * @private\n */\n _updateLastWrittenByte() {\n if (this.offset > this.lastWrittenByte) {\n this.lastWrittenByte = this.offset;\n }\n }\n}\n//# sourceMappingURL=IOBuffer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvaW9idWZmZXIvbGliLWVzbS9JT0J1ZmZlci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHlCQUF5QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE9BQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwQkFBMEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw2Q0FBTTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3ZlcmlmeXBhY2stZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaW9idWZmZXIvbGliLWVzbS9JT0J1ZmZlci5qcz9lNGE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlY29kZSwgZW5jb2RlIH0gZnJvbSAnLi90ZXh0JztcbmNvbnN0IGRlZmF1bHRCeXRlTGVuZ3RoID0gMTAyNCAqIDg7XG5jb25zdCBob3N0QmlnRW5kaWFuID0gKCgpID0+IHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDMyQXJyYXkoYXJyYXkuYnVmZmVyKTtcbiAgICByZXR1cm4gISgodmlld1swXSA9IDEpICYgYXJyYXlbMF0pO1xufSkoKTtcbmNvbnN0IHR5cGVkQXJyYXlzID0ge1xuICAgIGludDg6IGdsb2JhbFRoaXMuSW50OEFycmF5LFxuICAgIHVpbnQ4OiBnbG9iYWxUaGlzLlVpbnQ4QXJyYXksXG4gICAgaW50MTY6IGdsb2JhbFRoaXMuSW50MTZBcnJheSxcbiAgICB1aW50MTY6IGdsb2JhbFRoaXMuVWludDE2QXJyYXksXG4gICAgaW50MzI6IGdsb2JhbFRoaXMuSW50MzJBcnJheSxcbiAgICB1aW50MzI6IGdsb2JhbFRoaXMuVWludDMyQXJyYXksXG4gICAgdWludDY0OiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5LFxuICAgIGludDY0OiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXksXG4gICAgZmxvYXQzMjogZ2xvYmFsVGhpcy5GbG9hdDMyQXJyYXksXG4gICAgZmxvYXQ2NDogZ2xvYmFsVGhpcy5GbG9hdDY0QXJyYXksXG59O1xuZXhwb3J0IGNsYXNzIElPQnVmZmVyIHtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGludGVybmFsIEFycmF5QnVmZmVyIG9iamVjdC5cbiAgICAgKi9cbiAgICBidWZmZXI7XG4gICAgLyoqXG4gICAgICogQnl0ZSBsZW5ndGggb2YgdGhlIGludGVybmFsIEFycmF5QnVmZmVyLlxuICAgICAqL1xuICAgIGJ5dGVMZW5ndGg7XG4gICAgLyoqXG4gICAgICogQnl0ZSBvZmZzZXQgb2YgdGhlIGludGVybmFsIEFycmF5QnVmZmVyLlxuICAgICAqL1xuICAgIGJ5dGVPZmZzZXQ7XG4gICAgLyoqXG4gICAgICogQnl0ZSBsZW5ndGggb2YgdGhlIGludGVybmFsIEFycmF5QnVmZmVyLlxuICAgICAqL1xuICAgIGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBvZmZzZXQgb2YgdGhlIGJ1ZmZlcidzIHBvaW50ZXIuXG4gICAgICovXG4gICAgb2Zmc2V0O1xuICAgIGxhc3RXcml0dGVuQnl0ZTtcbiAgICBsaXR0bGVFbmRpYW47XG4gICAgX2RhdGE7XG4gICAgX21hcms7XG4gICAgX21hcmtzO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBJT0J1ZmZlci5cbiAgICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGNvbnN0cnVjdCB0aGUgSU9CdWZmZXIgd2l0aC5cbiAgICAgKiBJZiBkYXRhIGlzIGEgbnVtYmVyLCBpdCB3aWxsIGJlIHRoZSBuZXcgYnVmZmVyJ3MgbGVuZ3RoPGJyPlxuICAgICAqIElmIGRhdGEgaXMgYHVuZGVmaW5lZGAsIHRoZSBidWZmZXIgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGEgZGVmYXVsdCBsZW5ndGggb2YgOEtiPGJyPlxuICAgICAqIElmIGRhdGEgaXMgYW4gQXJyYXlCdWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyLCBhbiBBcnJheUJ1ZmZlclZpZXcgKFR5cGVkIEFycmF5KSwgYW4gSU9CdWZmZXIgaW5zdGFuY2UsXG4gICAgICogb3IgYSBOb2RlLmpzIEJ1ZmZlciwgYSB2aWV3IHdpbGwgYmUgY3JlYXRlZCBvdmVyIHRoZSB1bmRlcmx5aW5nIEFycmF5QnVmZmVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IGZvciB0aGUgb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBJT0J1ZmZlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihkYXRhID0gZGVmYXVsdEJ5dGVMZW5ndGgsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBsZXQgZGF0YUlzR2l2ZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZGF0YSA9IG5ldyBBcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFJc0dpdmVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubGFzdFdyaXR0ZW5CeXRlID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0ID8gb3B0aW9ucy5vZmZzZXQgPj4+IDAgOiAwO1xuICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICBsZXQgZHZPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkgfHwgZGF0YSBpbnN0YW5jZW9mIElPQnVmZmVyKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5ieXRlTGVuZ3RoICE9PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZHZPZmZzZXQgPSBkYXRhLmJ5dGVPZmZzZXQgKyBvZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFJc0dpdmVuKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RXcml0dGVuQnl0ZSA9IGJ5dGVMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RXcml0dGVuQnl0ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICAgIHRoaXMuYnl0ZU9mZnNldCA9IGR2T2Zmc2V0O1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMubGl0dGxlRW5kaWFuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlciwgZHZPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICB0aGlzLl9tYXJrID0gMDtcbiAgICAgICAgdGhpcy5fbWFya3MgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZSBidWZmZXIgaXMgc3VmZmljaWVudCB0byBzdG9yZSBtb3JlXG4gICAgICogYnl0ZXMgYWZ0ZXIgdGhlIG9mZnNldC5cbiAgICAgKiBAcGFyYW0gYnl0ZUxlbmd0aCAtIFRoZSBuZWVkZWQgbWVtb3J5IGluIGJ5dGVzLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBhdmFpbGFibGUoYnl0ZUxlbmd0aCA9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ICsgYnl0ZUxlbmd0aCA8PSB0aGlzLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgbGl0dGxlLWVuZGlhbiBtb2RlIGlzIHVzZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgbXVsdGktYnl0ZVxuICAgICAqIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbGl0dGxlLWVuZGlhbiBtb2RlIGlzIHVzZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzTGl0dGxlRW5kaWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXR0bGVFbmRpYW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBsaXR0bGUtZW5kaWFuIG1vZGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgbXVsdGktYnl0ZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBzZXRMaXR0bGVFbmRpYW4oKSB7XG4gICAgICAgIHRoaXMubGl0dGxlRW5kaWFuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGJpZy1lbmRpYW4gbW9kZSBpcyB1c2VkIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIG11bHRpLWJ5dGUgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBiaWctZW5kaWFuIG1vZGUgaXMgdXNlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNCaWdFbmRpYW4oKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5saXR0bGVFbmRpYW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN3aXRjaGVzIHRvIGJpZy1lbmRpYW4gbW9kZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBtdWx0aS1ieXRlIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHNldEJpZ0VuZGlhbigpIHtcbiAgICAgICAgdGhpcy5saXR0bGVFbmRpYW4gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vdmUgdGhlIHBvaW50ZXIgbiBieXRlcyBmb3J3YXJkLlxuICAgICAqIEBwYXJhbSBuIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBza2lwKG4gPSAxKSB7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IG47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3ZlIHRoZSBwb2ludGVyIG4gYnl0ZXMgYmFja3dhcmQuXG4gICAgICogQHBhcmFtIG4gLSBOdW1iZXIgb2YgYnl0ZXMgdG8gbW92ZSBiYWNrLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgYmFjayhuID0gMSkge1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW92ZSB0aGUgcG9pbnRlciB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuICAgICAqIEBwYXJhbSBvZmZzZXQgLSBUaGUgb2Zmc2V0IHRvIG1vdmUgdG8uXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBzZWVrKG9mZnNldCkge1xuICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoZSBjdXJyZW50IHBvaW50ZXIgb2Zmc2V0LlxuICAgICAqIEBzZWUge0BsaW5rIElPQnVmZmVyI3Jlc2V0fVxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgbWFyaygpIHtcbiAgICAgICAgdGhpcy5fbWFyayA9IHRoaXMub2Zmc2V0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW92ZSB0aGUgcG9pbnRlciBiYWNrIHRvIHRoZSBsYXN0IHBvaW50ZXIgb2Zmc2V0IHNldCBieSBtYXJrLlxuICAgICAqIEBzZWUge0BsaW5rIElPQnVmZmVyI21hcmt9XG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSB0aGlzLl9tYXJrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaCB0aGUgY3VycmVudCBwb2ludGVyIG9mZnNldCB0byB0aGUgbWFyayBzdGFjay5cbiAgICAgKiBAc2VlIHtAbGluayBJT0J1ZmZlciNwb3BNYXJrfVxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgcHVzaE1hcmsoKSB7XG4gICAgICAgIHRoaXMuX21hcmtzLnB1c2godGhpcy5vZmZzZXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUG9wIHRoZSBsYXN0IHBvaW50ZXIgb2Zmc2V0IGZyb20gdGhlIG1hcmsgc3RhY2ssIGFuZCBzZXQgdGhlIGN1cnJlbnRcbiAgICAgKiBwb2ludGVyIG9mZnNldCB0byB0aGUgcG9wcGVkIHZhbHVlLlxuICAgICAqIEBzZWUge0BsaW5rIElPQnVmZmVyI3B1c2hNYXJrfVxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgcG9wTWFyaygpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fbWFya3MucG9wKCk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXJrIHN0YWNrIGVtcHR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWVrKG9mZnNldCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3ZlIHRoZSBwb2ludGVyIG9mZnNldCBiYWNrIHRvIDAuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICByZXdpbmQoKSB7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGhhcyBzdWZmaWNpZW50IG1lbW9yeSB0byB3cml0ZSBhIGdpdmVuIGJ5dGVMZW5ndGggYXRcbiAgICAgKiB0aGUgY3VycmVudCBwb2ludGVyIG9mZnNldC5cbiAgICAgKiBJZiB0aGUgYnVmZmVyJ3MgbWVtb3J5IGlzIGluc3VmZmljaWVudCwgdGhpcyBtZXRob2Qgd2lsbCBjcmVhdGUgYSBuZXdcbiAgICAgKiBidWZmZXIgKGEgY29weSkgd2l0aCBhIGxlbmd0aCB0aGF0IGlzIHR3aWNlIChieXRlTGVuZ3RoICsgY3VycmVudCBvZmZzZXQpLlxuICAgICAqIEBwYXJhbSBieXRlTGVuZ3RoIC0gVGhlIG5lZWRlZCBtZW1vcnkgaW4gYnl0ZXMuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBlbnN1cmVBdmFpbGFibGUoYnl0ZUxlbmd0aCA9IDEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF2YWlsYWJsZShieXRlTGVuZ3RoKSkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoTmVlZGVkID0gdGhpcy5vZmZzZXQgKyBieXRlTGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgbmV3TGVuZ3RoID0gbGVuZ3RoTmVlZGVkICogMjtcbiAgICAgICAgICAgIGNvbnN0IG5ld0FycmF5ID0gbmV3IFVpbnQ4QXJyYXkobmV3TGVuZ3RoKTtcbiAgICAgICAgICAgIG5ld0FycmF5LnNldChuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcikpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXdBcnJheS5idWZmZXI7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgRGF0YVZpZXcodGhpcy5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgYnl0ZSBhbmQgcmV0dXJuIGZhbHNlIGlmIHRoZSBieXRlJ3MgdmFsdWUgaXMgMCwgb3IgdHJ1ZSBvdGhlcndpc2UuXG4gICAgICogTW92ZXMgcG9pbnRlciBmb3J3YXJkIGJ5IG9uZSBieXRlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIGJvb2xlYW4uXG4gICAgICovXG4gICAgcmVhZEJvb2xlYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRVaW50OCgpICE9PSAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgc2lnbmVkIDgtYml0IGludGVnZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDEgYnl0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCBieXRlLlxuICAgICAqL1xuICAgIHJlYWRJbnQ4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRJbnQ4KHRoaXMub2Zmc2V0KyspO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDEgYnl0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCBieXRlLlxuICAgICAqL1xuICAgIHJlYWRVaW50OCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0VWludDgodGhpcy5vZmZzZXQrKyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB7QGxpbmsgSU9CdWZmZXIjcmVhZFVpbnQ4fS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCBieXRlLlxuICAgICAqL1xuICAgIHJlYWRCeXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkVWludDgoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBgbmAgYnl0ZXMgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IGBuYCBieXRlcy5cbiAgICAgKiBAcGFyYW0gbiAtIE51bWJlciBvZiBieXRlcyB0byByZWFkLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIGJ5dGVzLlxuICAgICAqL1xuICAgIHJlYWRCeXRlcyhuID0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQXJyYXkobiwgJ3VpbnQ4Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZSBgdHlwZWAgYW5kIHNpemUgYHNpemVgLlxuICAgICAqIEZvciBleGFtcGxlIHR5cGUgYHVpbnQ4YCB3aWxsIGNyZWF0ZSBhIGBVaW50OEFycmF5YC5cbiAgICAgKiBAcGFyYW0gc2l6ZSAtIHNpemUgb2YgdGhlIHJlc3VsdGluZyBhcnJheVxuICAgICAqIEBwYXJhbSB0eXBlIC0gbnVtYmVyIHR5cGUgb2YgZWxlbWVudHMgdG8gcmVhZFxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIGFycmF5LlxuICAgICAqL1xuICAgIHJlYWRBcnJheShzaXplLCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdHlwZWRBcnJheXNbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQgKiBzaXplO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmJ5dGVPZmZzZXQgKyB0aGlzLm9mZnNldDtcbiAgICAgICAgY29uc3Qgc2xpY2UgPSB0aGlzLmJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVzKTtcbiAgICAgICAgaWYgKHRoaXMubGl0dGxlRW5kaWFuID09PSBob3N0QmlnRW5kaWFuICYmXG4gICAgICAgICAgICB0eXBlICE9PSAndWludDgnICYmXG4gICAgICAgICAgICB0eXBlICE9PSAnaW50OCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBieXRlcykpO1xuICAgICAgICAgICAgc2xpY2UucmV2ZXJzZSgpO1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBuZXcgdHlwZWRBcnJheXNbdHlwZV0oc2xpY2UuYnVmZmVyKTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0ICs9IGJ5dGVzO1xuICAgICAgICAgICAgcmV0dXJuQXJyYXkucmV2ZXJzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkFycmF5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gbmV3IHR5cGVkQXJyYXlzW3R5cGVdKHNsaWNlKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgIHJldHVybiByZXR1cm5BcnJheTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIDE2LWJpdCBzaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMiBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkSW50MTYoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAyO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMiBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkVWludDE2KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEuZ2V0VWludDE2KHRoaXMub2Zmc2V0LCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDI7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgNCBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkSW50MzIoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRJbnQzMih0aGlzLm9mZnNldCwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgNCBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkVWludDMyKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEuZ2V0VWludDMyKHRoaXMub2Zmc2V0LCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIDMyLWJpdCBmbG9hdGluZyBudW1iZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDQgYnl0ZXMuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgdmFsdWUuXG4gICAgICovXG4gICAgcmVhZEZsb2F0MzIoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRGbG9hdDMyKHRoaXMub2Zmc2V0LCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIDY0LWJpdCBmbG9hdGluZyBudW1iZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDggYnl0ZXMuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgdmFsdWUuXG4gICAgICovXG4gICAgcmVhZEZsb2F0NjQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRGbG9hdDY0KHRoaXMub2Zmc2V0LCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIDY0LWJpdCBzaWduZWQgaW50ZWdlciBudW1iZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDggYnl0ZXMuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgdmFsdWUuXG4gICAgICovXG4gICAgcmVhZEJpZ0ludDY0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2RhdGEuZ2V0QmlnSW50NjQodGhpcy5vZmZzZXQsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgbnVtYmVyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSA4IGJ5dGVzLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIHZhbHVlLlxuICAgICAqL1xuICAgIHJlYWRCaWdVaW50NjQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRCaWdVaW50NjQodGhpcy5vZmZzZXQsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgMS1ieXRlIEFTQ0lJIGNoYXJhY3RlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMSBieXRlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIGNoYXJhY3Rlci5cbiAgICAgKi9cbiAgICByZWFkQ2hhcigpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWNvZGUtcG9pbnRcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkSW50OCgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBgbmAgMS1ieXRlIEFTQ0lJIGNoYXJhY3RlcnMgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IGBuYCBieXRlcy5cbiAgICAgKiBAcGFyYW0gbiAtIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlYWQuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgY2hhcmFjdGVycy5cbiAgICAgKi9cbiAgICByZWFkQ2hhcnMobiA9IDEpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMucmVhZENoYXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIHRoZSBuZXh0IGBuYCBieXRlcywgcmV0dXJuIGEgVVRGLTggZGVjb2RlZCBzdHJpbmcgYW5kIG1vdmUgcG9pbnRlclxuICAgICAqIGZvcndhcmQgYnkgYG5gIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBuIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuXG4gICAgICogQHJldHVybnMgVGhlIGRlY29kZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIHJlYWRVdGY4KG4gPSAxKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGUodGhpcy5yZWFkQnl0ZXMobikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIHRoZSBuZXh0IGBuYCBieXRlcywgcmV0dXJuIGEgc3RyaW5nIGRlY29kZWQgd2l0aCBgZW5jb2RpbmdgIGFuZCBtb3ZlIHBvaW50ZXJcbiAgICAgKiBmb3J3YXJkIGJ5IGBuYCBieXRlcy5cbiAgICAgKiBJZiBubyBlbmNvZGluZyBpcyBwYXNzZWQsIHRoZSBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIEBzZWUge0BsaW5rIElPQnVmZmVyI3JlYWRVdGY4fVxuICAgICAqIEBwYXJhbSBuIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuXG4gICAgICogQHBhcmFtIGVuY29kaW5nIC0gVGhlIGVuY29kaW5nIHRvIHVzZS4gRGVmYXVsdCBpcyAndXRmOCcuXG4gICAgICogQHJldHVybnMgVGhlIGRlY29kZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGRlY29kZVRleHQobiA9IDEsIGVuY29kaW5nID0gJ3V0ZjgnKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGUodGhpcy5yZWFkQnl0ZXMobiksIGVuY29kaW5nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgMHhmZiBpZiB0aGUgcGFzc2VkIHZhbHVlIGlzIHRydXRoeSwgMHgwMCBvdGhlcndpc2UgYW5kIG1vdmUgcG9pbnRlclxuICAgICAqIGZvcndhcmQgYnkgMSBieXRlLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlQm9vbGVhbih2YWx1ZSkge1xuICAgICAgICB0aGlzLndyaXRlVWludDgodmFsdWUgPyAweGZmIDogMHgwMCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBgdmFsdWVgIGFzIGFuIDgtYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSAxIGJ5dGUuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVJbnQ4KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDEpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldEludDgodGhpcy5vZmZzZXQrKywgdmFsdWUpO1xuICAgICAgICB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMVxuICAgICAqIGJ5dGUuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVVaW50OCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmVuc3VyZUF2YWlsYWJsZSgxKTtcbiAgICAgICAgdGhpcy5fZGF0YS5zZXRVaW50OCh0aGlzLm9mZnNldCsrLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gYWxpYXMgZm9yIHtAbGluayBJT0J1ZmZlciN3cml0ZVVpbnQ4fS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUJ5dGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JpdGVVaW50OCh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGFsbCBlbGVtZW50cyBvZiBgYnl0ZXNgIGFzIHVpbnQ4IHZhbHVlcyBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnlcbiAgICAgKiBgYnl0ZXMubGVuZ3RoYCBieXRlcy5cbiAgICAgKiBAcGFyYW0gYnl0ZXMgLSBUaGUgYXJyYXkgb2YgYnl0ZXMgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUJ5dGVzKGJ5dGVzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKGJ5dGVzLmxlbmd0aCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhLnNldFVpbnQ4KHRoaXMub2Zmc2V0KyssIGJ5dGVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYSAxNi1iaXQgc2lnbmVkIGludGVnZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDJcbiAgICAgKiBieXRlcy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUludDE2KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDIpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldEludDE2KHRoaXMub2Zmc2V0LCB2YWx1ZSwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAyO1xuICAgICAgICB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMlxuICAgICAqIGJ5dGVzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlVWludDE2KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDIpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldFVpbnQxNih0aGlzLm9mZnNldCwgdmFsdWUsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gMjtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBgdmFsdWVgIGFzIGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSA0XG4gICAgICogYnl0ZXMuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVJbnQzMih2YWx1ZSkge1xuICAgICAgICB0aGlzLmVuc3VyZUF2YWlsYWJsZSg0KTtcbiAgICAgICAgdGhpcy5fZGF0YS5zZXRJbnQzMih0aGlzLm9mZnNldCwgdmFsdWUsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBgdmFsdWVgIGFzIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDRcbiAgICAgKiBieXRlcy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZVVpbnQzMih2YWx1ZSkge1xuICAgICAgICB0aGlzLmVuc3VyZUF2YWlsYWJsZSg0KTtcbiAgICAgICAgdGhpcy5fZGF0YS5zZXRVaW50MzIodGhpcy5vZmZzZXQsIHZhbHVlLCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYHZhbHVlYCBhcyBhIDMyLWJpdCBmbG9hdGluZyBudW1iZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDRcbiAgICAgKiBieXRlcy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUZsb2F0MzIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBdmFpbGFibGUoNCk7XG4gICAgICAgIHRoaXMuX2RhdGEuc2V0RmxvYXQzMih0aGlzLm9mZnNldCwgdmFsdWUsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBgdmFsdWVgIGFzIGEgNjQtYml0IGZsb2F0aW5nIG51bWJlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgOFxuICAgICAqIGJ5dGVzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlRmxvYXQ2NCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmVuc3VyZUF2YWlsYWJsZSg4KTtcbiAgICAgICAgdGhpcy5fZGF0YS5zZXRGbG9hdDY0KHRoaXMub2Zmc2V0LCB2YWx1ZSwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA4O1xuICAgICAgICB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYSA2NC1iaXQgc2lnbmVkIGJpZ2ludCBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgOFxuICAgICAqIGJ5dGVzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlQmlnSW50NjQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBdmFpbGFibGUoOCk7XG4gICAgICAgIHRoaXMuX2RhdGEuc2V0QmlnSW50NjQodGhpcy5vZmZzZXQsIHZhbHVlLCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYHZhbHVlYCBhcyBhIDY0LWJpdCB1bnNpZ25lZCBiaWdpbnQgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDhcbiAgICAgKiBieXRlcy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUJpZ1VpbnQ2NCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmVuc3VyZUF2YWlsYWJsZSg4KTtcbiAgICAgICAgdGhpcy5fZGF0YS5zZXRCaWdVaW50NjQodGhpcy5vZmZzZXQsIHZhbHVlLCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIGNoYXJDb2RlIG9mIGBzdHJgJ3MgZmlyc3QgY2hhcmFjdGVyIGFzIGFuIDgtYml0IHVuc2lnbmVkIGludGVnZXJcbiAgICAgKiBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMSBieXRlLlxuICAgICAqIEBwYXJhbSBzdHIgLSBUaGUgY2hhcmFjdGVyIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVDaGFyKHN0cikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItY29kZS1wb2ludFxuICAgICAgICByZXR1cm4gdGhpcy53cml0ZVVpbnQ4KHN0ci5jaGFyQ29kZUF0KDApKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgdGhlIGNoYXJDb2RlcyBvZiBhbGwgYHN0cmAncyBjaGFyYWN0ZXJzIGFzIDgtYml0IHVuc2lnbmVkIGludGVnZXJzXG4gICAgICogYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IGBzdHIubGVuZ3RoYCBieXRlcy5cbiAgICAgKiBAcGFyYW0gc3RyIC0gVGhlIGNoYXJhY3RlcnMgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUNoYXJzKHN0cikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWNvZGUtcG9pbnRcbiAgICAgICAgICAgIHRoaXMud3JpdGVVaW50OChzdHIuY2hhckNvZGVBdChpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVURi04IGVuY29kZSBhbmQgd3JpdGUgYHN0cmAgdG8gdGhlIGN1cnJlbnQgcG9pbnRlciBvZmZzZXQgYW5kIG1vdmUgcG9pbnRlclxuICAgICAqIGZvcndhcmQgYWNjb3JkaW5nIHRvIHRoZSBlbmNvZGVkIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlVXRmOChzdHIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JpdGVCeXRlcyhlbmNvZGUoc3RyKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydCBhIFVpbnQ4QXJyYXkgdmlldyBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLlxuICAgICAqIFRoZSB2aWV3IHN0YXJ0cyBhdCB0aGUgYnl0ZSBvZmZzZXQgYW5kIGl0cyBsZW5ndGhcbiAgICAgKiBpcyBjYWxjdWxhdGVkIHRvIHN0b3AgYXQgdGhlIGxhc3Qgd3JpdHRlbiBieXRlIG9yIHRoZSBvcmlnaW5hbCBsZW5ndGguXG4gICAgICogQHJldHVybnMgQSBuZXcgVWludDhBcnJheSB2aWV3LlxuICAgICAqL1xuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5ieXRlT2Zmc2V0LCB0aGlzLmxhc3RXcml0dGVuQnl0ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqICBHZXQgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHNvIGZhciwgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCBvZmZzZXQuXG4gICAgICogQHJldHVybnMgLSBUb3RhbCBudW1iZXIgb2YgYnl0ZXMuXG4gICAgICovXG4gICAgZ2V0V3JpdHRlbkJ5dGVMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RXcml0dGVuQnl0ZSAtIHRoaXMuYnl0ZU9mZnNldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBsYXN0IHdyaXR0ZW4gYnl0ZSBvZmZzZXRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm9mZnNldCA+IHRoaXMubGFzdFdyaXR0ZW5CeXRlKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RXcml0dGVuQnl0ZSA9IHRoaXMub2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SU9CdWZmZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/iobuffer/lib-esm/IOBuffer.js\n");
/***/ }),
/***/ "(ssr)/./node_modules/iobuffer/lib-esm/text.js":
/*!***********************************************!*\
!*** ./node_modules/iobuffer/lib-esm/text.js ***!
\***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decode: () => (/* binding */ decode),\n/* harmony export */ encode: () => (/* binding */ encode)\n/* harmony export */ });\nfunction decode(bytes, encoding = 'utf8') {\n const decoder = new TextDecoder(encoding);\n return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\nfunction encode(str) {\n return encoder.encode(str);\n}\n//# sourceMappingURL=text.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvaW9idWZmZXIvbGliLWVzbS90ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdmVyaWZ5cGFjay1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9pb2J1ZmZlci9saWItZXNtL3RleHQuanM/YzBhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZyA9ICd1dGY4Jykge1xuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpO1xuICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShieXRlcyk7XG59XG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShzdHIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGV4dC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/iobuffer/lib-esm/text.js\n");
/***/ })
};
;