@pyefi/widget 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pye-widget.es.js +1471 -1396
- package/dist/pye-widget.es.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pye-widget.es.js","sources":["../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js","../src/buffer-polyfill.ts","../src/stores/widget-store.ts","../src/components/design-system.ts","../src/assets/icons/phantom.png","../src/assets/icons/backoack.png","../src/assets/icons/metamasj.png","../src/components/Icons.tsx","../src/components/shared/Layout.tsx","../src/components/screens/WelcomeScreen.tsx","../src/components/screens/ConnectWallet.tsx","../src/components/screens/YieldForwardIntro.tsx","../src/components/screens/SelectPosition.tsx","../src/components/screens/ChooseAmount.tsx","../src/components/shared/Odometer.tsx","../src/components/screens/ChooseDuration.tsx","../src/components/screens/ReviewQuote.tsx","../src/components/screens/RedeemList.tsx","../src/components/screens/StepComplete.tsx","../src/components/screens/RedeemComplete.tsx","../src/components/WidgetShell.tsx","../src/components/WalletChangeWatcher.tsx","../src/PyeWidget.tsx"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","// Side-effect import: makes Node's `Buffer` available as a browser global so\n// transitive deps (@cks-systems/manifest-sdk, @solana/web3.js, etc.) that\n// reference `Buffer` at module-evaluation time don't crash in browser apps\n// that haven't set up their own polyfill.\nimport { Buffer as BufferShim } from \"buffer\";\n\nconst g = globalThis as unknown as { Buffer?: unknown };\nif (typeof g.Buffer === \"undefined\") {\n g.Buffer = BufferShim;\n}\n","import { createStore } from \"zustand/vanilla\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { createContext, useContext } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { MaturityId } from \"@pyefi/sdk\";\n\nexport type WidgetScreen =\n | \"yield-forward-intro\"\n | \"connect-wallet\"\n | \"welcome\"\n | \"redeem-list\"\n | \"select-position\"\n | \"choose-amount\"\n | \"choose-duration\"\n | \"review-quote\"\n | \"complete\"\n | \"redeem-complete\";\n\nexport interface WidgetState {\n screen: WidgetScreen;\n screenHistory: WidgetScreen[];\n\n selectedStakeAccountPubkey: string | null;\n selectedStakeAccountBalance: number;\n selectedValidatorName: string | null;\n selectedValidatorIcon: string | null;\n selectedValidatorVoteAccount: string | null;\n selectedValidatorAltPubkey: string | null;\n depositAmount: string;\n selectedMaturityId: MaturityId | null;\n\n advancedOpen: boolean;\n slippageBps: number;\n\n txStatus: \"idle\" | \"loading\" | \"success\" | \"error\";\n txStep: \"idle\" | \"depositing\" | \"selling\" | \"complete\";\n depositTxSignature: string | null;\n sellTxSignature: string | null;\n txSignature: string | null;\n txError: string | null;\n /** Actual SOL received from RT sell, set after transaction completes */\n sellAmountSol: number | null;\n\n /** Which PT mint is currently being redeemed */\n redeemingMint: string | null;\n /** Error surfaced by the redeem flow */\n redeemError: string | null;\n /** SOL amount received from redeem, set after transaction completes */\n redeemAmountSol: number | null;\n /** Redeem transaction signature */\n redeemTxSignature: string | null;\n}\n\nexport interface WidgetActions {\n navigate(screen: WidgetScreen): void;\n goBack(): void;\n selectStakeAccount(pubkey: string, balance: number, validatorName?: string, validatorIcon?: string, validatorVoteAccount?: string, validatorAltPubkey?: string | null): void;\n setDepositAmount(amount: string): void;\n setSelectedMaturity(id: MaturityId): void;\n setAdvancedOpen(open: boolean): void;\n setSlippageBps(bps: number): void;\n setSellAmountSol(amount: number): void;\n setRedeemingMint(mint: string | null): void;\n setRedeemError(error: string | null): void;\n setRedeemAmountSol(amount: number): void;\n setRedeemTxSignature(sig: string): void;\n setTxStep(step: WidgetState[\"txStep\"]): void;\n setTxStatus(\n status: WidgetState[\"txStatus\"],\n signature?: string | null,\n error?: string | null,\n ): void;\n reset(): void;\n resetForWalletChange(): void;\n}\n\nexport type WidgetStoreType = WidgetState & WidgetActions;\n\nconst initialState: WidgetState = {\n screen: \"yield-forward-intro\",\n screenHistory: [],\n\n selectedStakeAccountPubkey: null,\n selectedStakeAccountBalance: 0,\n selectedValidatorName: null,\n selectedValidatorIcon: null,\n selectedValidatorVoteAccount: null,\n selectedValidatorAltPubkey: null,\n depositAmount: \"\",\n selectedMaturityId: null,\n\n advancedOpen: false,\n slippageBps: 100,\n\n txStatus: \"idle\",\n txStep: \"idle\",\n depositTxSignature: null,\n sellTxSignature: null,\n txSignature: null,\n txError: null,\n sellAmountSol: null,\n\n redeemingMint: null,\n redeemError: null,\n redeemAmountSol: null,\n redeemTxSignature: null,\n};\n\nexport function createWidgetStore() {\n return createStore<WidgetStoreType>()(\n immer((set) => ({\n ...initialState,\n\n navigate(screen) {\n set((s) => {\n s.screenHistory.push(s.screen);\n s.screen = screen;\n });\n },\n\n goBack() {\n set((s) => {\n const prev = s.screenHistory.pop();\n if (prev) s.screen = prev;\n if (s.txStatus === \"error\") {\n s.txStatus = \"idle\";\n s.txStep = \"idle\";\n s.txError = null;\n }\n s.redeemError = null;\n });\n },\n\n selectStakeAccount(pubkey, balance, validatorName, validatorIcon, validatorVoteAccount, validatorAltPubkey) {\n set((s) => {\n s.selectedStakeAccountPubkey = pubkey;\n s.selectedStakeAccountBalance = balance;\n s.selectedValidatorName = validatorName ?? null;\n s.selectedValidatorIcon = validatorIcon ?? null;\n s.selectedValidatorVoteAccount = validatorVoteAccount ?? null;\n s.selectedValidatorAltPubkey = validatorAltPubkey ?? null;\n });\n },\n\n setDepositAmount(amount) {\n set((s) => {\n s.depositAmount = amount;\n });\n },\n\n setSelectedMaturity(id) {\n set((s) => {\n s.selectedMaturityId = id;\n });\n },\n\n setAdvancedOpen(open) {\n set((s) => {\n s.advancedOpen = open;\n });\n },\n\n setSlippageBps(bps) {\n set((s) => {\n s.slippageBps = bps;\n });\n },\n\n setSellAmountSol(amount) {\n set((s) => {\n s.sellAmountSol = amount;\n });\n },\n\n setRedeemingMint(mint) {\n set((s) => {\n s.redeemingMint = mint;\n });\n },\n\n setRedeemError(error) {\n set((s) => {\n s.redeemError = error;\n });\n },\n\n setRedeemAmountSol(amount) {\n set((s) => {\n s.redeemAmountSol = amount;\n });\n },\n\n setRedeemTxSignature(sig) {\n set((s) => {\n s.redeemTxSignature = sig;\n });\n },\n\n setTxStep(step) {\n set((s) => {\n s.txStep = step;\n });\n },\n\n setTxStatus(status, signature, error) {\n set((s) => {\n s.txStatus = status;\n s.txSignature = signature ?? null;\n s.txError = error ?? null;\n if (status === \"idle\") {\n s.txStep = \"idle\";\n s.depositTxSignature = null;\n s.sellTxSignature = null;\n }\n });\n },\n\n reset() {\n set(() => ({ ...initialState }));\n },\n\n resetForWalletChange() {\n set((s) => {\n s.selectedStakeAccountPubkey = null;\n s.selectedStakeAccountBalance = 0;\n s.selectedValidatorName = null;\n s.selectedValidatorIcon = null;\n s.selectedValidatorVoteAccount = null;\n s.selectedValidatorAltPubkey = null;\n s.depositAmount = \"\";\n s.selectedMaturityId = null;\n s.txStatus = \"idle\";\n s.txStep = \"idle\";\n s.depositTxSignature = null;\n s.sellTxSignature = null;\n s.txSignature = null;\n s.txError = null;\n s.sellAmountSol = null;\n s.redeemingMint = null;\n s.redeemError = null;\n s.redeemAmountSol = null;\n s.redeemTxSignature = null;\n if (\n s.screen === \"choose-amount\" ||\n s.screen === \"choose-duration\" ||\n s.screen === \"review-quote\" ||\n s.screen === \"complete\" ||\n s.screen === \"redeem-complete\" ||\n s.screen === \"redeem-list\"\n ) {\n s.screen = \"welcome\";\n s.screenHistory = [];\n }\n });\n },\n })),\n );\n}\n\n// Context\ntype WidgetStoreApi = ReturnType<typeof createWidgetStore>;\nexport const WidgetStoreContext = createContext<WidgetStoreApi | null>(null);\n\nexport function useWidgetStore<T>(selector: (state: WidgetStoreType) => T): T {\n const store = useContext(WidgetStoreContext);\n if (!store) {\n throw new Error(\"useWidgetStore must be used within WidgetStoreProvider\");\n }\n return useStore(store, selector);\n}\n","import type React from \"react\";\n\n// ─── Design Tokens ─────────────────────────────────────────────────────────────\nexport const c = {\n bg: \"var(--c-bg)\",\n surface: \"var(--c-surface)\",\n raised: \"var(--c-raised)\",\n lowered: \"var(--c-lowered)\",\n shadow: \"var(--c-shadow)\",\n highlight: \"var(--c-highlight)\",\n primary: \"var(--c-primary)\",\n secondary: \"var(--c-secondary)\",\n muted: \"var(--c-muted)\",\n green: \"#0d9c5e\",\n purple: \"var(--c-brand)\",\n red: \"#D93B3B\",\n};\n\nexport const THEME_CSS = `\n [data-theme] *, [data-theme] *::before, [data-theme] *::after { box-sizing: border-box; }\n :root, [data-theme=\"pye-light\"] {\n --c-bg: #e6e3e0;\n --c-surface: #f1efed;\n --c-raised: #f8f7f6;\n --c-lowered: #eceae8;\n --c-shadow: #e0ddd9;\n --c-highlight: #ffffff;\n --c-primary: #24201c;\n --c-secondary: #5b554c;\n --c-muted: #a09b96;\n --c-brand: #9a4dff;\n --c-brand-hi: #b78eff;\n --c-brand-sh: #6c24c2;\n --c-brand-text: #ffffff;\n }\n [data-theme=\"pye-dark\"] {\n --c-bg: #110F14;\n --c-surface: #1F1C26;\n --c-raised: #2B2735;\n --c-lowered: #110F14;\n --c-shadow: #0A090C;\n --c-highlight: #3C364A;\n --c-primary: #FFFFFF;\n --c-secondary: #D7D4DD;\n --c-muted: rgba(255,255,255,0.4);\n --c-brand: #9a4dff;\n --c-brand-hi: #b78eff;\n --c-brand-sh: #6c24c2;\n --c-brand-text: #ffffff;\n --fill-0: #ffffff;\n }\n [data-theme=\"graphite\"] {\n --c-bg: #1c1c1e;\n --c-surface: #2c2c2e;\n --c-raised: #3a3a3c;\n --c-lowered: #111113;\n --c-shadow: #000000;\n --c-highlight: #48484a;\n --c-primary: #ffffff;\n --c-secondary: #aeaeb2;\n --c-muted: #8e8e93;\n --c-brand: #ffffff;\n --c-brand-hi: rgba(255,255,255,0.2);\n --c-brand-sh: rgba(0,0,0,0.2);\n --c-brand-text: #000000;\n --fill-0: #ffffff;\n }\n /* WalletConnect / Reown AppKit modal stacks at --w3m-z-index (default 999),\n but host pages typically wrap the widget in a scrim around z-index 9999,\n which would cover the QR modal. Bump it above any realistic scrim. */\n w3m-modal, wcm-modal { --w3m-z-index: 2147483647; }\n\n /* ─── Hover rules (replaces JS useState hover state) ─────────────── */\n .pye-hoverable {\n transition: background 160ms cubic-bezier(0.2,0.9,0.2,1),\n transform 160ms cubic-bezier(0.2,0.9,0.2,1),\n box-shadow 160ms cubic-bezier(0.2,0.9,0.2,1) !important;\n }\n .pye-hoverable:hover {\n background: var(--c-highlight) !important;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08), inset 0 -1px 0 var(--c-shadow) !important;\n }\n .pye-pill:not(.pye-pill--selected):hover { background: var(--c-highlight) !important; }\n .pye-cta-purple:hover:not(:disabled) { filter: brightness(1.15); }\n .pye-cta-default:hover:not(:disabled) { background: var(--c-highlight) !important; }\n .pye-redeem-btn:hover:not(:disabled) { filter: brightness(1.15); }\n\n /* ─── Press feedback (scale 0.98 on active) ──────────────────────── */\n .pye-cta-purple, .pye-cta-default, .pye-redeem-btn, .pye-pill {\n transition: background 120ms cubic-bezier(0.2,0.9,0.2,1),\n filter 120ms cubic-bezier(0.2,0.9,0.2,1),\n transform 120ms cubic-bezier(0.2,0.9,0.2,1) !important;\n }\n .pye-cta-purple:active:not(:disabled),\n .pye-cta-default:active:not(:disabled),\n .pye-redeem-btn:active:not(:disabled),\n .pye-pill:active {\n transform: scale(0.98);\n }\n @media (prefers-reduced-motion: reduce) {\n .pye-hoverable, .pye-hoverable:hover,\n .pye-cta-purple, .pye-cta-default, .pye-redeem-btn, .pye-pill,\n .pye-cta-purple:active, .pye-cta-default:active, .pye-redeem-btn:active, .pye-pill:active {\n transform: none !important;\n transition: background 120ms, filter 120ms !important;\n }\n }\n\n /* ─── Skeleton shimmer ───────────────────────────────────────── */\n @keyframes pye-skeleton-pulse {\n 0%, 100% { opacity: 0.55; }\n 50% { opacity: 0.85; }\n }\n .pye-skeleton {\n animation: pye-skeleton-pulse 1.4s ease-in-out infinite;\n background: linear-gradient(\n 90deg,\n var(--c-lowered) 0%,\n var(--c-shadow) 50%,\n var(--c-lowered) 100%\n );\n background-size: 200% 100%;\n border-radius: 4px;\n }\n @media (prefers-reduced-motion: reduce) {\n .pye-skeleton { animation: none; opacity: 0.7; }\n }\n\n /* ─── Step transition: subtle translate + fade on mount ──────── */\n @keyframes pye-step-in {\n 0% { transform: translateY(8px); opacity: 0; }\n 100% { transform: translateY(0); opacity: 1; }\n }\n .pye-step-in {\n animation: pye-step-in 280ms cubic-bezier(0.2, 0.9, 0.2, 1) both;\n will-change: transform, opacity;\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n min-height: 0;\n }\n @media (prefers-reduced-motion: reduce) {\n .pye-step-in { animation: none; }\n }\n`;\n\nexport const DISPLAY_FONT = \"'Inter', sans-serif\";\n\nexport const font = (size: number, color = c.primary, weight = 400): React.CSSProperties => ({\n fontFamily: \"'Inter', sans-serif\",\n fontSize: size,\n fontWeight: weight,\n color,\n lineHeight: 1.5,\n margin: 0,\n fontFeatureSettings: \"'zero' 1\",\n});\n\nexport const displayFont = (size: number, color = c.primary, weight = 400): React.CSSProperties => ({\n fontFamily: DISPLAY_FONT,\n fontSize: size,\n fontWeight: weight,\n color,\n lineHeight: 1.2,\n fontFeatureSettings: \"'zero' 1\",\n margin: 0,\n});\n\nexport function brandTextColor(hex: string): string {\n if (!/^#[0-9a-f]{6}$/i.test(hex)) return \"#ffffff\";\n const r = parseInt(hex.slice(1, 3), 16) / 255;\n const g = parseInt(hex.slice(3, 5), 16) / 255;\n const b = parseInt(hex.slice(5, 7), 16) / 255;\n const lin = (v: number) => v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n const lum = 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);\n return lum > 0.179 ? \"#000000\" : \"#ffffff\";\n}\n\nexport const MARKET_RATE = 0.85;\n\n/** Format a SOL amount showing at least 2 significant digits, never scientific notation. */\nexport function formatSolAmount(value: number, minDecimals = 4): string {\n if (value === 0) return \"0\";\n // Find how many decimals needed to show 2 significant digits\n const digits = value < 1 ? Math.max(minDecimals, -Math.floor(Math.log10(Math.abs(value))) + 1) : minDecimals;\n return value.toFixed(digits);\n}\nexport const yieldMap: Record<string, number> = { Q2: 0.43, Q3: 0.85, Q4: 1.28, Q1: 1.70 };\nexport const pointsMap: Record<string, string> = { Q3: \"2x points multiplier\", Q4: \"3x points multiplier\", Q1: \"4x points multiplier\" };\n\n// Feature flags\nexport const POINTS_ENABLED = false;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport { c, font } from \"./design-system\";\nimport solLogo from \"../assets/Sol.png\";\nimport kilnLogo from \"../assets/figment.png\";\nimport phantomLogo from \"../assets/icons/phantom.png\";\nimport backpackLogo from \"../assets/icons/backoack.png\";\nimport metamaskLogo from \"../assets/icons/metamasj.png\";\n\nexport function PyeWordmark() {\n return (\n <svg width=\"33\" height=\"16\" viewBox=\"0 0 33.0001 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ display: \"block\", flexShrink: 0 }}>\n <path d=\"M32.9338 2.19869V4.83327H24.0205V6.46108H32.4867V8.92786H24.0205V10.7068H33.0001V13.3918H20.707V2.19869H32.9338Z\" fill=\"var(--fill-0, #24201C)\"/>\n <path d=\"M23.9528 1.65254C21.8438 0.595304 19.4691 0 16.9568 0C14.4445 0 12.1791 0.567895 10.1067 1.58001C9.97635 1.64385 9.89253 1.77655 9.89253 1.92329V16L24.0043 1.70335C23.9924 1.68196 23.9749 1.66424 23.9528 1.65254Z\" fill=\"url(#pye-radial)\"/>\n <path d=\"M24.0043 1.70338L9.89253 16H14.27C14.4832 16 14.6878 15.9141 14.8386 15.7614L24.0218 6.45812L24.0211 1.76589C24.0211 1.74349 24.0149 1.7221 24.0043 1.70338Z\" fill=\"url(#pye-linear)\"/>\n <path d=\"M0.000119395 2.25921H8.83059C9.15069 2.25921 9.41601 2.26489 9.62589 2.27592C9.83544 2.28728 10.007 2.29832 10.1394 2.30935C10.272 2.32071 10.4152 2.33742 10.57 2.35982C11.0891 2.43837 11.5227 2.56104 11.8705 2.72883C12.2184 2.89663 12.4946 3.13729 12.6988 3.45048C12.9031 3.76368 13.0467 4.16378 13.1295 4.65045C13.2123 5.13712 13.2536 5.73844 13.2536 6.45441C13.2536 7.08114 13.2232 7.61527 13.1625 8.05682C13.1018 8.49903 13.0021 8.87373 12.8642 9.18124C12.7259 9.48909 12.5437 9.73777 12.3174 9.92796C12.091 10.1182 11.8121 10.2749 11.4808 10.3979C11.2927 10.4651 11.0967 10.5183 10.8928 10.5574C10.6882 10.5968 10.4426 10.6272 10.1555 10.6496C9.86811 10.672 9.52029 10.6891 9.11175 10.7001C8.70288 10.7115 8.20062 10.7168 7.60398 10.7168H3.36315V13.452H0.000119395V2.25921ZM7.57164 7.91443C7.95807 7.91443 8.26167 7.91175 8.48277 7.90607C8.70354 7.90072 8.87745 7.89203 9.0045 7.881C9.13122 7.86997 9.22527 7.85326 9.28599 7.83053C9.34671 7.80813 9.4104 7.77471 9.4764 7.72992C9.63084 7.62931 9.73875 7.48959 9.79947 7.31043C9.86019 7.13161 9.89055 6.84616 9.89055 6.45475C9.89055 6.06334 9.84897 5.75582 9.76614 5.5653C9.68331 5.37511 9.53151 5.24107 9.31041 5.16253C9.25497 5.14013 9.20283 5.12342 9.153 5.11205C9.10317 5.10102 9.02298 5.09267 8.91276 5.08698C8.80221 5.0813 8.64216 5.07595 8.43228 5.07027C8.2224 5.06492 7.9353 5.06192 7.57065 5.06192H3.36315V7.91476H7.57131L7.57164 7.91443Z\" fill=\"var(--fill-0, #24201C)\"/>\n <defs>\n <radialGradient id=\"pye-radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(16.9047 16.0398) scale(15.743 15.9459)\">\n <stop stopColor=\"#D59EFF\"/>\n <stop offset=\"0.14\" stopColor=\"#C881FF\"/>\n <stop offset=\"0.44\" stopColor=\"#AF48FF\"/>\n <stop offset=\"0.66\" stopColor=\"#9F24FF\"/>\n <stop offset=\"0.78\" stopColor=\"#9A17FF\"/>\n <stop offset=\"1\" stopColor=\"#662D91\"/>\n </radialGradient>\n <linearGradient id=\"pye-linear\" x1=\"16.9572\" y1=\"16\" x2=\"16.9572\" y2=\"1.73781\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#331647\"/>\n <stop offset=\"0.33\" stopColor=\"#6B2F98\"/>\n <stop offset=\"0.54\" stopColor=\"#8A3CC4\"/>\n <stop offset=\"0.89\" stopColor=\"#AE4CF8\"/>\n <stop offset=\"1\" stopColor=\"#B34FFF\"/>\n </linearGradient>\n </defs>\n </svg>\n );\n}\n\nexport function IconYieldForward() {\n return (\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ color: \"var(--c-brand)\" }}>\n <path d=\"M16.5 0.5H0.5M16.5 18.5H0.5M15.4879 0.5C15.4879 0.5 15.7278 3.24264 14.089 5C12.4503 6.75736 8.49414 9.5 8.49414 9.5C8.49414 9.5 12.4503 12.2426 14.089 14C15.7278 15.7574 15.4879 18.5 15.4879 18.5M1.50623 0.5C1.50623 0.5 1.26635 3.24264 2.9051 5C4.54385 6.75736 8.5 9.5 8.5 9.5C8.5 9.5 4.54385 12.2426 2.9051 14C1.26635 15.7574 1.50623 18.5 1.50623 18.5M11.5 15.5H5.5M10.5 3.5H6.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nexport function IconYieldSwap() {\n return (\n <svg width=\"19\" height=\"17\" viewBox=\"0 0 19 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ color: \"var(--c-brand)\" }}>\n <path d=\"M0.5 13.5H4.5C7.26142 13.5 9.5 12.5 9.5 8.5C9.5 4.5 11.7386 3.5 14.5 3.5H18.5M18.5 3.5L15.5 0.5M18.5 3.5L15.5 6.5M0.5 3.5H4.5C5.2111 3.5 5.88754 3.56631 6.5 3.73309M18.5 13.5H14.5C13.7889 13.5 13.1125 13.4337 12.5 13.2669M18.5 13.5L15.5 16.5M18.5 13.5L15.5 10.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nexport function IconFixedYield() {\n return (\n <svg width=\"19\" height=\"17\" viewBox=\"0 0 19 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ color: \"var(--c-brand)\" }}>\n <path d=\"M17 12.5039V11.5C17 10.3954 16.1046 9.5 15 9.5C13.8954 9.5 13 10.3954 13 11.5V12.5039M13.1 16.5H16.9C17.4601 16.5 17.7401 16.5 17.954 16.391C18.1422 16.2951 18.2951 16.1422 18.391 15.954C18.5 15.7401 18.5 15.4601 18.5 14.9V14.1C18.5 13.5399 18.5 13.2599 18.391 13.046C18.2951 12.8578 18.1422 12.7049 17.954 12.609C17.7401 12.5 17.4601 12.5 16.9 12.5H13.1C12.5399 12.5 12.2599 12.5 12.046 12.609C11.8578 12.7049 11.7049 12.8578 11.609 13.046C11.5 13.2599 11.5 13.5399 11.5 14.1V14.9C11.5 15.4601 11.5 15.7401 11.609 15.954C11.7049 16.1422 11.8578 16.2951 12.046 16.391C12.2599 16.5 12.5399 16.5 13.1 16.5Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M18.5 8.5V6.5V3.7C18.5 3.56676 18.5 3.44144 18.4996 3.32333M3.32333 0.500367C3.7383 0.86683 4 1.40285 4 2C4 3.10457 3.10457 4 2 4C1.40285 4 0.86683 3.7383 0.500367 3.32333M3.32333 0.500367C3.44144 0.5 3.56676 0.5 3.7 0.5H15.3C15.4332 0.5 15.5586 0.5 15.6767 0.500367M3.32333 0.500367C2.44852 0.503085 1.96895 0.525931 1.59202 0.717987C1.21569 0.909734 0.909734 1.21569 0.717987 1.59202C0.525931 1.96895 0.503085 2.44852 0.500367 3.32333M0.500367 3.32333C0.5 3.44144 0.5 3.56676 0.5 3.7V9.3C0.5 9.43324 0.5 9.55856 0.500367 9.67667M0.500367 9.67667C0.86683 9.2617 1.40285 9 2 9C3.10457 9 4 9.89543 4 11C4 11.5971 3.7383 12.1332 3.32333 12.4996M0.500367 9.67667C0.503085 10.5515 0.525931 11.031 0.717987 11.408C0.909734 11.7843 1.21569 12.0903 1.59202 12.282C1.96895 12.4741 2.44852 12.4969 3.32333 12.4996M3.32333 12.4996C3.44144 12.5 3.56676 12.5 3.7 12.5H9M18.4996 3.32333C18.1332 3.7383 17.5971 4 17 4C15.8954 4 15 3.10457 15 2C15 1.40285 15.2617 0.86683 15.6767 0.500367M18.4996 3.32333C18.4969 2.44852 18.4741 1.96895 18.282 1.59202C18.0903 1.21569 17.7843 0.909734 17.408 0.717987C17.0311 0.525931 16.5515 0.503085 15.6767 0.500367M11.5 6.5C11.5 7.60457 10.6046 8.5 9.5 8.5C8.39543 8.5 7.5 7.60457 7.5 6.5C7.5 5.39543 8.39543 4.5 9.5 4.5C10.6046 4.5 11.5 5.39543 11.5 6.5Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nexport function ProductIcon({ children }: { children: React.ReactNode }) {\n return (\n <div style={{\n flexShrink: 0, width: 36, height: 36, borderRadius: 8,\n background: \"color-mix(in srgb, var(--c-brand) 20%, transparent)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 rgba(0,0,0,0.2)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n {children}\n </div>\n );\n}\n\nexport function SolIcon({ size = 36 }: { size?: number }) {\n return (\n <img src={solLogo} alt=\"SOL\" style={{\n width: size, height: size, borderRadius: \"50%\", flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }} />\n );\n}\n\nexport function StakeIcon({ size = 36 }: { size?: number }) {\n return (\n <img src={kilnLogo} alt=\"Validator\" style={{\n width: size, height: size, borderRadius: \"50%\", flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }} />\n );\n}\n\nexport function WalletDot({ name, size = 32 }: { name: string; size?: number }) {\n const logos: Record<string, string> = { Phantom: phantomLogo, Backpack: backpackLogo, Metamask: metamaskLogo };\n const bg: Record<string, string> = { Phantom: \"#AB9FF2\", Backpack: \"#E33B3B\", Metamask: \"#F5841F\" };\n const logo = logos[name];\n if (logo) {\n return (\n <img src={logo} alt={name} style={{\n width: size, height: size, borderRadius: 8, flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }} />\n );\n }\n return (\n <div style={{\n width: size, height: size, borderRadius: 8, flexShrink: 0,\n background: bg[name] || \"#ccc\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <span style={font(11, \"#fff\", 700)}>{name[0]}</span>\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { c, font } from \"../design-system\";\nimport { PyeWordmark } from \"../Icons\";\n\nexport function Widget({ children }: { children: ReactNode }) {\n return (\n <div style={{\n width: \"min(420px, calc(100vw - 32px))\", height: 600,\n borderRadius: 10,\n boxShadow: \"0px 4px 8px rgba(0,0,0,0.07)\",\n display: \"flex\", flexDirection: \"column\",\n background: c.surface,\n }}>\n {children}\n </div>\n );\n}\n\nexport function Body({ children, padding = 24, style }: { children: ReactNode; padding?: number; style?: CSSProperties }) {\n return (\n <div style={{\n flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0,\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n ...style,\n }}>\n <div style={{\n flex: 1, display: \"flex\", flexDirection: \"column\", padding, gap: 16,\n minHeight: 0, overflowY: \"auto\",\n }}>\n {children}\n </div>\n <div style={{ height: 0, borderTop: `1px solid ${c.shadow}`, flexShrink: 0 }} />\n </div>\n );\n}\n\nexport function Spacer() { return <div style={{ flex: 1 }} />; }\n\nexport function StepHeader({ step, total, onBack, hideStep, label, tooltipText }: {\n step?: number;\n total?: number;\n onBack?: () => void;\n hideStep?: boolean;\n label?: string;\n tooltipText?: string;\n}) {\n const hasProgress = !hideStep && step != null && total != null && total > 0;\n const pct = hasProgress ? Math.round((step! / total!) * 100) : 0;\n\n const backButton = (\n <button onClick={onBack} style={{\n background: \"none\", border: \"none\", cursor: \"pointer\", padding: 0,\n display: \"flex\", alignItems: \"center\",\n visibility: onBack ? \"visible\" : \"hidden\",\n color: c.secondary, flexShrink: 0,\n }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ display: \"block\" }}>\n <path d=\"M13 8H3M3 8L7 4M3 8L7 12\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </button>\n );\n\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: 14,\n padding: \"20px 24px\",\n flexShrink: 0,\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: \"10px 10px 0 0\",\n }}>\n {backButton}\n {!hasProgress && label && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <span style={{ ...font(15, c.primary, 500) }}>{label}</span>\n {tooltipText && <Tooltip position=\"below\" text={tooltipText} />}\n </div>\n )}\n {hasProgress && (\n <div style={{ flex: 1, display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <div style={{\n flex: 1, height: 3, background: c.shadow, borderRadius: 2, overflow: \"hidden\",\n }}>\n <div style={{\n height: \"100%\", width: `${pct}%`, background: c.purple, borderRadius: 2,\n transition: \"width 0.25s ease\",\n }} />\n </div>\n <span style={{\n ...font(13, c.secondary), lineHeight: 1, whiteSpace: \"nowrap\",\n fontVariantNumeric: \"tabular-nums\",\n }}>\n {step}/{total}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport function StepTitle({ title, subtitle }: { title: string; subtitle?: string }) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <p style={font(18, c.primary, 500)}>{title}</p>\n {subtitle && <p style={font(14, c.secondary)}>{subtitle}</p>}\n </div>\n );\n}\n\n// Dan's Tooltip — self-contained \"?\" circle trigger with portalled popup to escape overflow clipping\nexport function Tooltip({ text, bg, position = \"above\" }: { text: string; bg?: string; position?: \"above\" | \"below\" }) {\n const fill = bg ?? c.raised;\n const isBelow = position === \"below\";\n const triggerRef = useRef<HTMLDivElement>(null);\n const [coords, setCoords] = useState<{ top: number; left: number } | null>(null);\n\n const handleEnter = () => {\n const el = triggerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setCoords({\n top: isBelow ? rect.bottom + 8 : rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n };\n\n const popup = coords ? createPortal(\n <div style={{\n position: \"fixed\",\n top: isBelow ? coords.top : undefined,\n bottom: isBelow ? undefined : `calc(100vh - ${coords.top}px)`,\n left: coords.left,\n transform: \"translateX(-50%)\",\n width: 210,\n background: fill,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `0 4px 16px rgba(0,0,0,0.15), inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8,\n padding: \"8px 10px\",\n zIndex: 10000,\n pointerEvents: \"none\",\n }}>\n <p style={{ ...font(11, c.secondary), lineHeight: 1.5 }}>{text}</p>\n <div style={{\n position: \"absolute\",\n ...(isBelow\n ? { top: -4 }\n : { bottom: -4 }),\n left: \"50%\",\n transform: \"translateX(-50%) rotate(45deg)\",\n width: 8, height: 8,\n background: fill,\n boxShadow: isBelow ? `-1px -1px 0 ${c.shadow}` : `1px 1px 0 ${c.shadow}`,\n }} />\n </div>,\n document.body,\n ) : null;\n\n return (\n <div\n ref={triggerRef}\n onMouseEnter={handleEnter}\n onMouseLeave={() => setCoords(null)}\n style={{ position: \"relative\", display: \"inline-flex\", flexShrink: 0 }}\n >\n <div\n style={{\n width: 16, height: 16, borderRadius: \"50%\",\n background: fill,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n cursor: \"default\", flexShrink: 0,\n }}\n >\n <span style={{ ...font(9, c.muted), lineHeight: 1, userSelect: \"none\", fontWeight: 500 }}>?</span>\n </div>\n {popup}\n </div>\n );\n}\n\n// Dan's RowGroup — column with 8px gap between items\nexport function RowGroup({ children }: { children: ReactNode }) {\n return <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>{children}</div>;\n}\n\n// Dan's SelectableRow — with inset shadow elevation, inverted on selected\nexport function SelectableRow({ icon, label, sub, amount, selected, onClick }: {\n icon: ReactNode;\n label: string;\n sub: string;\n amount?: string;\n selected?: boolean;\n onClick?: () => void;\n}) {\n const bg = selected ? c.bg : c.raised;\n const shadow = selected\n ? `inset 0 1px 0 ${c.shadow}, inset 0 -1px 0 ${c.highlight}`\n : `inset 0 1px 0 ${c.highlight}, inset 0 -1px 0 ${c.shadow}`;\n return (\n <div\n className={selected ? undefined : \"pye-hoverable\"}\n onClick={onClick}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 12, borderRadius: 8,\n background: bg, boxShadow: shadow,\n cursor: \"pointer\", transition: \"background 0.1s\",\n }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n {icon}\n <div>\n <p style={font(15, c.primary)}>{label}</p>\n <p style={font(14, c.secondary)}>{sub}</p>\n </div>\n </div>\n {amount && (\n <div style={{ textAlign: \"right\" }}>\n <p style={font(15, c.primary)}>{amount}</p>\n <p style={font(14, c.secondary)}>SOL</p>\n </div>\n )}\n </div>\n );\n}\n\n// Dan's RecapRow — non-interactive, raised surface\nexport function RecapRow({ icon, label, sub, amount }: {\n icon: ReactNode;\n label: string;\n sub: string;\n amount?: string;\n}) {\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 12, borderRadius: 8, minHeight: 62,\n background: c.raised,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n {icon}\n <div>\n <p style={font(15, c.primary)}>{label}</p>\n <p style={font(14, c.secondary)}>{sub}</p>\n </div>\n </div>\n {amount && (\n <div style={{ textAlign: \"right\" }}>\n <p style={font(15, c.primary)}>{amount}</p>\n <p style={font(14, c.secondary)}>SOL</p>\n </div>\n )}\n </div>\n );\n}\n\n// Matches ChoiceRow dimensions (min-height 76, same padding/radius) so layout doesn't jump when real rows load.\nexport function SkeletonRow() {\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: 12,\n padding: 16, borderRadius: 10, minHeight: 76,\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <div className=\"pye-skeleton\" style={{ width: 44, height: 44, borderRadius: 10, flexShrink: 0 }} />\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 8, minWidth: 0 }}>\n <div className=\"pye-skeleton\" style={{ width: \"55%\", height: 14 }} />\n <div className=\"pye-skeleton\" style={{ width: \"75%\", height: 12 }} />\n </div>\n </div>\n );\n}\n\n// Dan's CTA — two variants: purple (brand) and default\nexport function CTA({ label, onClick, disabled, purple }: {\n label: string;\n onClick?: () => void;\n disabled?: boolean;\n purple?: boolean;\n}) {\n if (purple) {\n return (\n <button\n className=\"pye-cta-purple\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n style={{\n width: \"100%\", height: 40, borderRadius: 6,\n border: \"none\",\n borderTop: `1px solid var(--c-brand-hi)`,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n background: c.purple,\n ...font(15, \"var(--c-brand-text)\"),\n boxShadow: `inset 0 -1px 0 var(--c-brand-sh)`,\n opacity: disabled ? 0.5 : 1,\n transition: \"filter 0.1s, opacity 0.1s\", flexShrink: 0,\n }}\n >\n {label}\n </button>\n );\n }\n return (\n <button\n className=\"pye-cta-default\"\n onClick={onClick}\n disabled={disabled}\n style={{\n width: \"100%\", height: 40, borderRadius: 6,\n border: \"none\",\n borderTop: `1px solid ${c.highlight}`,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n background: c.raised,\n ...font(15, c.primary),\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n opacity: disabled ? 0.5 : 1,\n transition: \"background 0.1s, opacity 0.1s\", flexShrink: 0,\n }}\n >\n {label}\n </button>\n );\n}\n\nexport function SuccessHeader({ label, onClose }: { label: string; onClose: () => void }) {\n return (\n <div style={{\n height: 48, display: \"flex\", alignItems: \"center\",\n padding: \"0 24px\",\n flexShrink: 0, gap: 8,\n background: c.surface,\n borderRadius: \"10px 10px 0 0\",\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <div style={{\n width: 20, height: 20, borderRadius: \"50%\", flexShrink: 0,\n background: \"rgba(13, 156, 94, 0.15)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 5\" stroke=\"#0d9c5e\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n <p style={{ ...font(15, c.primary), flex: 1 }}>{label}</p>\n <button onClick={onClose} style={{\n background: \"none\", border: \"none\", cursor: \"pointer\",\n padding: 0, width: 28, height: 28, marginRight: -7,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n borderRadius: 8, flexShrink: 0,\n }}>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M1 1L13 13M13 1L1 13\" stroke={c.secondary} strokeWidth=\"1\" strokeLinecap=\"round\"/>\n </svg>\n </button>\n </div>\n );\n}\n\nexport function Footer() {\n return (\n <div style={{\n height: 44, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n gap: 8, flexShrink: 0,\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: \"0 0 10px 10px\",\n }}>\n <a href=\"https://pye.fi/\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ display: \"flex\", alignItems: \"center\", gap: 8, textDecoration: \"none\" }}>\n <span style={font(15, c.secondary)}>Powered by</span>\n <PyeWordmark />\n </a>\n </div>\n );\n}\n\n// Dan's Alert — single style, raised with inset shadow\nexport function Alert({ children }: { children: ReactNode }) {\n return (\n <div style={{\n background: c.raised, borderRadius: 8, padding: 12,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <p style={font(14, c.secondary)}>{children}</p>\n </div>\n );\n}\n\nexport function InlineError({ message }: { message?: string | null }) {\n return message\n ? <p style={{ ...font(14, c.red), marginTop: 4 }}>{message}</p>\n : null;\n}\n\nexport function Divider() {\n return <div style={{ height: 1, background: c.shadow }} />;\n}\n","import { useMemo } from \"react\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport { useBalanceStore, useWalletStore } from \"@pyefi/sdk/react\";\nimport { buildPtLookup, maturities } from \"@pyefi/sdk\";\nimport { Body, Spacer, SkeletonRow } from \"../shared/Layout\";\nimport { c, font, displayFont, formatSolAmount } from \"../design-system\";\n\nconst LAMPORTS_PER_SOL = 1_000_000_000;\n\nfunction ChoiceRow({\n icon,\n label,\n sub,\n subColor,\n onClick,\n disabled,\n}: {\n icon: React.ReactNode;\n label: string;\n sub: string;\n subColor?: string;\n onClick?: () => void;\n disabled?: boolean;\n}) {\n return (\n <div\n className={disabled ? undefined : \"pye-hoverable\"}\n onClick={disabled ? undefined : onClick}\n style={{\n display: \"flex\", alignItems: \"center\", gap: 12,\n padding: 16, borderRadius: 10, minHeight: 76,\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n transition: \"background 0.1s\",\n }}\n >\n {icon}\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 2, minWidth: 0 }}>\n <p style={font(15, c.primary, 600)}>{label}</p>\n <p style={font(14, subColor ?? c.secondary)}>{sub}</p>\n </div>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path d=\"M6 4L10 8L6 12\" stroke={c.muted} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n );\n}\n\nfunction WalletSwitcher({ address, onSwitch }: { address: string; onSwitch: () => void }) {\n const truncated = `${address.slice(0, 4)}...${address.slice(-4)}`;\n return (\n <button\n className=\"pye-hoverable\"\n onClick={onSwitch}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 20, borderRadius: 10, width: \"100%\",\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n border: \"none\", cursor: \"pointer\", transition: \"background 0.1s\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <div style={{\n width: 4, height: 4, borderRadius: 9,\n background: c.green,\n }} />\n <span style={{ ...font(15, c.primary), fontVariantNumeric: \"tabular-nums\" }}>\n {truncated}\n </span>\n </div>\n <span style={font(15, c.secondary)}>Switch</span>\n </button>\n );\n}\n\nfunction IconRedeem() {\n return (\n <div style={{\n flexShrink: 0, width: 44, height: 44, borderRadius: 10,\n background: \"color-mix(in srgb, var(--c-brand) 20%, transparent)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 rgba(0,0,0,0.2)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" style={{ color: \"var(--c-brand)\" }}>\n <circle cx=\"8\" cy=\"8\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n );\n}\n\nfunction IconDocs() {\n return (\n <div style={{\n flexShrink: 0, width: 44, height: 44, borderRadius: 10,\n background: `color-mix(in srgb, ${c.secondary} 15%, transparent)`,\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 rgba(0,0,0,0.2)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" style={{ color: c.secondary }}>\n <path d=\"M4 3h8a2 2 0 0 1 2 2v12H6a2 2 0 0 1-2-2V3z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\"/>\n <path d=\"M4 15a2 2 0 0 1 2-2h8\" stroke=\"currentColor\" strokeWidth=\"1.5\"/>\n <path d=\"M7 7h4M7 10h3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n </div>\n );\n}\n\nfunction IconSell() {\n return (\n <div style={{\n flexShrink: 0, width: 44, height: 44, borderRadius: 10,\n background: \"color-mix(in srgb, #0d9c5e 20%, transparent)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 rgba(0,0,0,0.2)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" style={{ color: \"#0d9c5e\" }}>\n <rect x=\"3\" y=\"5\" width=\"14\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 9H17\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"13\" cy=\"12.5\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </div>\n );\n}\n\ninterface WelcomeScreenProps {\n validatorName?: string;\n}\n\nexport default function WelcomeScreen({ validatorName }: WelcomeScreenProps) {\n const navigate = useWidgetStore((s) => s.navigate);\n const walletBalances = useBalanceStore((s) => s.walletBalances);\n const userStakeAccounts = useBalanceStore((s) => s.userStakeAccounts);\n const userStakeAccountsLoading = useBalanceStore((s) => s.userStakeAccountsLoading);\n const walletPublicKey = useWalletStore((s) => s.publicKey);\n const { disconnect } = useWallet();\n\n const ptLookup = buildPtLookup();\n\n // Sum of all ptSOL positions (matured + unmatured) and matured-only subtotal\n const { totalPtSol, maturedPtSol } = useMemo(() => {\n const now = Date.now() / 1000;\n let total = 0;\n let matured = 0;\n for (const [mint, amount] of Object.entries(walletBalances)) {\n if (amount <= 0) continue;\n const entry = ptLookup.get(mint);\n if (!entry) continue;\n const sol = amount / LAMPORTS_PER_SOL;\n total += sol;\n const matTs = Number(maturities[entry.maturityId].maturity_timestamp);\n if (now >= matTs) matured += sol;\n }\n return { totalPtSol: total, maturedPtSol: matured };\n }, [walletBalances, ptLookup]);\n\n // Sum SOL across active stake accounts\n const activeStakeSol = useMemo(() => {\n let lamports = 0;\n for (const acc of userStakeAccounts) {\n if (acc.state === \"active\") lamports += acc.lamports;\n }\n return lamports / LAMPORTS_PER_SOL;\n }, [userStakeAccounts]);\n\n const canRedeem = totalPtSol > 0;\n const canSell = activeStakeSol > 0;\n\n // Show skeletons only on the very first fetch when we have nothing to display.\n // Once stake accounts or balances are known (even if zero), render real rows.\n const hasAnyBalance = Object.values(walletBalances).some((v) => v > 0);\n const isInitialLoading =\n userStakeAccountsLoading && userStakeAccounts.length === 0 && !hasAnyBalance;\n\n const redeemSub = !canRedeem\n ? \"No PT positions\"\n : maturedPtSol > 0\n ? `${formatSolAmount(maturedPtSol)} PT ready to redeem`\n : `${formatSolAmount(totalPtSol)} PT locked`;\n\n const sellSub = canSell\n ? `${formatSolAmount(activeStakeSol, 2)} SOL across active stake`\n : \"No active stake\";\n\n return (\n <Body style={{ borderRadius: \"10px 10px 0 0\" }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <p style={{ ...displayFont(32, c.primary), letterSpacing: \"-0.02em\", lineHeight: 1.5 }}>\n Welcome back\n </p>\n <p style={font(15, c.secondary)}>\n {isInitialLoading\n ? \"Loading your positions…\"\n : canRedeem && canSell\n ? \"We found active staked SOL positions and PTs ready to redeem. What would you like to do?\"\n : canRedeem\n ? \"We found PTs ready to redeem. What would you like to do?\"\n : canSell\n ? \"We found active staked SOL positions. Sell your future rewards upfront.\"\n : `Stake SOL with ${validatorName ?? \"your validator\"} to get started.`}\n </p>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 10, marginTop: 8 }}>\n {isInitialLoading ? (\n <>\n <SkeletonRow />\n <SkeletonRow />\n </>\n ) : (\n <>\n <ChoiceRow\n icon={<IconSell />}\n label=\"Sell future rewards\"\n sub={sellSub}\n disabled={!canSell}\n onClick={() => navigate(\"select-position\")}\n />\n <ChoiceRow\n icon={<IconRedeem />}\n label=\"Redeem PTs\"\n sub={redeemSub}\n subColor={maturedPtSol > 0 ? c.green : undefined}\n disabled={!canRedeem}\n onClick={() => navigate(\"redeem-list\")}\n />\n <ChoiceRow\n icon={<IconDocs />}\n label=\"Learn more\"\n sub=\"Read the docs\"\n onClick={() => window.open(\"https://docs.pye.fi/\", \"_blank\", \"noopener,noreferrer\")}\n />\n </>\n )}\n </div>\n\n <Spacer />\n\n {walletPublicKey && (\n <WalletSwitcher\n address={walletPublicKey}\n onSwitch={() => { disconnect().catch(() => {}); }}\n />\n )}\n </Body>\n );\n}\n","import { useEffect } from \"react\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport { useWalletStore } from \"@pyefi/sdk/react\";\nimport { c, font } from \"../design-system\";\nimport { StepTitle, RowGroup, Spacer } from \"../shared/Layout\";\nimport { WalletDot } from \"../Icons\";\n\ninterface WalletRowProps {\n name: string;\n iconUrl?: string;\n connecting: string | null;\n onConnect: (name: string) => void;\n}\n\nfunction WalletRow({ name, iconUrl, connecting, onConnect }: WalletRowProps) {\n const isConnecting = connecting === name;\n const isDimmed = connecting != null && !isConnecting;\n\n return (\n <div\n className={!connecting ? \"pye-hoverable\" : undefined}\n onClick={() => !connecting && onConnect(name)}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 12, borderRadius: 8,\n background: c.raised,\n boxShadow: `inset 0 1px 0 ${c.highlight}, inset 0 -1px 0 ${c.shadow}`,\n cursor: connecting ? \"default\" : \"pointer\",\n opacity: isDimmed ? 0.4 : 1,\n transition: \"background 0.1s, opacity 0.2s\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n {iconUrl ? (\n <img src={iconUrl} alt=\"\" style={{ width: 32, height: 32, borderRadius: 8, objectFit: \"cover\" }} />\n ) : (\n <WalletDot name={name} size={32} />\n )}\n <p style={font(15, c.primary)}>{name}</p>\n </div>\n <p style={font(14, isConnecting ? c.purple : c.secondary)}>\n {isConnecting ? \"Connecting…\" : \"Detected\"}\n </p>\n </div>\n );\n}\n\nexport default function ConnectWallet() {\n const { wallets, wallet, select, connecting } = useWallet();\n const navigate = useWidgetStore((s) => s.navigate);\n const walletStatus = useWalletStore((s) => s.status);\n\n useEffect(() => {\n if (walletStatus === \"connected\") navigate(\"welcome\");\n }, [walletStatus, navigate]);\n\n const connectingName = connecting ? wallet?.adapter.name ?? null : null;\n\n // Dedupe: wallet-adapter-react merges explicit adapters with Wallet Standard\n // auto-discovery, so some wallets (e.g. MetaMask's Solana snap) show up\n // twice and trip a React duplicate-key warning.\n const uniqueWallets = Array.from(\n new Map(wallets.map((w) => [w.adapter.name, w])).values(),\n );\n const sortedWallets = [...uniqueWallets].sort((a, b) => {\n const aDetected = a.readyState === \"Installed\" ? 0 : 1;\n const bDetected = b.readyState === \"Installed\" ? 0 : 1;\n return aDetected - bDetected;\n });\n\n const handleConnect = (name: string) => {\n const w = wallets.find((w) => w.adapter.name === name);\n if (w) select(w.adapter.name);\n };\n\n return (\n <>\n <StepTitle\n title=\"Connect your wallet\"\n subtitle=\"Connect to see your existing stake and SOL balance.\"\n />\n <RowGroup>\n {sortedWallets.map((w) => (\n <WalletRow\n key={w.adapter.name}\n name={w.adapter.name}\n iconUrl={w.adapter.icon}\n connecting={connectingName}\n onConnect={handleConnect}\n />\n ))}\n </RowGroup>\n <Spacer />\n </>\n );\n}\n","import { useMemo } from \"react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport { useWalletStore, useMarketStore, useApyStore } from \"@pyefi/sdk/react\";\nimport { maturities, getPyeConfig } from \"@pyefi/sdk\";\nimport { c, font, displayFont, formatSolAmount } from \"../design-system\";\nimport { Spacer, CTA } from \"../shared/Layout\";\n\nconst FALLBACK_APY = 0.07;\nconst EXAMPLE_SOL = 100;\n\nexport default function YieldForwardIntro() {\n const navigate = useWidgetStore((s) => s.navigate);\n const walletStatus = useWalletStore((s) => s.status);\n const isConnected = walletStatus === \"connected\";\n const markets = useMarketStore((s) => s.markets);\n const apyByVoteAccount = useApyStore((s) => s.apyByVoteAccount);\n\n // Use configured vote account APY, or average all fetched APYs, or fallback\n const apy = useMemo(() => {\n const config = getPyeConfig();\n if (config.voteAccount && apyByVoteAccount[config.voteAccount] != null) {\n return apyByVoteAccount[config.voteAccount];\n }\n const values = Object.values(apyByVoteAccount);\n if (values.length > 0) {\n return values.reduce((a, b) => a + b, 0) / values.length;\n }\n return FALLBACK_APY;\n }, [apyByVoteAccount]);\n\n // Find the ~6 month maturity (Q3) RT best bid for the example\n const { sellToday, holdToUnlock, maturityLabel } = useMemo(() => {\n // Look for any Q3 RT market — try all keys since validatorId varies\n let bestBid: number | null = null;\n for (const [key, market] of Object.entries(markets)) {\n if (key.endsWith(\"-q32026-RT\") && market.bestBidPrice != null) {\n bestBid = market.bestBidPrice;\n break;\n }\n }\n\n // \"Hold to unlock\" = estimated staking yield for the period using real APY\n const matTs = Number(maturities.q32026.maturity_timestamp);\n const nowS = Date.now() / 1000;\n const yearsToMaturity = Math.max(0, (matTs - nowS) / (365 * 24 * 60 * 60));\n const hold = apy * yearsToMaturity * EXAMPLE_SOL;\n\n // \"Sell today\" = RT price × example deposit\n // Fallback: assume ~96% of hold value (4% discount) if no market data\n const sell = bestBid != null\n ? bestBid * EXAMPLE_SOL\n : hold * 0.96;\n\n return {\n sellToday: sell,\n holdToUnlock: hold,\n maturityLabel: maturities.q32026.human_readable,\n };\n }, [markets, apy]);\n\n const diff = holdToUnlock > 0 ? holdToUnlock - sellToday : null;\n\n return (\n <>\n <p style={{ ...displayFont(45, c.primary), letterSpacing: \"-0.02em\" }}>\n Get your future staking rewards today.\n </p>\n\n <Spacer />\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 24 }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <p style={font(12, c.primary)}>Example: Stake {EXAMPLE_SOL} SOL for 6 months</p>\n\n {/* Comparison cards */}\n <div style={{ display: \"flex\", gap: 8 }}>\n {/* Left -- sell today */}\n <div style={{\n flex: 1, borderRadius: 6, padding: 12,\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 ${c.shadow}`,\n }}>\n <p style={font(12, c.secondary)}>Sell rewards today</p>\n <p style={{ ...displayFont(24, c.green), fontVariantNumeric: \"lining-nums tabular-nums\", lineHeight: 1.2, margin: \"4px 0 2px\" }}>\n +{formatSolAmount(sellToday)} SOL\n </p>\n <p style={font(12, c.secondary)}>Yours now</p>\n </div>\n {/* Right -- hold to unlock */}\n <div style={{\n flex: 1, borderRadius: 6, padding: 12,\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n }}>\n <p style={font(12, c.secondary)}>Hold to unlock</p>\n <p style={{ ...displayFont(24, c.primary), fontVariantNumeric: \"lining-nums tabular-nums\", lineHeight: 1.2, margin: \"4px 0 2px\" }}>\n +{formatSolAmount(holdToUnlock)}\n </p>\n <p style={font(12, c.secondary)}>Available {maturityLabel}</p>\n </div>\n </div>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: 12 }}>\n <CTA\n label={isConnected ? \"Continue\" : \"Connect Wallet\"}\n onClick={() => navigate(isConnected ? \"select-position\" : \"connect-wallet\")}\n purple\n />\n <a href=\"https://docs.pye.fi/\" target=\"_blank\" rel=\"noopener noreferrer\"\n style={{ ...font(12, c.secondary), textDecoration: \"none\" }}>\n Learn more — read the docs\n </a>\n </div>\n </div>\n </>\n );\n}\n","import { useWidgetStore } from \"../../stores/widget-store\";\nimport { useBalanceStore } from \"@pyefi/sdk/react\";\n// TODO(SIMD-185): restore getPyeConfig, SolIcon, useWalletStore imports when re-enabling liquid SOL deposit\nimport { StepTitle, RowGroup, Spacer, SelectableRow } from \"../shared/Layout\";\n\nconst LAMPORTS_PER_SOL = 1_000_000_000;\n\nexport default function SelectPosition() {\n const navigate = useWidgetStore((s) => s.navigate);\n const selectStakeAccount = useWidgetStore((s) => s.selectStakeAccount);\n\n const userStakeAccounts = useBalanceStore((s) => s.userStakeAccounts);\n\n const activeAccounts = userStakeAccounts.filter((a) => a.state === \"active\");\n\n const handleSelectStake = (pubkey: string, lamports: number, validatorName?: string, validatorIcon?: string, validatorVoteAccount?: string, validatorAltPubkey?: string | null) => {\n selectStakeAccount(pubkey, lamports / LAMPORTS_PER_SOL, validatorName, validatorIcon, validatorVoteAccount, validatorAltPubkey);\n navigate(\"choose-amount\");\n };\n\n return (\n <>\n <StepTitle\n title=\"Select a position\"\n subtitle=\"We'll sell the future rewards from this position upfront.\"\n />\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n <RowGroup>\n {activeAccounts.map((account) => (\n <SelectableRow\n key={account.pubkey}\n icon={\n <img\n src={account.validatorLogo ?? account.validatorIcon}\n alt={account.validatorName}\n onError={(e) => {\n const img = e.currentTarget;\n if (img.src !== account.validatorIcon) {\n img.src = account.validatorIcon;\n }\n }}\n style={{\n width: 36, height: 36, borderRadius: \"50%\", flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }}\n />\n }\n label=\"Staked SOL\"\n sub={account.validatorName || `${account.pubkey.slice(0, 8)}...`}\n amount={(account.lamports / LAMPORTS_PER_SOL).toFixed(4)}\n onClick={() => handleSelectStake(account.pubkey, account.lamports, account.validatorName, account.validatorIcon, account.validatorVoteAccount, account.validatorAltPubkey)}\n />\n ))}\n {/* TODO(SIMD-185): Re-enable liquid SOL deposit once transient account flow is fixed.\n {hasLiquidSol && (\n <SelectableRow\n icon={<SolIcon />}\n label=\"SOL\"\n sub=\"Unstaked\"\n amount={(balanceLamports / LAMPORTS_PER_SOL).toFixed(4)}\n onClick={handleSelectLiquidSol}\n />\n )} */}\n </RowGroup>\n </div>\n </>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport { c, font, formatSolAmount } from \"../design-system\";\nimport { StepTitle, CTA, InlineError, Spacer } from \"../shared/Layout\";\n\nconst SLIDER_CSS = `\n .pye-amount-slider {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 4px;\n border-radius: 999px;\n background: transparent;\n outline: none;\n cursor: pointer;\n }\n .pye-amount-slider::-webkit-slider-runnable-track {\n height: 4px;\n border-radius: 999px;\n background: linear-gradient(to right, var(--c-brand) var(--pye-slider-pct, 0%), var(--c-shadow) var(--pye-slider-pct, 0%));\n }\n .pye-amount-slider::-moz-range-track {\n height: 4px;\n border-radius: 999px;\n background: var(--c-shadow);\n }\n .pye-amount-slider::-moz-range-progress {\n height: 4px;\n border-radius: 999px;\n background: var(--c-brand);\n }\n .pye-amount-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--c-surface);\n border: 2px solid var(--c-brand);\n margin-top: -7px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.15);\n cursor: pointer;\n }\n .pye-amount-slider::-moz-range-thumb {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--c-surface);\n border: 2px solid var(--c-brand);\n box-shadow: 0 2px 4px rgba(0,0,0,0.15);\n cursor: pointer;\n }\n`;\n\nexport default function ChooseAmount() {\n const navigate = useWidgetStore((s) => s.navigate);\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const setDepositAmount = useWidgetStore((s) => s.setDepositAmount);\n const selectedBalance = useWidgetStore((s) => s.selectedStakeAccountBalance);\n const selectedPubkey = useWidgetStore((s) => s.selectedStakeAccountPubkey);\n const validatorName = useWidgetStore((s) => s.selectedValidatorName);\n\n const available = selectedBalance;\n const parsed = parseFloat(depositAmount) || 0;\n const pcts = [0.25, 0.5, 0.75, 1];\n\n // Smoothly ramp the deposit amount from current → target (pill clicks only).\n const rafRef = useRef<number | null>(null);\n useEffect(() => () => { if (rafRef.current != null) cancelAnimationFrame(rafRef.current); }, []);\n\n const truncate4 = (v: number) => (Math.floor(v * 10000) / 10000).toFixed(4);\n\n const rampToAmount = (target: number) => {\n if (rafRef.current != null) cancelAnimationFrame(rafRef.current);\n const start = parsed;\n if (Math.abs(target - start) < 1e-9) return;\n const reduced = window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n if (reduced) { setDepositAmount(truncate4(target)); return; }\n\n const duration = 500;\n const startTime = performance.now();\n const ease = (t: number) => 1 - Math.pow(1 - t, 3); // easeOutCubic\n let lastWritten = \"\";\n const tick = (now: number) => {\n const t = Math.min(1, (now - startTime) / duration);\n const v = start + (target - start) * ease(t);\n const s = truncate4(v);\n if (s !== lastWritten) {\n lastWritten = s;\n setDepositAmount(s);\n }\n if (t < 1) rafRef.current = requestAnimationFrame(tick);\n else rafRef.current = null;\n };\n rafRef.current = requestAnimationFrame(tick);\n };\n\n const isLiquidSol = selectedPubkey === \"liquid-sol\";\n const GAS_RESERVE = 0.01;\n\n let error: string | null = null;\n let warning: string | null = null;\n if (depositAmount && parsed <= 0) error = \"Amount must be greater than 0\";\n if (depositAmount && parsed > available) error = `Maximum available is ${available} SOL`;\n if (!error && isLiquidSol && parsed > 0 && parsed >= available - GAS_RESERVE)\n warning = \"This leaves very little SOL for transaction fees\";\n\n const isValid = !!depositAmount && !error && parsed > 0;\n\n const sliderMax = available > 0 ? available : 1;\n const sliderValue = Math.min(parsed, sliderMax);\n const sliderPct = available > 0 ? Math.min(100, (sliderValue / available) * 100) : 0;\n\n const stepSize = Math.max(0.0001, available / 1000);\n\n const availableLabel = formatSolAmount(available);\n const subtitle = validatorName\n ? `${validatorName} balance detected: ${availableLabel} SOL.`\n : `Balance detected: ${availableLabel} SOL.`;\n\n return (\n <>\n <style>{SLIDER_CSS}</style>\n <StepTitle title=\"How much of your stake do you want to sell rewards for?\" subtitle={subtitle} />\n\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8,\n padding: 16,\n marginTop: 8,\n display: \"flex\", flexDirection: \"column\", gap: 16,\n }}>\n {/* Input */}\n <div style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n background: c.bg, borderRadius: 8, padding: \"8px 16px\",\n borderTop: `1px solid ${error ? c.red : c.shadow}`,\n boxShadow: error\n ? `inset 0 -1px 0 ${c.highlight}, 0 0 0 1px ${c.red}`\n : `inset 0 -1px 0 ${c.highlight}`,\n }}>\n <input\n type=\"number\"\n value={depositAmount}\n onChange={(e) => setDepositAmount(e.target.value)}\n min={0.0001}\n max={available}\n placeholder=\"0\"\n style={{\n background: \"none\", border: \"none\", outline: \"none\",\n ...font(24, c.green, 500),\n width: \"100%\",\n fontVariantNumeric: \"tabular-nums\",\n }}\n />\n <span style={font(15, c.secondary)}>SOL</span>\n </div>\n\n {/* Slider */}\n <input\n type=\"range\"\n className=\"pye-amount-slider\"\n min={0}\n max={sliderMax}\n step={stepSize}\n value={sliderValue}\n onChange={(e) => {\n const s = truncate4(parseFloat(e.target.value));\n if (s !== depositAmount) setDepositAmount(s);\n }}\n style={{ \"--pye-slider-pct\": `${sliderPct}%` } as React.CSSProperties}\n />\n\n {/* % pills */}\n <div style={{ display: \"flex\", gap: 8 }}>\n {pcts.map((p) => (\n <button\n key={p}\n type=\"button\"\n className=\"pye-pill\"\n onClick={() => {\n const target = p === 1\n ? (isLiquidSol ? Math.max(0, available - GAS_RESERVE) : available)\n : available * p;\n rampToAmount(target);\n }}\n style={{\n flex: 1, borderRadius: 8,\n border: \"none\",\n borderTop: `1px solid ${c.highlight}`,\n cursor: \"pointer\",\n background: c.surface,\n ...font(14, c.secondary),\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n padding: \"8px 4px\",\n transition: \"background 0.1s\",\n }}\n >\n {p * 100}%\n </button>\n ))}\n </div>\n </div>\n\n <InlineError message={error ?? \"\"} />\n {!error && warning && <p style={{ ...font(14, c.red), marginTop: 4 }}>{warning}</p>}\n\n <Spacer />\n <CTA\n label=\"Continue\"\n onClick={() => navigate(\"choose-duration\")}\n disabled={!isValid}\n purple\n />\n </>\n );\n}\n","import { useEffect, useRef, useState, type CSSProperties } from \"react\";\n\nconst DIGITS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] as const;\n\ntype OdometerProps = {\n /** Fully-formatted string. Digits roll; all other characters (+, ., space, letters) pass through. */\n value: string;\n /** Typography + color applied to the root span. */\n style?: CSSProperties;\n /** Total roll duration per digit column, ms. */\n duration?: number;\n /** Stagger between adjacent digit columns, ms. */\n stagger?: number;\n};\n\n/** Per-digit rolling counter. Pure CSS transforms, zero deps. */\nexport function Odometer({ value, style, duration = 1200, stagger = 80 }: OdometerProps) {\n const reducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n\n const chars = [...value];\n let digitIdx = 0;\n\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"baseline\",\n fontVariantNumeric: \"lining-nums tabular-nums\",\n whiteSpace: \"pre\",\n ...style,\n }}\n >\n {chars.map((ch, i) => {\n if (!/\\d/.test(ch)) {\n return <span key={i}>{ch}</span>;\n }\n const delay = reducedMotion ? 0 : digitIdx * stagger;\n digitIdx++;\n return (\n <DigitColumn\n key={i}\n digit={Number(ch)}\n delay={delay}\n duration={reducedMotion ? 0 : duration}\n />\n );\n })}\n </span>\n );\n}\n\nfunction DigitColumn({ digit, delay, duration }: { digit: number; delay: number; duration: number }) {\n const [target, setTarget] = useState(0);\n const raf = useRef<number | null>(null);\n\n useEffect(() => {\n raf.current = requestAnimationFrame(() => setTarget(digit));\n return () => {\n if (raf.current != null) cancelAnimationFrame(raf.current);\n };\n }, [digit]);\n\n return (\n <span\n aria-hidden\n style={{\n display: \"inline-block\",\n height: \"1em\",\n lineHeight: 1,\n overflow: \"hidden\",\n verticalAlign: \"baseline\",\n }}\n >\n <span\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n transform: `translateY(-${target}em)`,\n transition:\n duration === 0\n ? \"none\"\n : `transform ${duration}ms cubic-bezier(0.2, 0.9, 0.2, 1) ${delay}ms`,\n willChange: \"transform\",\n }}\n >\n {DIGITS.map((n) => (\n <span key={n} style={{ height: \"1em\", lineHeight: 1 }}>\n {n}\n </span>\n ))}\n </span>\n </span>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useConnection } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport {\n maturities,\n type MaturityId,\n lookupBondByVoteAccount,\n PYE_TRADING_FEE_BPS,\n applyTradingFee,\n estimateRtFromStake,\n fetchEpochSyncedNowTs,\n} from \"@pyefi/sdk\";\nimport { useMarketStore } from \"@pyefi/sdk/react\";\nimport { c, font, displayFont, MARKET_RATE, formatSolAmount, POINTS_ENABLED } from \"../design-system\";\nimport { CTA, Tooltip, Spacer } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\n/** Map SDK maturity IDs to Dan's display format */\nconst QUARTER_INFO: Record<MaturityId, { label: string; pts: string | null }> =\n {\n q22026: { label: \"30 Jun 2026\", pts: null },\n q32026: { label: \"30 Sep 2026\", pts: \"2x points\" },\n q42026: { label: \"31 Dec 2026\", pts: \"3x points\" },\n q12026: { label: \"31 Mar 2026\", pts: null },\n };\n\n/** All maturity IDs in chronological order */\nconst ALL_MATURITIES: MaturityId[] = [\"q12026\", \"q22026\", \"q32026\", \"q42026\"];\n\nconst TWO_DAYS_S = 2 * 24 * 60 * 60;\n\n/** Filter out maturities within 2 days of maturity date */\nfunction getAvailableMaturities(): MaturityId[] {\n const nowS = Date.now() / 1000;\n return ALL_MATURITIES.filter((id) => {\n const ts = Number(maturities[id].maturity_timestamp);\n return ts - nowS > TWO_DAYS_S;\n });\n}\n\nexport default function ChooseDuration() {\n const { connection } = useConnection();\n const navigate = useWidgetStore((s) => s.navigate);\n const selectedMaturityId = useWidgetStore((s) => s.selectedMaturityId);\n const setSelectedMaturity = useWidgetStore((s) => s.setSelectedMaturity);\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const selectedValidatorVoteAccount = useWidgetStore((s) => s.selectedValidatorVoteAccount);\n const markets = useMarketStore((s) => s.markets);\n\n // Epoch-synced wall-clock seconds — matches the on-chain \"now\" used by the\n // Bonds program when computing RT issuance, so our preview number stays in\n // sync with the real swap amount.\n const [nowTs, setNowTs] = useState<number | null>(null);\n useEffect(() => {\n fetchEpochSyncedNowTs(connection).then(setNowTs).catch(() => {\n setNowTs(Date.now() / 1000);\n });\n }, [connection]);\n\n const availableMaturities = useMemo(() => getAvailableMaturities(), []);\n\n // Resolve the validator ID for validator-specific market lookup\n const stakeValidatorId = useMemo(() => {\n if (!selectedValidatorVoteAccount) return null;\n for (const matId of availableMaturities) {\n const lookup = lookupBondByVoteAccount(selectedValidatorVoteAccount, matId);\n if (lookup) return lookup.validatorId;\n }\n return null;\n }, [selectedValidatorVoteAccount, availableMaturities]);\n\n // Default to first available duration if none selected\n useEffect(() => {\n if (!selectedMaturityId && availableMaturities.length > 0) {\n setSelectedMaturity(availableMaturities[0]);\n }\n }, [selectedMaturityId, setSelectedMaturity, availableMaturities]);\n\n const parsedAmount = parseFloat(depositAmount) || 0;\n // Use epoch-synced now when available; fall back to wall-clock for the\n // first render before the RPC call resolves.\n const effectiveNowTs = nowTs ?? Date.now() / 1000;\n\n // Build display quarters from available maturities\n const quarters = availableMaturities.map((matId) => {\n const info = QUARTER_INFO[matId] ?? {\n label: maturities[matId]?.human_readable ?? matId,\n pts: null,\n };\n\n // Look up RT market data — bids represent what buyers will pay per RT\n // Use validator-specific key when available; fall back to generic lookup\n const rtMarketKey = stakeValidatorId\n ? `${stakeValidatorId}-${matId}-RT`\n : Object.keys(markets).find((k) => k.endsWith(`-${matId}-RT`));\n const rtMarket = rtMarketKey ? markets[rtMarketKey] ?? null : null;\n const bestBid = rtMarket?.bestBidPrice ?? null;\n\n // Bonds program mints RT proportional to remaining issuance window, so\n // we scale the deposit by time remaining to get the RT the user will\n // actually receive. Using `parsedAmount` here would overstate the quote.\n const maturity = maturities[matId];\n const estimatedRt = estimateRtFromStake({\n amountSol: parsedAmount,\n maturity,\n nowTs: effectiveNowTs,\n });\n\n // Gross yield: estimated RT × best bid price (SOL per RT)\n // Fallback: MARKET_RATE is annual (0.85%), scaled by time remaining so Q2–Q4 differ\n const maturityTs = Number(maturity.maturity_timestamp);\n const yearsRemaining = Math.max(0, (maturityTs - effectiveNowTs) / (365.25 * 86400));\n const grossYield =\n bestBid != null\n ? bestBid * estimatedRt\n : parsedAmount * (MARKET_RATE / 100) * yearsRemaining;\n // User-facing yield is net of Pye's taker fee\n const netYield = applyTradingFee(grossYield);\n\n return { matId, ...info, bestBid, grossYield, netYield };\n });\n\n const feePct = (PYE_TRADING_FEE_BPS / 100).toFixed(2);\n\n const sel = quarters.find((q) => q.matId === selectedMaturityId);\n\n return (\n <>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <p style={font(18, c.primary, 500)}>Choose a staking duration</p>\n <Tooltip position=\"below\" text=\"Lock your stake until the chosen date. All staking rewards for the period are sold to you upfront today. Your full SOL stake is returned at maturity.\" />\n </div>\n <p style={font(14, c.secondary)}>\n All rewards for the period are paid to you today. Your stake is\n returned in full at the end.\n </p>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {/* Duration rows — full width, one per row */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n {quarters.map((q) => {\n const isSelected = selectedMaturityId === q.matId;\n return (\n <div\n key={q.matId}\n className={isSelected ? \"pye-pill pye-pill--selected\" : \"pye-pill\"}\n onClick={() => setSelectedMaturity(q.matId as MaturityId)}\n style={{\n width: \"100%\",\n minHeight: 48,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"10px 16px\",\n borderRadius: 8,\n cursor: \"pointer\",\n background: isSelected ? c.bg : c.raised,\n borderTop: `1px solid ${isSelected ? c.shadow : c.highlight}`,\n boxShadow: isSelected\n ? `inset 0 -1px 0 ${c.highlight}`\n : `inset 0 -1px 0 ${c.shadow}`,\n transition: \"background 0.1s\",\n }}\n >\n <span style={font(15, isSelected ? c.primary : c.secondary, isSelected ? 500 : 400)}>\n {q.label}\n </span>\n {POINTS_ENABLED && q.pts && (\n <span style={font(13, c.purple)}>{q.pts}</span>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Yield card */}\n {sel && (\n <div\n style={{\n background: c.lowered,\n borderRadius: 8,\n padding: 12,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n }}\n >\n <p style={font(14, c.secondary)}>You receive today</p>\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8 }}>\n {sel.netYield < 0.0001 ? (\n <p\n style={{\n ...displayFont(32, c.green),\n lineHeight: 1.2,\n fontVariantNumeric: \"lining-nums tabular-nums\",\n }}\n >\n < 0.0001 SOL\n </p>\n ) : (\n <Odometer\n value={`+${formatSolAmount(sel.netYield, 3)} SOL`}\n style={{ ...displayFont(32, c.green), lineHeight: 1.2 }}\n />\n )}\n </div>\n <p style={font(12, c.muted)}>\n Quote includes a {feePct}% Pye protocol fee.\n </p>\n </div>\n )}\n\n </div>\n\n <Spacer />\n <CTA\n label=\"Review\"\n onClick={() => navigate(\"review-quote\")}\n disabled={!selectedMaturityId}\n purple\n />\n </>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport {\n maturities,\n validators,\n type MaturityId,\n type ValidatorId,\n executeStakeDeposit,\n executeRtSell,\n executeDepositAndSell,\n checkSellLiquidity,\n allowedLockups,\n lookupBondByVoteAccount,\n fetchBalances,\n fetchUserStakeAccounts,\n PYE_TRADING_FEE_BPS,\n applyTradingFee,\n estimateRtFromStake,\n fetchEpochSyncedNowTs,\n} from \"@pyefi/sdk\";\nimport { useMarketStore, useBalanceStore, useWalletStore } from \"@pyefi/sdk/react\";\nimport { c, font, MARKET_RATE, pointsMap, formatSolAmount, POINTS_ENABLED } from \"../design-system\";\nimport { StepTitle, CTA, Tooltip, Spacer } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\n/* ═══════════════════════════════════════════════════════════════════════════\n DiscountSlider — Dan's exact pointer-capture slider\n ═══════════════════════════════════════════════════════════════════════════ */\n\nfunction DiscountSlider({\n value,\n onChange,\n}: {\n value: number; // 0-5 float\n onChange: (v: number) => void;\n}) {\n const trackRef = useRef<HTMLDivElement>(null);\n const MIN = 0, MAX = 5;\n const pct = ((value - MIN) / (MAX - MIN)) * 100;\n\n const computeValue = (clientX: number): number => {\n const rect = trackRef.current!.getBoundingClientRect();\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width));\n const raw = MIN + (x / rect.width) * (MAX - MIN);\n return Math.round(raw * 100) / 100;\n };\n\n const handlePointerDown = (e: React.PointerEvent) => {\n e.preventDefault();\n trackRef.current!.setPointerCapture(e.pointerId);\n onChange(computeValue(e.clientX));\n };\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (e.buttons === 0) return;\n onChange(computeValue(e.clientX));\n };\n\n const filledColor = value > 3 ? \"#D93B3B\" : \"#0d9c5e\";\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <div\n ref={trackRef}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n style={{ position: \"relative\", height: 12, display: \"flex\", alignItems: \"center\", cursor: \"pointer\", userSelect: \"none\" }}\n >\n <div style={{\n position: \"absolute\", left: 0, width: `${pct}%`, height: 8,\n background: filledColor,\n borderRadius: pct > 98 ? \"999px\" : \"999px 0 0 999px\",\n borderTop: \"1px solid rgba(255,255,255,0.3)\",\n boxShadow: \"inset 0 -1px 0 rgba(0,0,0,0.2)\",\n minWidth: pct > 0 ? 4 : 0,\n }} />\n <div style={{\n position: \"absolute\", left: `${pct}%`, right: 0, height: 8,\n background: c.bg,\n borderRadius: pct < 2 ? \"999px\" : \"0 999px 999px 0\",\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n }} />\n <div style={{\n position: \"absolute\", left: `calc(${pct}% - 8px)`,\n width: 16, height: 16, borderRadius: \"50%\",\n background: \"#fdfcfc\",\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n zIndex: 1, flexShrink: 0,\n }} />\n </div>\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n {[\"0%\", \"1%\", \"2%\", \"3%\", \"4%\", \"5%\"].map((l) => (\n <span key={l} style={{\n ...font(14, c.secondary),\n textTransform: \"uppercase\" as const, letterSpacing: \"0.04em\",\n width: 24, textAlign: l === \"0%\" ? \"left\" : l === \"5%\" ? \"right\" : \"center\",\n }}>{l}</span>\n ))}\n </div>\n </div>\n );\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Helper: resolve bond data from lockups for a given market\n ═══════════════════════════════════════════════════════════════════════════ */\n\nfunction resolveBondParams(marketKey: string) {\n // marketKey format: \"validatorId-maturityId-PT\" or \"validatorId-maturityId-RT\"\n const parts = marketKey.split(\"-\");\n if (parts.length < 3) return null;\n const tokenType = parts.pop(); // \"PT\" or \"RT\"\n const maturityId = parts.pop() as MaturityId;\n const validatorId = parts.join(\"-\"); // rejoin in case validator has hyphens\n\n const lockups = allowedLockups();\n const bond = (lockups as Record<string, Record<string, { pubkey: string; pt_address: string; rt_address: string }>>)[validatorId]?.[maturityId];\n if (!bond) return null;\n\n const validator = validators[validatorId as ValidatorId];\n return {\n validatorId,\n maturityId,\n bondPubkey: bond.pubkey,\n principalTokenMint: bond.pt_address,\n yieldTokenMint: bond.rt_address,\n voteAccount: validator?.vote_account ?? \"\",\n };\n}\n\nexport default function ReviewQuote() {\n const { connection } = useConnection();\n const wallet = useWallet();\n\n // Epoch-synced wall-clock — matches the on-chain clock the Bonds program\n // uses when computing RT issuance, so the swap we build matches what the\n // user will actually hold after deposit.\n const [nowTs, setNowTs] = useState<number | null>(null);\n useEffect(() => {\n fetchEpochSyncedNowTs(connection).then(setNowTs).catch(() => {\n setNowTs(Date.now() / 1000);\n });\n }, [connection]);\n\n const navigate = useWidgetStore((s) => s.navigate);\n const txStatus = useWidgetStore((s) => s.txStatus);\n const txStep = useWidgetStore((s) => s.txStep);\n const txError = useWidgetStore((s) => s.txError);\n const setTxStatus = useWidgetStore((s) => s.setTxStatus);\n const setTxStep = useWidgetStore((s) => s.setTxStep);\n const setSellAmountSol = useWidgetStore((s) => s.setSellAmountSol);\n const advancedOpen = useWidgetStore((s) => s.advancedOpen);\n const setAdvancedOpen = useWidgetStore((s) => s.setAdvancedOpen);\n const slippageBps = useWidgetStore((s) => s.slippageBps);\n const setSlippageBps = useWidgetStore((s) => s.setSlippageBps);\n\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const selectedMaturityId = useWidgetStore((s) => s.selectedMaturityId);\n const selectedStakeAccountPubkey = useWidgetStore((s) => s.selectedStakeAccountPubkey);\n const selectedStakeAccountBalance = useWidgetStore((s) => s.selectedStakeAccountBalance);\n const selectedValidatorAltPubkey = useWidgetStore((s) => s.selectedValidatorAltPubkey);\n\n const markets = useMarketStore((s) => s.markets);\n const userStakeAccounts = useBalanceStore((s) => s.userStakeAccounts);\n const setWalletBalances = useBalanceStore((s) => s.setWalletBalances);\n const setUserStakeAccounts = useBalanceStore((s) => s.setUserStakeAccounts);\n const setBalanceLamports = useWalletStore((s) => s.setBalanceLamports);\n\n const parsedAmount = parseFloat(depositAmount) || 0;\n const maturity = selectedMaturityId ? maturities[selectedMaturityId] : null;\n const matures = maturity?.human_readable ?? \"Sep 30, 2026\";\n\n // Find points label from maturity month\n const monthToQuarter: Record<string, string> = { JUN: \"Q3\", SEP: \"Q4\", DEC: \"Q1\", MAR: \"Q2\" };\n const quarterId = maturity ? (monthToQuarter[maturity.month] ?? null) : null;\n const points = POINTS_ENABLED && quarterId ? (pointsMap[quarterId] ?? null) : null;\n\n // Find the validator vote account from stake accounts\n const selectedStakeAccount = selectedStakeAccountPubkey !== \"liquid-sol\"\n ? userStakeAccounts.find((a) => a.pubkey === selectedStakeAccountPubkey)\n : null;\n\n // Resolve the validator ID for market lookup\n const stakeVoteAccount = selectedStakeAccount?.validatorVoteAccount;\n const stakeBondLookup = stakeVoteAccount && selectedMaturityId\n ? lookupBondByVoteAccount(stakeVoteAccount, selectedMaturityId)\n : null;\n const stakeValidatorId = stakeBondLookup?.validatorId;\n\n // RT market data — must match the stake account's validator (each validator has its own RT token)\n const rtMarketKey = selectedMaturityId\n ? (stakeValidatorId\n ? `${stakeValidatorId}-${selectedMaturityId}-RT`\n : Object.keys(markets).find((k) => k.endsWith(`-${selectedMaturityId}-RT`)))\n : null;\n const rtMarket = rtMarketKey ? markets[rtMarketKey] ?? null : null;\n\n // Bonds program mints RT proportional to remaining issuance window, not\n // 1:1 with the deposit. Use the same formula the on-chain program does\n // so the swap we build matches the user's actual post-deposit RT balance.\n // PT, separately, *is* 1:1 with the stake — keep `parsedAmount` for PT rows.\n const effectiveNowTs = nowTs ?? Date.now() / 1000;\n const rtAmount = maturity\n ? estimateRtFromStake({\n amountSol: parsedAmount,\n maturity,\n nowTs: effectiveNowTs,\n })\n : 0;\n\n // Real liquidity check against RT order book bids\n const liquidityCheck = rtMarket?.bids?.length\n ? checkSellLiquidity(rtMarket.bids, rtAmount)\n : null;\n\n const hasLiquidity = liquidityCheck?.isSufficientLiquidity ?? false;\n const orderBookSlippageBps = liquidityCheck?.slippageBps ?? 0;\n\n // Quote: expected gross SOL from selling RT on Manifest\n const grossSellAmount = liquidityCheck?.expectedFillPrice != null\n ? liquidityCheck.expectedFillPrice * rtAmount\n : rtAmount * (MARKET_RATE / 100); // fallback\n\n // Net-of-fee SOL shown to the user and paid out after treasury transfer\n const sellAmount = applyTradingFee(grossSellAmount);\n const feeAmountSol = grossSellAmount - sellAmount;\n const feePct = (PYE_TRADING_FEE_BPS / 100).toFixed(2);\n\n // Slippage tolerance from slider (0-5 float)\n const slippage = slippageBps / 100;\n\n const isLoading = txStatus === \"loading\";\n const selectedStakeStillOwned =\n selectedStakeAccountPubkey === \"liquid-sol\" ||\n (selectedStakeAccountPubkey !== null &&\n userStakeAccounts.some((a) => a.pubkey === selectedStakeAccountPubkey));\n const canSign =\n !!selectedStakeAccountPubkey &&\n !!selectedMaturityId &&\n !isLoading &&\n hasLiquidity &&\n selectedStakeStillOwned;\n\n // Resolve bond from the stake account's actual validator (not from market key)\n // Fall back to market-key-based resolution for liquid SOL (no stake account)\n const anyMarketKey = !stakeBondLookup\n ? (rtMarketKey ?? (selectedMaturityId ? Object.keys(markets).find((k) => k.endsWith(`-${selectedMaturityId}-PT`)) : null))\n : null;\n const marketBondParams = anyMarketKey ? resolveBondParams(anyMarketKey) : null;\n\n const bondParams = stakeBondLookup\n ? {\n validatorId: stakeBondLookup.validatorId,\n maturityId: selectedMaturityId!,\n bondPubkey: stakeBondLookup.pubkey,\n principalTokenMint: stakeBondLookup.pt_address,\n yieldTokenMint: stakeBondLookup.rt_address,\n voteAccount: stakeVoteAccount!,\n }\n : marketBondParams;\n\n const handleSign = useCallback(async () => {\n if (!selectedStakeAccountPubkey || !selectedMaturityId) return;\n if (!bondParams) throw new Error(\"Could not resolve bond data for this market\");\n if (!rtMarket) throw new Error(\"No RT market found for this maturity\");\n if (!maturity) throw new Error(\"No maturity selected\");\n\n setTxStatus(\"loading\");\n setTxStep(\"depositing\");\n\n // Swap-level minReceive is measured against the gross swap output;\n // the fixed taker fee is transferred from that wSOL post-swap.\n const minReceive = Math.max(grossSellAmount * (1 - slippage / 100), 0);\n\n // Refresh the epoch-synced clock right before signing — the mount-time\n // value can be minutes stale by the time the user clicks, and the chain\n // clock keeps advancing. An out-of-date nowTs overshoots the actual\n // mint by ~1 atom per second of drift, which fails the Manifest swap.\n const freshNowTs = await fetchEpochSyncedNowTs(connection).catch(\n () => Date.now() / 1000,\n );\n const freshRtAmount = estimateRtFromStake({\n amountSol: parsedAmount,\n maturity,\n nowTs: freshNowTs,\n });\n\n try {\n if (selectedStakeAccountPubkey === \"liquid-sol\") {\n // Liquid SOL path — kept as two transactions (SIMD-185: disabled in UI)\n await executeStakeDeposit({\n connection,\n wallet,\n bondPubkey: bondParams.bondPubkey,\n principalTokenMint: bondParams.principalTokenMint,\n yieldTokenMint: bondParams.yieldTokenMint,\n validatorVoteAccount: bondParams.voteAccount,\n amountSol: parsedAmount,\n });\n setTxStep(\"selling\");\n const rtSellResult = await executeRtSell({\n connection,\n wallet,\n marketPubkey: rtMarket.marketPubkey,\n rtMint: bondParams.yieldTokenMint,\n orderSizeTokens: freshRtAmount,\n minReceiveTokens: minReceive,\n expectedSolOut: grossSellAmount,\n });\n setTxStep(\"complete\");\n setSellAmountSol(sellAmount);\n setTxStatus(\"success\", rtSellResult.signature);\n navigate(\"complete\");\n } else {\n // Stake account path — single bundled v0 transaction (requires ALT)\n if (!selectedValidatorAltPubkey) {\n throw new Error(\n \"Sell Yield is not yet enabled for this validator. An Address Lookup Table hasn't been deployed yet — please contact the Pye team.\",\n );\n }\n const result = await executeDepositAndSell({\n connection,\n wallet,\n bondPubkey: bondParams.bondPubkey,\n principalTokenMint: bondParams.principalTokenMint,\n yieldTokenMint: bondParams.yieldTokenMint,\n validatorVoteAccount: bondParams.voteAccount,\n stakeAccountPubkey: selectedStakeAccountPubkey,\n amountSol: parsedAmount,\n rtAmountToSell: freshRtAmount,\n stakeBalanceSol: selectedStakeAccountBalance,\n marketPubkey: rtMarket.marketPubkey,\n minReceiveTokens: minReceive,\n expectedSolOut: grossSellAmount,\n altPubkey: selectedValidatorAltPubkey,\n });\n setTxStep(\"complete\");\n setSellAmountSol(sellAmount);\n setTxStatus(\"success\", result.signature);\n navigate(\"complete\");\n }\n } catch (err) {\n setTxStatus(\n \"error\",\n null,\n err instanceof Error ? err.message : \"Transaction failed\",\n );\n } finally {\n const owner = wallet.publicKey!;\n connection.getBalance(owner, \"confirmed\").then(setBalanceLamports).catch(() => {});\n fetchBalances(connection, owner).then(setWalletBalances).catch(() => {});\n fetchUserStakeAccounts(connection, owner).then(setUserStakeAccounts).catch(() => {});\n }\n }, [\n rtMarket,\n bondParams,\n selectedStakeAccount,\n selectedStakeAccountPubkey,\n selectedMaturityId,\n selectedValidatorAltPubkey,\n connection,\n wallet,\n parsedAmount,\n maturity,\n selectedStakeAccountBalance,\n sellAmount,\n grossSellAmount,\n slippage,\n setTxStatus,\n setTxStep,\n setSellAmountSol,\n navigate,\n setBalanceLamports,\n setWalletBalances,\n setUserStakeAccounts,\n ]);\n\n return (\n <>\n <StepTitle title=\"Approve in your wallet\" />\n\n {/* Quote — stacked sections */}\n {(() => {\n const rows: Array<{ key: string; left: React.ReactNode; right: React.ReactNode }> = [\n {\n key: \"receive\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>You receive today</p>\n <Tooltip text=\"Estimated upfront payout based on current market rates, net of fees. The final amount is confirmed when your order fills on the Pye orderbook.\" />\n </div>\n ),\n right: (\n <Odometer\n value={`+${formatSolAmount(sellAmount)} SOL`}\n style={{ ...font(15, c.green, 500), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"stake\",\n left: <p style={font(14, c.secondary)}>Stake amount</p>,\n right: (\n <Odometer\n value={`${parsedAmount} SOL`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"pt\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>PTs you'll receive</p>\n <Tooltip text=\"Your PT is a token receipt for your staked SOL. At the redeem date, redeem it 1:1 for your full stake.\" />\n </div>\n ),\n right: (\n <Odometer\n value={`${parsedAmount} PT`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"redeem\",\n left: <p style={font(14, c.secondary)}>Redeem date</p>,\n right: (\n <p style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0 }}>\n {matures}\n </p>\n ),\n },\n {\n key: \"fee\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>Pye protocol fee ({feePct}%)</p>\n <Tooltip text={`A ${feePct}% fee is taken from the SOL proceeds of your sale and routed to the Pye treasury.`} />\n </div>\n ),\n right: (\n <Odometer\n value={`−${formatSolAmount(feeAmountSol)} SOL`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n ...(points ? [{\n key: \"points\",\n left: <p style={font(14, c.secondary)}>Points multiplier</p>,\n right: (\n <p style={{ ...font(14, c.purple), whiteSpace: \"nowrap\", flexShrink: 0 }}>\n {points}\n </p>\n ),\n }] : []),\n ];\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 0 }}>\n {rows.map((row, i) => {\n const isFirst = i === 0;\n const isLast = i === rows.length - 1;\n const radius = isFirst && isLast\n ? 8\n : isFirst\n ? \"8px 8px 0 0\"\n : isLast\n ? \"0 0 8px 8px\"\n : 0;\n return (\n <div\n key={row.key}\n style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: radius,\n padding: \"12px 12px\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n {row.left}\n {row.right}\n </div>\n );\n })}\n </div>\n );\n })()}\n\n {/* Advanced toggle */}\n <div\n onClick={() => setAdvancedOpen(!advancedOpen)}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n cursor: \"pointer\", padding: \"2px 0\", userSelect: \"none\",\n }}\n >\n <span style={font(14, c.secondary)}>Advanced</span>\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" style={{\n transform: advancedOpen ? \"rotate(180deg)\" : \"none\", transition: \"transform 0.2s\",\n }}>\n <path d=\"M1 1L5 5L9 1\" stroke={c.secondary} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n\n {/* Advanced panel — discount rate (grid-row height transition) */}\n <div style={{\n display: \"grid\",\n gridTemplateRows: advancedOpen ? \"1fr\" : \"0fr\",\n transition: \"grid-template-rows 280ms cubic-bezier(0.2,0.9,0.2,1)\",\n }}>\n <div style={{\n overflow: \"hidden\",\n opacity: advancedOpen ? 1 : 0,\n transition: \"opacity 200ms cubic-bezier(0.2,0.9,0.2,1)\",\n }}>\n <div style={{\n background: c.raised, borderRadius: 8, padding: 12,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n display: \"flex\", flexDirection: \"column\", gap: 16,\n }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <span style={font(14, c.secondary)}>Max slippage tolerance</span>\n <Tooltip bg={c.highlight} text=\"Slippage is the maximum difference between the quoted price and the price you actually receive. A higher tolerance means your order is more likely to fill, but you may receive slightly less SOL.\" />\n </span>\n {orderBookSlippageBps > 0 && (\n <span style={font(14, c.secondary)}>Est. slippage: {(orderBookSlippageBps / 100).toFixed(2)}%</span>\n )}\n </div>\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 4 }}>\n <span style={{ ...font(18, c.primary), transition: \"color 0.15s\" }}>\n {slippage.toFixed(2)}\n </span>\n <span style={font(14, c.secondary)}>% max slippage</span>\n </div>\n <DiscountSlider value={slippage} onChange={(v) => setSlippageBps(Math.round(v * 100))} />\n </div>\n </div>\n </div>\n </div>\n\n {/* Liquidity warning */}\n {!hasLiquidity && rtAmount > 0 && (\n <div style={{\n background: \"rgba(255,181,77,0.15)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"inset 0 -1px 0 rgba(0,0,0,0.08)\",\n borderRadius: 6, padding: 12,\n display: \"flex\", flexDirection: \"column\", gap: 2,\n }}>\n <p style={{ ...font(14, c.primary), fontWeight: 500 }}>Insufficient liquidity</p>\n <p style={font(14, c.secondary)}>\n Only {liquidityCheck?.totalAvailableSize?.toFixed(2) ?? \"0\"} RT available on the order book.\n Your order may partially fill or not fill at all.\n </p>\n </div>\n )}\n\n {/* Error */}\n {txStatus === \"error\" && txError && (\n <div style={{\n ...font(14, c.red),\n background: `${c.red}12`,\n borderRadius: 6, padding: \"8px 12px\",\n }}>\n {txError}\n </div>\n )}\n\n <Spacer />\n <CTA\n label={\n isLoading\n ? txStep === \"selling\" ? \"Selling rewards...\"\n : \"Confirming...\"\n : `Sell Rewards — get ${formatSolAmount(sellAmount, 3)} SOL`\n }\n onClick={handleSign}\n disabled={!canSign}\n purple\n />\n </>\n );\n}\n","import { useMemo, useCallback } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport {\n buildPtLookup,\n maturities,\n validators,\n executeRedeem,\n fetchBalances,\n fetchUserStakeAccounts,\n type ValidatorId,\n type MaturityId,\n type Bond,\n} from \"@pyefi/sdk\";\nimport { useBalanceStore, useWalletStore } from \"@pyefi/sdk/react\";\nimport { Body } from \"../shared/Layout\";\nimport { c, font, formatSolAmount } from \"../design-system\";\n\nconst LAMPORTS_PER_SOL = 1_000_000_000;\n\ninterface Position {\n ptMint: string;\n validatorId: ValidatorId;\n maturityId: MaturityId;\n bond: Bond;\n ptAmount: number;\n ptAmountLamports: number;\n maturityTimestamp: number;\n maturityLabel: string;\n isMatured: boolean;\n daysLeft: number;\n validatorName: string;\n validatorPtIcon: string;\n}\n\nfunction PositionRow({ position, onRedeem, isRedeeming }: {\n position: Position;\n onRedeem: (p: Position) => void;\n isRedeeming: boolean;\n}) {\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: 8,\n padding: \"12px 16px\",\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <img\n src={position.validatorPtIcon}\n alt={`${position.validatorName} PT`}\n style={{ width: 32, height: 32, borderRadius: 8, flexShrink: 0, objectFit: \"cover\" }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n <p style={font(15, c.primary)}>{formatSolAmount(position.ptAmount)} PT</p>\n <p style={font(14, c.secondary)}>{position.validatorName} · {position.maturityLabel}</p>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, flexShrink: 0 }}>\n <p style={{ ...font(14, position.isMatured ? c.green : c.secondary), whiteSpace: \"nowrap\" }}>\n {position.isMatured ? \"Unlocked\" : `${position.daysLeft}d left`}\n </p>\n <button\n className=\"pye-redeem-btn\"\n onClick={position.isMatured && !isRedeeming ? () => onRedeem(position) : undefined}\n disabled={!position.isMatured || isRedeeming}\n style={{\n height: 26, width: 72, borderRadius: 6, border: \"none\",\n padding: \"0 10px\",\n borderTop: `1px solid var(--c-brand-hi)`,\n cursor: !position.isMatured ? \"not-allowed\" : isRedeeming ? \"wait\" : \"pointer\",\n background: c.purple,\n ...font(14, \"var(--c-brand-text)\"),\n boxShadow: `inset 0 -1px 0 var(--c-brand-sh)`,\n transition: \"filter 0.1s\",\n opacity: !position.isMatured ? 0.5 : isRedeeming ? 0.7 : 1,\n whiteSpace: \"nowrap\",\n }}\n >\n {isRedeeming ? \"...\" : \"Redeem\"}\n </button>\n </div>\n </div>\n );\n}\n\nexport default function RedeemList() {\n const { connection } = useConnection();\n const wallet = useWallet();\n const walletBalances = useBalanceStore((s) => s.walletBalances);\n const navigate = useWidgetStore((s) => s.navigate);\n\n const redeemingMint = useWidgetStore((s) => s.redeemingMint);\n const setRedeemingMint = useWidgetStore((s) => s.setRedeemingMint);\n const redeemError = useWidgetStore((s) => s.redeemError);\n const setRedeemError = useWidgetStore((s) => s.setRedeemError);\n const setRedeemAmountSol = useWidgetStore((s) => s.setRedeemAmountSol);\n const setRedeemTxSignature = useWidgetStore((s) => s.setRedeemTxSignature);\n const setWalletBalances = useBalanceStore((s) => s.setWalletBalances);\n const setUserStakeAccounts = useBalanceStore((s) => s.setUserStakeAccounts);\n const setBalanceLamports = useWalletStore((s) => s.setBalanceLamports);\n\n const ptLookup = buildPtLookup();\n\n const positions: Position[] = useMemo(() => {\n const now = Date.now() / 1000;\n const result: Position[] = [];\n for (const [mint, amount] of Object.entries(walletBalances)) {\n if (amount <= 0) continue;\n const entry = ptLookup.get(mint);\n if (!entry) continue;\n const maturity = maturities[entry.maturityId];\n const matTs = Number(maturity.maturity_timestamp);\n const isMatured = now >= matTs;\n const daysLeft = isMatured ? 0 : Math.ceil((matTs * 1000 - Date.now()) / (1000 * 60 * 60 * 24));\n const validator = validators[entry.validatorId];\n result.push({\n ptMint: mint,\n validatorId: entry.validatorId,\n maturityId: entry.maturityId,\n bond: entry.bond,\n ptAmount: amount / LAMPORTS_PER_SOL,\n ptAmountLamports: amount,\n maturityTimestamp: matTs,\n maturityLabel: maturity.human_readable,\n isMatured,\n daysLeft,\n validatorName: validator?.name ?? entry.validatorId,\n validatorPtIcon: validator?.pt_sol ?? \"\",\n });\n }\n result.sort((a, b) => a.maturityTimestamp - b.maturityTimestamp);\n return result;\n }, [walletBalances, ptLookup]);\n\n const handleRedeem = useCallback(async (p: Position) => {\n setRedeemError(null);\n setRedeemingMint(p.ptMint);\n try {\n const { signature } = await executeRedeem({\n connection,\n wallet,\n bondPubkey: p.bond.pubkey,\n principalTokenMint: p.bond.pt_address,\n yieldTokenMint: p.bond.rt_address,\n ptAmountLamports: p.ptAmountLamports,\n rtAmountLamports: 0,\n });\n setRedeemAmountSol(p.ptAmountLamports / LAMPORTS_PER_SOL);\n setRedeemTxSignature(signature);\n navigate(\"redeem-complete\");\n } catch (err) {\n setRedeemError(err instanceof Error ? err.message : \"Redeem failed\");\n } finally {\n setRedeemingMint(null);\n const owner = wallet.publicKey!;\n connection.getBalance(owner, \"confirmed\")\n .then(setBalanceLamports)\n .catch(() => {});\n fetchBalances(connection, owner)\n .then(setWalletBalances)\n .catch(() => {});\n fetchUserStakeAccounts(connection, owner)\n .then(setUserStakeAccounts)\n .catch(() => {});\n }\n }, [connection, wallet, setRedeemError, setRedeemingMint, setRedeemAmountSol, setRedeemTxSignature, navigate, setBalanceLamports, setWalletBalances, setUserStakeAccounts]);\n\n return (\n <Body padding={0} style={{ borderTop: \"none\" }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {redeemError && (\n <div style={{\n padding: \"8px 16px\",\n background: `${c.red}12`,\n ...font(14, c.red),\n }}>\n {redeemError}\n </div>\n )}\n\n {positions.length > 0 ? (\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {positions.map(p => (\n <PositionRow\n key={p.ptMint}\n position={p}\n onRedeem={handleRedeem}\n isRedeeming={redeemingMint === p.ptMint}\n />\n ))}\n </div>\n ) : (\n <div style={{\n flex: 1, display: \"flex\", flexDirection: \"column\",\n alignItems: \"center\", justifyContent: \"center\",\n gap: 6, padding: 24, textAlign: \"center\",\n }}>\n <p style={font(15, c.primary)}>No active positions</p>\n <p style={font(14, c.secondary)}>Sell future rewards to create a position.</p>\n </div>\n )}\n </div>\n </Body>\n );\n}\n","import { useWidgetStore } from \"../../stores/widget-store\";\nimport { maturities } from \"@pyefi/sdk\";\nimport { c, font, formatSolAmount } from \"../design-system\";\nimport { Body, CTA, Tooltip, Spacer, SuccessHeader } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\nexport default function StepComplete() {\n const reset = useWidgetStore((s) => s.reset);\n const txSignature = useWidgetStore((s) => s.txSignature);\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const selectedMaturityId = useWidgetStore((s) => s.selectedMaturityId);\n const sellAmountSol = useWidgetStore((s) => s.sellAmountSol);\n\n const parsedAmount = parseFloat(depositAmount) || 0;\n const sellAmount = sellAmountSol ?? 0;\n\n // Resolve maturity from real SDK data\n const maturity = selectedMaturityId ? maturities[selectedMaturityId] : null;\n const matures = maturity?.human_readable ?? \"Sep 30, 2026\";\n\n const solscanUrl = txSignature\n ? `https://solscan.io/tx/${txSignature}`\n : \"https://solscan.io\";\n\n return (\n <>\n <SuccessHeader label=\"Transaction confirmed\" onClose={() => reset()} />\n\n <Body>\n <p style={font(14, c.secondary)}>Your future staking rewards have been sold upfront.</p>\n\n {/* Summary — stacked rows matching ReviewQuote layout */}\n {(() => {\n const rows: Array<{ key: string; left: React.ReactNode; right: React.ReactNode }> = [\n {\n key: \"received\",\n left: <p style={font(14, c.secondary)}>Rewards sold upfront</p>,\n right: (\n <Odometer\n value={`+${formatSolAmount(sellAmount)} SOL`}\n style={{ ...font(15, c.green, 500), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"pt\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>PT received</p>\n <Tooltip text=\"A PT (Principal Token) is a 1:1 tokenised claim on your staked SOL. It accrues no rewards — those were sold upfront. Redeem it at maturity to get your full stake back.\" />\n </div>\n ),\n right: (\n <Odometer\n value={`+${parsedAmount} PT`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"stake\",\n left: <p style={font(14, c.secondary)}>Stake returned</p>,\n right: (\n <p style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0 }}>\n {matures}\n </p>\n ),\n },\n {\n key: \"tx\",\n left: <p style={font(14, c.secondary)}>Transaction</p>,\n right: (\n <a\n href={solscanUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{ ...font(14, c.purple), textDecoration: \"none\", display: \"flex\", alignItems: \"center\", gap: 4, flexShrink: 0 }}\n >\n Solscan\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1h4v4M11 1L5.5 6.5M5 2H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </a>\n ),\n },\n ];\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 0 }}>\n {rows.map((row, i) => {\n const isFirst = i === 0;\n const isLast = i === rows.length - 1;\n const radius = isFirst && isLast\n ? 8\n : isFirst\n ? \"8px 8px 0 0\"\n : isLast\n ? \"0 0 8px 8px\"\n : 0;\n return (\n <div\n key={row.key}\n style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: radius,\n padding: \"12px 12px\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n {row.left}\n {row.right}\n </div>\n );\n })}\n </div>\n );\n })()}\n\n {/* Wallet visibility notice */}\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8, padding: 12,\n display: \"flex\", alignItems: \"flex-start\", gap: 10,\n }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0, marginTop: 2 }}>\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke={c.secondary} strokeWidth=\"1.2\"/>\n <path d=\"M8 7.5v3.5M8 5v.5\" stroke={c.secondary} strokeWidth=\"1.4\" strokeLinecap=\"round\"/>\n </svg>\n <p style={font(12, c.secondary)}>\n Your PT tokens may be hidden in your wallet — enable them via <span style={{ color: c.primary }}>Manage Tokens</span> to see your balance.\n </p>\n </div>\n\n <Spacer />\n\n {/* Stay updated */}\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8, padding: 12,\n display: \"flex\", alignItems: \"center\", gap: 12,\n }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <p style={font(14, c.primary)}>Learn more about Pye</p>\n <a href=\"https://docs.pye.fi/how-pye-works\" target=\"_blank\" rel=\"noreferrer\"\n style={{ ...font(11, c.secondary), textDecoration: \"none\", display: \"flex\", alignItems: \"center\", gap: 4 }}>\n Read the docs\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1h4v4M11 1L5.5 6.5M5 2H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </a>\n </div>\n <div style={{ display: \"flex\", gap: 8, flexShrink: 0, alignSelf: \"center\" }}>\n <a href=\"https://t.me/pyefi\" target=\"_blank\" rel=\"noreferrer\"\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", width: 28, height: 28, borderRadius: 8, background: c.highlight, borderTop: `1px solid ${c.highlight}`, boxShadow: `inset 0 -1px 0 ${c.shadow}`, textDecoration: \"none\" }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill={c.secondary}>\n <path d=\"M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z\"/>\n </svg>\n </a>\n <a href=\"https://x.com/pyefinance\" target=\"_blank\" rel=\"noreferrer\"\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", width: 28, height: 28, borderRadius: 8, background: c.highlight, borderTop: `1px solid ${c.highlight}`, boxShadow: `inset 0 -1px 0 ${c.shadow}`, textDecoration: \"none\" }}>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill={c.secondary}>\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.744l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.912-5.622zm-1.161 17.52h1.833L7.084 4.126H5.117z\"/>\n </svg>\n </a>\n </div>\n </div>\n\n <CTA label=\"Sell more rewards\" onClick={() => reset()} />\n </Body>\n </>\n );\n}\n","import { useWidgetStore } from \"../../stores/widget-store\";\nimport { c, font, displayFont, formatSolAmount } from \"../design-system\";\nimport { Body, CTA, Spacer, SuccessHeader } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\nexport default function RedeemComplete() {\n const reset = useWidgetStore((s) => s.reset);\n const redeemAmountSol = useWidgetStore((s) => s.redeemAmountSol);\n const redeemTxSignature = useWidgetStore((s) => s.redeemTxSignature);\n\n const amount = redeemAmountSol ?? 12.5; // fallback for dev preview\n\n const solscanUrl = redeemTxSignature\n ? `https://solscan.io/tx/${redeemTxSignature}`\n : \"https://solscan.io\";\n\n return (\n <>\n <SuccessHeader label=\"Redeem confirmed\" onClose={() => reset()} />\n\n <Body>\n <p style={font(14, c.secondary)}>Your staked SOL has been returned to your wallet.</p>\n\n {/* Amount received */}\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <div style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: \"8px 8px 0 0\",\n padding: 12,\n display: \"flex\", flexDirection: \"column\", gap: 12,\n }}>\n <p style={font(14, c.secondary)}>Staked SOL returned</p>\n <Odometer\n value={`${formatSolAmount(amount)} SOL`}\n style={{ ...displayFont(32, c.green), lineHeight: 1.2 }}\n />\n </div>\n {/* Solscan link row */}\n <div style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: \"0 0 8px 8px\",\n padding: 12,\n display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\",\n }}>\n <p style={font(14, c.secondary)}>Received as a stake account</p>\n <a\n href={solscanUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{ ...font(14, c.purple), textDecoration: \"none\", display: \"flex\", alignItems: \"center\", gap: 4 }}\n >\n Solscan\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1h4v4M11 1L5.5 6.5M5 2H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </a>\n </div>\n </div>\n\n {/* Educational: what to do next */}\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8, padding: 12,\n display: \"flex\", flexDirection: \"column\", gap: 12,\n }}>\n <p style={font(14, c.primary)}>\n <strong style={{ fontWeight: 600 }}>What to do next</strong>\n </p>\n <p style={font(14, c.secondary)}>\n Two more steps to make it liquid.\n </p>\n\n {/* Step 1 */}\n <div style={{ display: \"flex\", gap: 10 }}>\n <div style={{\n width: 20, height: 20, borderRadius: \"50%\", flexShrink: 0,\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n ...font(11, c.secondary),\n }}>\n 1\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n <p style={font(14, c.primary)}>Deactivate the stake account</p>\n <p style={font(11, c.secondary)}>\n Deactivate in your wallet app. Takes ~1 epoch (~2 days).\n </p>\n </div>\n </div>\n\n {/* Step 2 */}\n <div style={{ display: \"flex\", gap: 10 }}>\n <div style={{\n width: 20, height: 20, borderRadius: \"50%\", flexShrink: 0,\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n ...font(11, c.secondary),\n }}>\n 2\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n <p style={font(14, c.primary)}>Withdraw to liquid SOL</p>\n <p style={font(11, c.secondary)}>\n Once deactivated, withdraw to get liquid SOL.\n </p>\n </div>\n </div>\n </div>\n\n <Spacer />\n\n <CTA label=\"Done\" onClick={() => reset()} />\n </Body>\n </>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useWalletStore } from \"@pyefi/sdk/react\";\nimport { useWidgetStore, type WidgetScreen } from \"../stores/widget-store\";\nimport { Widget, Body, Footer, StepHeader } from \"./shared/Layout\";\nimport WelcomeScreen from \"./screens/WelcomeScreen\";\nimport ConnectWallet from \"./screens/ConnectWallet\";\nimport YieldForwardIntro from \"./screens/YieldForwardIntro\";\nimport SelectPosition from \"./screens/SelectPosition\";\nimport ChooseAmount from \"./screens/ChooseAmount\";\nimport ChooseDuration from \"./screens/ChooseDuration\";\nimport ReviewQuote from \"./screens/ReviewQuote\";\nimport RedeemList from \"./screens/RedeemList\";\nimport StepComplete from \"./screens/StepComplete\";\nimport RedeemComplete from \"./screens/RedeemComplete\";\n\ninterface WidgetShellProps {\n validatorName?: string;\n}\n\nconst STEP_CONFIG: Partial<Record<WidgetScreen, { step: number; total: number }>> = {\n \"select-position\": { step: 1, total: 4 },\n \"choose-amount\": { step: 2, total: 4 },\n \"choose-duration\": { step: 3, total: 4 },\n \"review-quote\": { step: 4, total: 4 },\n};\n\nconst REDEEM_TOOLTIP =\n \"Each PT (Principal Token) is a 1:1 tokenised claim on your staked SOL. It accrues no rewards — those were sold upfront. Redeem at maturity to receive your full SOL stake back.\";\n\nfunction HeaderlessShell({ screen, children }: { screen: WidgetScreen; children: React.ReactNode }) {\n return (\n <Widget>\n <Body style={{ borderRadius: \"10px 10px 0 0\", borderTop: \"none\" }}>\n <div key={screen} className=\"pye-step-in\">{children}</div>\n </Body>\n <Footer />\n </Widget>\n );\n}\n\nexport default function WidgetShell({ validatorName }: WidgetShellProps) {\n const screen = useWidgetStore((s) => s.screen);\n const goBack = useWidgetStore((s) => s.goBack);\n const reset = useWidgetStore((s) => s.reset);\n const navigate = useWidgetStore((s) => s.navigate);\n const walletPublicKey = useWalletStore((s) => s.publicKey);\n const walletStatus = useWalletStore((s) => s.status);\n const prevWalletRef = useRef<string | null>(null);\n\n useEffect(() => {\n const connected = walletStatus === \"connected\";\n const atIntro = screen === \"yield-forward-intro\" || screen === \"connect-wallet\";\n\n if (connected && atIntro) {\n navigate(\"welcome\");\n } else if (!connected && !atIntro) {\n reset();\n }\n }, [walletStatus, screen, navigate, reset]);\n\n // Reset mid-flow if the connected wallet changes\n useEffect(() => {\n if (!walletPublicKey) {\n prevWalletRef.current = null;\n return;\n }\n if (prevWalletRef.current && prevWalletRef.current !== walletPublicKey) {\n reset();\n navigate(\"welcome\");\n }\n prevWalletRef.current = walletPublicKey;\n }, [walletPublicKey, reset, navigate]);\n\n if (screen === \"complete\") {\n return <Widget><StepComplete /><Footer /></Widget>;\n }\n\n if (screen === \"redeem-complete\") {\n return <Widget><RedeemComplete /><Footer /></Widget>;\n }\n\n if (screen === \"welcome\") {\n return <Widget><WelcomeScreen validatorName={validatorName} /><Footer /></Widget>;\n }\n\n if (screen === \"yield-forward-intro\") {\n return <HeaderlessShell screen={screen}><YieldForwardIntro /></HeaderlessShell>;\n }\n\n if (screen === \"connect-wallet\") {\n return <HeaderlessShell screen={screen}><ConnectWallet /></HeaderlessShell>;\n }\n\n if (screen === \"redeem-list\") {\n return (\n <Widget>\n <StepHeader hideStep label=\"Your positions\" tooltipText={REDEEM_TOOLTIP} onBack={goBack} />\n <RedeemList />\n <Footer />\n </Widget>\n );\n }\n\n const config = STEP_CONFIG[screen];\n\n return (\n <Widget>\n <StepHeader\n step={config?.step}\n total={config?.total}\n hideStep={!config?.step}\n onBack={goBack}\n />\n <Body>\n <div key={screen} className=\"pye-step-in\">\n {screen === \"select-position\" && <SelectPosition />}\n {screen === \"choose-amount\" && <ChooseAmount />}\n {screen === \"choose-duration\" && <ChooseDuration />}\n {screen === \"review-quote\" && <ReviewQuote />}\n </div>\n </Body>\n <Footer />\n </Widget>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useWalletStore } from \"@pyefi/sdk/react\";\nimport { useWidgetStore } from \"../stores/widget-store\";\n\n/**\n * Watches the connected wallet's publicKey and resets widget-store selection\n * state whenever the user switches accounts in their wallet (e.g. Phantom).\n * Without this, selectedStakeAccountPubkey / depositAmount / validator data\n * from the previous wallet persist and block the Sell Future Rewards flow.\n */\nexport default function WalletChangeWatcher() {\n const publicKey = useWalletStore((s) => s.publicKey);\n const resetForWalletChange = useWidgetStore((s) => s.resetForWalletChange);\n const prev = useRef<string | null>(null);\n\n useEffect(() => {\n const current = publicKey ? String(publicKey) : null;\n if (prev.current !== null && prev.current !== current) {\n resetForWalletChange();\n }\n prev.current = current;\n }, [publicKey, resetForWalletChange]);\n\n return null;\n}\n","import { useRef, useMemo } from \"react\";\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\nimport {\n PhantomWalletAdapter,\n SolflareWalletAdapter,\n TorusWalletAdapter,\n LedgerWalletAdapter,\n WalletConnectWalletAdapter,\n} from \"@solana/wallet-adapter-wallets\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nconst WALLET_CONNECT_PROJECT_ID = \"7b89b9d2ef5d0298961c3eeb879793b0\";\nimport { configurePyeSDK, validators } from \"@pyefi/sdk\";\nimport {\n PyeSDKProvider,\n WalletSyncer,\n BalanceSyncer,\n MarketSyncer,\n ApySyncer,\n} from \"@pyefi/sdk/react\";\nimport {\n createWidgetStore,\n WidgetStoreContext,\n} from \"./stores/widget-store\";\nimport { THEME_CSS } from \"./components/design-system\";\nimport WidgetShell from \"./components/WidgetShell\";\nimport WalletChangeWatcher from \"./components/WalletChangeWatcher\";\nimport type { PyeWidgetProps } from \"./types\";\n\nfunction resolveValidatorName(voteAccount?: string): string | undefined {\n if (!voteAccount) return undefined;\n for (const v of Object.values(validators)) {\n if (v.vote_account === voteAccount) return v.name;\n }\n return undefined;\n}\n\nexport default function PyeWidget({\n rpcUrl,\n supabaseUrl,\n supabaseAnonKey,\n voteAccount,\n theme = \"pye-light\",\n onClose,\n}: PyeWidgetProps) {\n const configuredRef = useRef(false);\n if (!configuredRef.current) {\n configurePyeSDK({ rpcUrl, supabaseUrl, supabaseAnonKey, voteAccount });\n configuredRef.current = true;\n }\n\n const validatorName = useMemo(() => resolveValidatorName(voteAccount), [voteAccount]);\n\n const wallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new SolflareWalletAdapter(),\n new TorusWalletAdapter(),\n new LedgerWalletAdapter(),\n new WalletConnectWalletAdapter({\n network: WalletAdapterNetwork.Mainnet,\n options: {\n projectId: WALLET_CONNECT_PROJECT_ID,\n metadata: {\n name: \"Pye\",\n description: \"Earn staking rewards upfront\",\n url: \"https://pye.fi\",\n icons: [\"https://pye.fi/icon.png\"],\n },\n },\n }),\n ],\n [],\n );\n\n const widgetStoreRef = useRef<ReturnType<typeof createWidgetStore>>(undefined);\n if (!widgetStoreRef.current) {\n widgetStoreRef.current = createWidgetStore();\n }\n\n return (\n <div data-theme={theme}>\n <style>{THEME_CSS}</style>\n <ConnectionProvider endpoint={rpcUrl}>\n <WalletProvider wallets={wallets} autoConnect>\n <PyeSDKProvider>\n <WalletSyncer />\n <BalanceSyncer />\n <MarketSyncer />\n <ApySyncer />\n <WidgetStoreContext.Provider value={widgetStoreRef.current}>\n <WalletChangeWatcher />\n <WidgetShell validatorName={validatorName} />\n </WidgetStoreContext.Provider>\n </PyeSDKProvider>\n </WalletProvider>\n </ConnectionProvider>\n </div>\n );\n}\n"],"names":["base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","i","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","parts","maxChunkLength","len2","ieee754","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","value","c","rt","base64","require$$0","require$$1","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","length","buf","arg","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","b","fromObject","assertSize","size","alloc","fill","encoding","checked","string","actual","fromArrayLike","array","arrayView","copy","byteOffset","obj","numberIsNaN","a","x","y","list","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","str","max","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","checkInt","min","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","E","sym","getMessage","Base","name","range","input","msg","received","addNumericalSeparator","checkBounds","type","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","g","BufferShim","initialState","createWidgetStore","createStore","immer","set","screen","prev","pubkey","balance","validatorName","validatorIcon","validatorVoteAccount","validatorAltPubkey","amount","id","open","bps","mint","error","sig","step","status","signature","WidgetStoreContext","createContext","useWidgetStore","selector","store","useContext","useStore","THEME_CSS","DISPLAY_FONT","font","color","weight","displayFont","MARKET_RATE","formatSolAmount","minDecimals","digits","POINTS_ENABLED","phantomLogo","backpackLogo","metamaskLogo","PyeWordmark","jsx","jsxs","WalletDot","logos","bg","logo","Widget","children","Body","padding","style","Spacer","StepHeader","total","onBack","hideStep","label","tooltipText","hasProgress","pct","backButton","Tooltip","StepTitle","title","subtitle","text","position","isBelow","triggerRef","useRef","coords","setCoords","useState","handleEnter","el","rect","popup","createPortal","RowGroup","SelectableRow","icon","selected","onClick","shadow","SkeletonRow","CTA","disabled","purple","SuccessHeader","onClose","Footer","InlineError","message","LAMPORTS_PER_SOL","ChoiceRow","subColor","WalletSwitcher","address","onSwitch","truncated","IconRedeem","IconDocs","IconSell","WelcomeScreen","navigate","walletBalances","useBalanceStore","userStakeAccounts","userStakeAccountsLoading","walletPublicKey","useWalletStore","disconnect","useWallet","ptLookup","buildPtLookup","totalPtSol","maturedPtSol","useMemo","now","matured","entry","sol","matTs","maturities","activeStakeSol","lamports","acc","canRedeem","canSell","hasAnyBalance","v","isInitialLoading","redeemSub","sellSub","Fragment","WalletRow","iconUrl","connecting","onConnect","isConnecting","isDimmed","ConnectWallet","wallets","wallet","select","walletStatus","useEffect","connectingName","sortedWallets","w","aDetected","bDetected","handleConnect","FALLBACK_APY","EXAMPLE_SOL","YieldForwardIntro","isConnected","markets","useMarketStore","apyByVoteAccount","useApyStore","apy","config","getPyeConfig","values","sellToday","holdToUnlock","maturityLabel","bestBid","key","market","nowS","yearsToMaturity","hold","SelectPosition","selectStakeAccount","activeAccounts","handleSelectStake","account","img","SLIDER_CSS","ChooseAmount","depositAmount","setDepositAmount","selectedBalance","selectedPubkey","available","pcts","rafRef","truncate4","rampToAmount","_a","duration","startTime","ease","t","lastWritten","tick","isLiquidSol","GAS_RESERVE","warning","isValid","sliderMax","sliderValue","sliderPct","stepSize","availableLabel","p","DIGITS","Odometer","stagger","reducedMotion","chars","digitIdx","ch","delay","DigitColumn","digit","setTarget","raf","QUARTER_INFO","ALL_MATURITIES","TWO_DAYS_S","getAvailableMaturities","ChooseDuration","connection","useConnection","selectedMaturityId","setSelectedMaturity","selectedValidatorVoteAccount","nowTs","setNowTs","fetchEpochSyncedNowTs","availableMaturities","stakeValidatorId","matId","lookupBondByVoteAccount","parsedAmount","effectiveNowTs","quarters","info","rtMarketKey","k","rtMarket","maturity","estimatedRt","estimateRtFromStake","maturityTs","yearsRemaining","grossYield","netYield","applyTradingFee","feePct","PYE_TRADING_FEE_BPS","sel","q","isSelected","DiscountSlider","onChange","trackRef","MIN","MAX","computeValue","clientX","raw","handlePointerDown","handlePointerMove","filledColor","l","resolveBondParams","marketKey","maturityId","validatorId","bond","allowedLockups","validator","validators","ReviewQuote","txStatus","txStep","txError","setTxStatus","setTxStep","setSellAmountSol","advancedOpen","setAdvancedOpen","slippageBps","setSlippageBps","selectedStakeAccountPubkey","selectedStakeAccountBalance","selectedValidatorAltPubkey","setWalletBalances","setUserStakeAccounts","setBalanceLamports","matures","selectedStakeAccount","stakeVoteAccount","stakeBondLookup","rtAmount","liquidityCheck","checkSellLiquidity","hasLiquidity","orderBookSlippageBps","grossSellAmount","sellAmount","feeAmountSol","slippage","isLoading","selectedStakeStillOwned","canSign","anyMarketKey","marketBondParams","bondParams","handleSign","useCallback","minReceive","freshNowTs","freshRtAmount","executeStakeDeposit","rtSellResult","executeRtSell","result","executeDepositAndSell","err","owner","fetchBalances","fetchUserStakeAccounts","rows","row","isFirst","isLast","radius","_b","PositionRow","onRedeem","isRedeeming","RedeemList","redeemingMint","setRedeemingMint","redeemError","setRedeemError","setRedeemAmountSol","setRedeemTxSignature","positions","isMatured","daysLeft","handleRedeem","executeRedeem","StepComplete","reset","txSignature","sellAmountSol","solscanUrl","RedeemComplete","redeemAmountSol","redeemTxSignature","STEP_CONFIG","REDEEM_TOOLTIP","HeaderlessShell","WidgetShell","goBack","prevWalletRef","connected","atIntro","WalletChangeWatcher","publicKey","resetForWalletChange","current","WALLET_CONNECT_PROJECT_ID","resolveValidatorName","voteAccount","PyeWidget","rpcUrl","supabaseUrl","supabaseAnonKey","theme","configuredRef","configurePyeSDK","PhantomWalletAdapter","SolflareWalletAdapter","TorusWalletAdapter","LedgerWalletAdapter","WalletConnectWalletAdapter","WalletAdapterNetwork","widgetStoreRef","ConnectionProvider","WalletProvider","PyeSDKProvider","WalletSyncer","BalanceSyncer","MarketSyncer","ApySyncer"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"pye-widget.es.js","sources":["../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js","../src/buffer-polyfill.ts","../src/stores/widget-store.ts","../src/components/design-system.ts","../src/assets/icons/phantom.png","../src/assets/icons/backoack.png","../src/assets/icons/metamasj.png","../src/components/Icons.tsx","../src/components/shared/Layout.tsx","../src/components/screens/WelcomeScreen.tsx","../src/components/screens/ConnectWallet.tsx","../src/components/screens/YieldForwardIntro.tsx","../src/components/screens/SelectPosition.tsx","../src/components/screens/ChooseAmount.tsx","../src/components/shared/Odometer.tsx","../src/components/screens/ChooseDuration.tsx","../src/components/screens/ReviewQuote.tsx","../src/components/screens/RedeemList.tsx","../src/components/screens/StepComplete.tsx","../src/components/screens/RedeemComplete.tsx","../src/components/WidgetShell.tsx","../src/components/WalletChangeWatcher.tsx","../src/PyeWidget.tsx"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","// Side-effect import: makes Node's `Buffer` available as a browser global so\n// transitive deps (@cks-systems/manifest-sdk, @solana/web3.js, etc.) that\n// reference `Buffer` at module-evaluation time don't crash in browser apps\n// that haven't set up their own polyfill.\nimport { Buffer as BufferShim } from \"buffer\";\n\nconst g = globalThis as unknown as { Buffer?: unknown };\nif (typeof g.Buffer === \"undefined\") {\n g.Buffer = BufferShim;\n}\n","import { createStore } from \"zustand/vanilla\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { createContext, useContext } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { MaturityId } from \"@pyefi/sdk\";\n\nexport type WidgetScreen =\n | \"yield-forward-intro\"\n | \"connect-wallet\"\n | \"welcome\"\n | \"redeem-list\"\n | \"select-position\"\n | \"choose-amount\"\n | \"choose-duration\"\n | \"review-quote\"\n | \"complete\"\n | \"redeem-complete\";\n\nexport interface WidgetState {\n screen: WidgetScreen;\n screenHistory: WidgetScreen[];\n\n selectedStakeAccountPubkey: string | null;\n selectedStakeAccountBalance: number;\n selectedValidatorName: string | null;\n selectedValidatorIcon: string | null;\n selectedValidatorVoteAccount: string | null;\n selectedValidatorAltPubkey: string | null;\n depositAmount: string;\n selectedMaturityId: MaturityId | null;\n\n advancedOpen: boolean;\n slippageBps: number;\n\n txStatus: \"idle\" | \"loading\" | \"success\" | \"error\";\n txStep: \"idle\" | \"depositing\" | \"selling\" | \"complete\";\n depositTxSignature: string | null;\n sellTxSignature: string | null;\n txSignature: string | null;\n txError: string | null;\n /** Actual SOL received from RT sell, set after transaction completes */\n sellAmountSol: number | null;\n\n /** Which PT mint is currently being redeemed */\n redeemingMint: string | null;\n /** Error surfaced by the redeem flow */\n redeemError: string | null;\n /** SOL amount received from redeem, set after transaction completes */\n redeemAmountSol: number | null;\n /** Redeem transaction signature */\n redeemTxSignature: string | null;\n}\n\nexport interface WidgetActions {\n navigate(screen: WidgetScreen): void;\n goBack(): void;\n selectStakeAccount(pubkey: string, balance: number, validatorName?: string, validatorIcon?: string, validatorVoteAccount?: string, validatorAltPubkey?: string | null): void;\n setDepositAmount(amount: string): void;\n setSelectedMaturity(id: MaturityId | null): void;\n setAdvancedOpen(open: boolean): void;\n setSlippageBps(bps: number): void;\n setSellAmountSol(amount: number): void;\n setRedeemingMint(mint: string | null): void;\n setRedeemError(error: string | null): void;\n setRedeemAmountSol(amount: number): void;\n setRedeemTxSignature(sig: string): void;\n setTxStep(step: WidgetState[\"txStep\"]): void;\n setTxStatus(\n status: WidgetState[\"txStatus\"],\n signature?: string | null,\n error?: string | null,\n ): void;\n reset(): void;\n resetForWalletChange(): void;\n}\n\nexport type WidgetStoreType = WidgetState & WidgetActions;\n\nconst initialState: WidgetState = {\n screen: \"yield-forward-intro\",\n screenHistory: [],\n\n selectedStakeAccountPubkey: null,\n selectedStakeAccountBalance: 0,\n selectedValidatorName: null,\n selectedValidatorIcon: null,\n selectedValidatorVoteAccount: null,\n selectedValidatorAltPubkey: null,\n depositAmount: \"\",\n selectedMaturityId: null,\n\n advancedOpen: false,\n slippageBps: 100,\n\n txStatus: \"idle\",\n txStep: \"idle\",\n depositTxSignature: null,\n sellTxSignature: null,\n txSignature: null,\n txError: null,\n sellAmountSol: null,\n\n redeemingMint: null,\n redeemError: null,\n redeemAmountSol: null,\n redeemTxSignature: null,\n};\n\nexport function createWidgetStore() {\n return createStore<WidgetStoreType>()(\n immer((set) => ({\n ...initialState,\n\n navigate(screen) {\n set((s) => {\n s.screenHistory.push(s.screen);\n s.screen = screen;\n });\n },\n\n goBack() {\n set((s) => {\n const prev = s.screenHistory.pop();\n if (prev) s.screen = prev;\n if (s.txStatus === \"error\") {\n s.txStatus = \"idle\";\n s.txStep = \"idle\";\n s.txError = null;\n }\n s.redeemError = null;\n });\n },\n\n selectStakeAccount(pubkey, balance, validatorName, validatorIcon, validatorVoteAccount, validatorAltPubkey) {\n set((s) => {\n s.selectedStakeAccountPubkey = pubkey;\n s.selectedStakeAccountBalance = balance;\n s.selectedValidatorName = validatorName ?? null;\n s.selectedValidatorIcon = validatorIcon ?? null;\n s.selectedValidatorVoteAccount = validatorVoteAccount ?? null;\n s.selectedValidatorAltPubkey = validatorAltPubkey ?? null;\n });\n },\n\n setDepositAmount(amount) {\n set((s) => {\n s.depositAmount = amount;\n });\n },\n\n setSelectedMaturity(id) {\n set((s) => {\n s.selectedMaturityId = id;\n });\n },\n\n setAdvancedOpen(open) {\n set((s) => {\n s.advancedOpen = open;\n });\n },\n\n setSlippageBps(bps) {\n set((s) => {\n s.slippageBps = bps;\n });\n },\n\n setSellAmountSol(amount) {\n set((s) => {\n s.sellAmountSol = amount;\n });\n },\n\n setRedeemingMint(mint) {\n set((s) => {\n s.redeemingMint = mint;\n });\n },\n\n setRedeemError(error) {\n set((s) => {\n s.redeemError = error;\n });\n },\n\n setRedeemAmountSol(amount) {\n set((s) => {\n s.redeemAmountSol = amount;\n });\n },\n\n setRedeemTxSignature(sig) {\n set((s) => {\n s.redeemTxSignature = sig;\n });\n },\n\n setTxStep(step) {\n set((s) => {\n s.txStep = step;\n });\n },\n\n setTxStatus(status, signature, error) {\n set((s) => {\n s.txStatus = status;\n s.txSignature = signature ?? null;\n s.txError = error ?? null;\n if (status === \"idle\") {\n s.txStep = \"idle\";\n s.depositTxSignature = null;\n s.sellTxSignature = null;\n }\n });\n },\n\n reset() {\n set(() => ({ ...initialState }));\n },\n\n resetForWalletChange() {\n set((s) => {\n s.selectedStakeAccountPubkey = null;\n s.selectedStakeAccountBalance = 0;\n s.selectedValidatorName = null;\n s.selectedValidatorIcon = null;\n s.selectedValidatorVoteAccount = null;\n s.selectedValidatorAltPubkey = null;\n s.depositAmount = \"\";\n s.selectedMaturityId = null;\n s.txStatus = \"idle\";\n s.txStep = \"idle\";\n s.depositTxSignature = null;\n s.sellTxSignature = null;\n s.txSignature = null;\n s.txError = null;\n s.sellAmountSol = null;\n s.redeemingMint = null;\n s.redeemError = null;\n s.redeemAmountSol = null;\n s.redeemTxSignature = null;\n if (\n s.screen === \"choose-amount\" ||\n s.screen === \"choose-duration\" ||\n s.screen === \"review-quote\" ||\n s.screen === \"complete\" ||\n s.screen === \"redeem-complete\" ||\n s.screen === \"redeem-list\"\n ) {\n s.screen = \"welcome\";\n s.screenHistory = [];\n }\n });\n },\n })),\n );\n}\n\n// Context\ntype WidgetStoreApi = ReturnType<typeof createWidgetStore>;\nexport const WidgetStoreContext = createContext<WidgetStoreApi | null>(null);\n\nexport function useWidgetStore<T>(selector: (state: WidgetStoreType) => T): T {\n const store = useContext(WidgetStoreContext);\n if (!store) {\n throw new Error(\"useWidgetStore must be used within WidgetStoreProvider\");\n }\n return useStore(store, selector);\n}\n","import type React from \"react\";\n\n// ─── Design Tokens ─────────────────────────────────────────────────────────────\nexport const c = {\n bg: \"var(--c-bg)\",\n surface: \"var(--c-surface)\",\n raised: \"var(--c-raised)\",\n lowered: \"var(--c-lowered)\",\n shadow: \"var(--c-shadow)\",\n highlight: \"var(--c-highlight)\",\n primary: \"var(--c-primary)\",\n secondary: \"var(--c-secondary)\",\n muted: \"var(--c-muted)\",\n green: \"#0d9c5e\",\n purple: \"var(--c-brand)\",\n red: \"#D93B3B\",\n};\n\nexport const THEME_CSS = `\n [data-theme] *, [data-theme] *::before, [data-theme] *::after { box-sizing: border-box; }\n :root, [data-theme=\"pye-light\"] {\n --c-bg: #e6e3e0;\n --c-surface: #f1efed;\n --c-raised: #f8f7f6;\n --c-lowered: #eceae8;\n --c-shadow: #e0ddd9;\n --c-highlight: #ffffff;\n --c-primary: #24201c;\n --c-secondary: #5b554c;\n --c-muted: #a09b96;\n --c-brand: #9a4dff;\n --c-brand-hi: #b78eff;\n --c-brand-sh: #6c24c2;\n --c-brand-text: #ffffff;\n }\n [data-theme=\"pye-dark\"] {\n --c-bg: #110F14;\n --c-surface: #1F1C26;\n --c-raised: #2B2735;\n --c-lowered: #110F14;\n --c-shadow: #0A090C;\n --c-highlight: #3C364A;\n --c-primary: #FFFFFF;\n --c-secondary: #D7D4DD;\n --c-muted: rgba(255,255,255,0.4);\n --c-brand: #9a4dff;\n --c-brand-hi: #b78eff;\n --c-brand-sh: #6c24c2;\n --c-brand-text: #ffffff;\n --fill-0: #ffffff;\n }\n [data-theme=\"graphite\"] {\n --c-bg: #1c1c1e;\n --c-surface: #2c2c2e;\n --c-raised: #3a3a3c;\n --c-lowered: #111113;\n --c-shadow: #000000;\n --c-highlight: #48484a;\n --c-primary: #ffffff;\n --c-secondary: #aeaeb2;\n --c-muted: #8e8e93;\n --c-brand: #ffffff;\n --c-brand-hi: rgba(255,255,255,0.2);\n --c-brand-sh: rgba(0,0,0,0.2);\n --c-brand-text: #000000;\n --fill-0: #ffffff;\n }\n /* WalletConnect / Reown AppKit modal stacks at --w3m-z-index (default 999),\n but host pages typically wrap the widget in a scrim around z-index 9999,\n which would cover the QR modal. Bump it above any realistic scrim. */\n w3m-modal, wcm-modal { --w3m-z-index: 2147483647; }\n\n /* ─── Hover rules (replaces JS useState hover state) ─────────────── */\n .pye-hoverable {\n transition: background 160ms cubic-bezier(0.2,0.9,0.2,1),\n transform 160ms cubic-bezier(0.2,0.9,0.2,1),\n box-shadow 160ms cubic-bezier(0.2,0.9,0.2,1) !important;\n }\n .pye-hoverable:hover {\n background: var(--c-highlight) !important;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0,0,0,0.08), inset 0 -1px 0 var(--c-shadow) !important;\n }\n .pye-pill:not(.pye-pill--selected):hover { background: var(--c-highlight) !important; }\n .pye-cta-purple:hover:not(:disabled) { filter: brightness(1.15); }\n .pye-cta-default:hover:not(:disabled) { background: var(--c-highlight) !important; }\n .pye-redeem-btn:hover:not(:disabled) { filter: brightness(1.15); }\n\n /* ─── Press feedback (scale 0.98 on active) ──────────────────────── */\n .pye-cta-purple, .pye-cta-default, .pye-redeem-btn, .pye-pill {\n transition: background 120ms cubic-bezier(0.2,0.9,0.2,1),\n filter 120ms cubic-bezier(0.2,0.9,0.2,1),\n transform 120ms cubic-bezier(0.2,0.9,0.2,1) !important;\n }\n .pye-cta-purple:active:not(:disabled),\n .pye-cta-default:active:not(:disabled),\n .pye-redeem-btn:active:not(:disabled),\n .pye-pill:active {\n transform: scale(0.98);\n }\n @media (prefers-reduced-motion: reduce) {\n .pye-hoverable, .pye-hoverable:hover,\n .pye-cta-purple, .pye-cta-default, .pye-redeem-btn, .pye-pill,\n .pye-cta-purple:active, .pye-cta-default:active, .pye-redeem-btn:active, .pye-pill:active {\n transform: none !important;\n transition: background 120ms, filter 120ms !important;\n }\n }\n\n /* ─── Skeleton shimmer ───────────────────────────────────────── */\n @keyframes pye-skeleton-pulse {\n 0%, 100% { opacity: 0.55; }\n 50% { opacity: 0.85; }\n }\n .pye-skeleton {\n animation: pye-skeleton-pulse 1.4s ease-in-out infinite;\n background: linear-gradient(\n 90deg,\n var(--c-lowered) 0%,\n var(--c-shadow) 50%,\n var(--c-lowered) 100%\n );\n background-size: 200% 100%;\n border-radius: 4px;\n }\n @media (prefers-reduced-motion: reduce) {\n .pye-skeleton { animation: none; opacity: 0.7; }\n }\n\n /* ─── Step transition: subtle translate + fade on mount ──────── */\n @keyframes pye-step-in {\n 0% { transform: translateY(8px); opacity: 0; }\n 100% { transform: translateY(0); opacity: 1; }\n }\n .pye-step-in {\n animation: pye-step-in 280ms cubic-bezier(0.2, 0.9, 0.2, 1) both;\n will-change: transform, opacity;\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n min-height: 0;\n }\n @media (prefers-reduced-motion: reduce) {\n .pye-step-in { animation: none; }\n }\n`;\n\nexport const DISPLAY_FONT = \"'Inter', sans-serif\";\n\nexport const font = (size: number, color = c.primary, weight = 400): React.CSSProperties => ({\n fontFamily: \"'Inter', sans-serif\",\n fontSize: size,\n fontWeight: weight,\n color,\n lineHeight: 1.5,\n margin: 0,\n fontFeatureSettings: \"'zero' 1\",\n});\n\nexport const displayFont = (size: number, color = c.primary, weight = 400): React.CSSProperties => ({\n fontFamily: DISPLAY_FONT,\n fontSize: size,\n fontWeight: weight,\n color,\n lineHeight: 1.2,\n fontFeatureSettings: \"'zero' 1\",\n margin: 0,\n});\n\nexport function brandTextColor(hex: string): string {\n if (!/^#[0-9a-f]{6}$/i.test(hex)) return \"#ffffff\";\n const r = parseInt(hex.slice(1, 3), 16) / 255;\n const g = parseInt(hex.slice(3, 5), 16) / 255;\n const b = parseInt(hex.slice(5, 7), 16) / 255;\n const lin = (v: number) => v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n const lum = 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);\n return lum > 0.179 ? \"#000000\" : \"#ffffff\";\n}\n\n/** Format a SOL amount showing at least 2 significant digits, never scientific notation. */\nexport function formatSolAmount(value: number, minDecimals = 4): string {\n if (value === 0) return \"0\";\n // Find how many decimals needed to show 2 significant digits\n const digits = value < 1 ? Math.max(minDecimals, -Math.floor(Math.log10(Math.abs(value))) + 1) : minDecimals;\n return value.toFixed(digits);\n}\nexport const yieldMap: Record<string, number> = { Q2: 0.43, Q3: 0.85, Q4: 1.28, Q1: 1.70 };\nexport const pointsMap: Record<string, string> = { Q3: \"2x points multiplier\", Q4: \"3x points multiplier\", Q1: \"4x points multiplier\" };\n\n// Feature flags\nexport const POINTS_ENABLED = false;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport { c, font } from \"./design-system\";\nimport solLogo from \"../assets/Sol.png\";\nimport kilnLogo from \"../assets/figment.png\";\nimport phantomLogo from \"../assets/icons/phantom.png\";\nimport backpackLogo from \"../assets/icons/backoack.png\";\nimport metamaskLogo from \"../assets/icons/metamasj.png\";\n\nexport function PyeWordmark() {\n return (\n <svg width=\"33\" height=\"16\" viewBox=\"0 0 33.0001 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ display: \"block\", flexShrink: 0 }}>\n <path d=\"M32.9338 2.19869V4.83327H24.0205V6.46108H32.4867V8.92786H24.0205V10.7068H33.0001V13.3918H20.707V2.19869H32.9338Z\" fill=\"var(--fill-0, #24201C)\"/>\n <path d=\"M23.9528 1.65254C21.8438 0.595304 19.4691 0 16.9568 0C14.4445 0 12.1791 0.567895 10.1067 1.58001C9.97635 1.64385 9.89253 1.77655 9.89253 1.92329V16L24.0043 1.70335C23.9924 1.68196 23.9749 1.66424 23.9528 1.65254Z\" fill=\"url(#pye-radial)\"/>\n <path d=\"M24.0043 1.70338L9.89253 16H14.27C14.4832 16 14.6878 15.9141 14.8386 15.7614L24.0218 6.45812L24.0211 1.76589C24.0211 1.74349 24.0149 1.7221 24.0043 1.70338Z\" fill=\"url(#pye-linear)\"/>\n <path d=\"M0.000119395 2.25921H8.83059C9.15069 2.25921 9.41601 2.26489 9.62589 2.27592C9.83544 2.28728 10.007 2.29832 10.1394 2.30935C10.272 2.32071 10.4152 2.33742 10.57 2.35982C11.0891 2.43837 11.5227 2.56104 11.8705 2.72883C12.2184 2.89663 12.4946 3.13729 12.6988 3.45048C12.9031 3.76368 13.0467 4.16378 13.1295 4.65045C13.2123 5.13712 13.2536 5.73844 13.2536 6.45441C13.2536 7.08114 13.2232 7.61527 13.1625 8.05682C13.1018 8.49903 13.0021 8.87373 12.8642 9.18124C12.7259 9.48909 12.5437 9.73777 12.3174 9.92796C12.091 10.1182 11.8121 10.2749 11.4808 10.3979C11.2927 10.4651 11.0967 10.5183 10.8928 10.5574C10.6882 10.5968 10.4426 10.6272 10.1555 10.6496C9.86811 10.672 9.52029 10.6891 9.11175 10.7001C8.70288 10.7115 8.20062 10.7168 7.60398 10.7168H3.36315V13.452H0.000119395V2.25921ZM7.57164 7.91443C7.95807 7.91443 8.26167 7.91175 8.48277 7.90607C8.70354 7.90072 8.87745 7.89203 9.0045 7.881C9.13122 7.86997 9.22527 7.85326 9.28599 7.83053C9.34671 7.80813 9.4104 7.77471 9.4764 7.72992C9.63084 7.62931 9.73875 7.48959 9.79947 7.31043C9.86019 7.13161 9.89055 6.84616 9.89055 6.45475C9.89055 6.06334 9.84897 5.75582 9.76614 5.5653C9.68331 5.37511 9.53151 5.24107 9.31041 5.16253C9.25497 5.14013 9.20283 5.12342 9.153 5.11205C9.10317 5.10102 9.02298 5.09267 8.91276 5.08698C8.80221 5.0813 8.64216 5.07595 8.43228 5.07027C8.2224 5.06492 7.9353 5.06192 7.57065 5.06192H3.36315V7.91476H7.57131L7.57164 7.91443Z\" fill=\"var(--fill-0, #24201C)\"/>\n <defs>\n <radialGradient id=\"pye-radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(16.9047 16.0398) scale(15.743 15.9459)\">\n <stop stopColor=\"#D59EFF\"/>\n <stop offset=\"0.14\" stopColor=\"#C881FF\"/>\n <stop offset=\"0.44\" stopColor=\"#AF48FF\"/>\n <stop offset=\"0.66\" stopColor=\"#9F24FF\"/>\n <stop offset=\"0.78\" stopColor=\"#9A17FF\"/>\n <stop offset=\"1\" stopColor=\"#662D91\"/>\n </radialGradient>\n <linearGradient id=\"pye-linear\" x1=\"16.9572\" y1=\"16\" x2=\"16.9572\" y2=\"1.73781\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#331647\"/>\n <stop offset=\"0.33\" stopColor=\"#6B2F98\"/>\n <stop offset=\"0.54\" stopColor=\"#8A3CC4\"/>\n <stop offset=\"0.89\" stopColor=\"#AE4CF8\"/>\n <stop offset=\"1\" stopColor=\"#B34FFF\"/>\n </linearGradient>\n </defs>\n </svg>\n );\n}\n\nexport function IconYieldForward() {\n return (\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ color: \"var(--c-brand)\" }}>\n <path d=\"M16.5 0.5H0.5M16.5 18.5H0.5M15.4879 0.5C15.4879 0.5 15.7278 3.24264 14.089 5C12.4503 6.75736 8.49414 9.5 8.49414 9.5C8.49414 9.5 12.4503 12.2426 14.089 14C15.7278 15.7574 15.4879 18.5 15.4879 18.5M1.50623 0.5C1.50623 0.5 1.26635 3.24264 2.9051 5C4.54385 6.75736 8.5 9.5 8.5 9.5C8.5 9.5 4.54385 12.2426 2.9051 14C1.26635 15.7574 1.50623 18.5 1.50623 18.5M11.5 15.5H5.5M10.5 3.5H6.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nexport function IconYieldSwap() {\n return (\n <svg width=\"19\" height=\"17\" viewBox=\"0 0 19 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ color: \"var(--c-brand)\" }}>\n <path d=\"M0.5 13.5H4.5C7.26142 13.5 9.5 12.5 9.5 8.5C9.5 4.5 11.7386 3.5 14.5 3.5H18.5M18.5 3.5L15.5 0.5M18.5 3.5L15.5 6.5M0.5 3.5H4.5C5.2111 3.5 5.88754 3.56631 6.5 3.73309M18.5 13.5H14.5C13.7889 13.5 13.1125 13.4337 12.5 13.2669M18.5 13.5L15.5 16.5M18.5 13.5L15.5 10.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nexport function IconFixedYield() {\n return (\n <svg width=\"19\" height=\"17\" viewBox=\"0 0 19 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={{ color: \"var(--c-brand)\" }}>\n <path d=\"M17 12.5039V11.5C17 10.3954 16.1046 9.5 15 9.5C13.8954 9.5 13 10.3954 13 11.5V12.5039M13.1 16.5H16.9C17.4601 16.5 17.7401 16.5 17.954 16.391C18.1422 16.2951 18.2951 16.1422 18.391 15.954C18.5 15.7401 18.5 15.4601 18.5 14.9V14.1C18.5 13.5399 18.5 13.2599 18.391 13.046C18.2951 12.8578 18.1422 12.7049 17.954 12.609C17.7401 12.5 17.4601 12.5 16.9 12.5H13.1C12.5399 12.5 12.2599 12.5 12.046 12.609C11.8578 12.7049 11.7049 12.8578 11.609 13.046C11.5 13.2599 11.5 13.5399 11.5 14.1V14.9C11.5 15.4601 11.5 15.7401 11.609 15.954C11.7049 16.1422 11.8578 16.2951 12.046 16.391C12.2599 16.5 12.5399 16.5 13.1 16.5Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M18.5 8.5V6.5V3.7C18.5 3.56676 18.5 3.44144 18.4996 3.32333M3.32333 0.500367C3.7383 0.86683 4 1.40285 4 2C4 3.10457 3.10457 4 2 4C1.40285 4 0.86683 3.7383 0.500367 3.32333M3.32333 0.500367C3.44144 0.5 3.56676 0.5 3.7 0.5H15.3C15.4332 0.5 15.5586 0.5 15.6767 0.500367M3.32333 0.500367C2.44852 0.503085 1.96895 0.525931 1.59202 0.717987C1.21569 0.909734 0.909734 1.21569 0.717987 1.59202C0.525931 1.96895 0.503085 2.44852 0.500367 3.32333M0.500367 3.32333C0.5 3.44144 0.5 3.56676 0.5 3.7V9.3C0.5 9.43324 0.5 9.55856 0.500367 9.67667M0.500367 9.67667C0.86683 9.2617 1.40285 9 2 9C3.10457 9 4 9.89543 4 11C4 11.5971 3.7383 12.1332 3.32333 12.4996M0.500367 9.67667C0.503085 10.5515 0.525931 11.031 0.717987 11.408C0.909734 11.7843 1.21569 12.0903 1.59202 12.282C1.96895 12.4741 2.44852 12.4969 3.32333 12.4996M3.32333 12.4996C3.44144 12.5 3.56676 12.5 3.7 12.5H9M18.4996 3.32333C18.1332 3.7383 17.5971 4 17 4C15.8954 4 15 3.10457 15 2C15 1.40285 15.2617 0.86683 15.6767 0.500367M18.4996 3.32333C18.4969 2.44852 18.4741 1.96895 18.282 1.59202C18.0903 1.21569 17.7843 0.909734 17.408 0.717987C17.0311 0.525931 16.5515 0.503085 15.6767 0.500367M11.5 6.5C11.5 7.60457 10.6046 8.5 9.5 8.5C8.39543 8.5 7.5 7.60457 7.5 6.5C7.5 5.39543 8.39543 4.5 9.5 4.5C10.6046 4.5 11.5 5.39543 11.5 6.5Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nexport function ProductIcon({ children }: { children: React.ReactNode }) {\n return (\n <div style={{\n flexShrink: 0, width: 36, height: 36, borderRadius: 8,\n background: \"color-mix(in srgb, var(--c-brand) 20%, transparent)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 rgba(0,0,0,0.2)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n {children}\n </div>\n );\n}\n\nexport function SolIcon({ size = 36 }: { size?: number }) {\n return (\n <img src={solLogo} alt=\"SOL\" style={{\n width: size, height: size, borderRadius: \"50%\", flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }} />\n );\n}\n\nexport function StakeIcon({ size = 36 }: { size?: number }) {\n return (\n <img src={kilnLogo} alt=\"Validator\" style={{\n width: size, height: size, borderRadius: \"50%\", flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }} />\n );\n}\n\nexport function WalletDot({ name, size = 32 }: { name: string; size?: number }) {\n const logos: Record<string, string> = { Phantom: phantomLogo, Backpack: backpackLogo, Metamask: metamaskLogo };\n const bg: Record<string, string> = { Phantom: \"#AB9FF2\", Backpack: \"#E33B3B\", Metamask: \"#F5841F\" };\n const logo = logos[name];\n if (logo) {\n return (\n <img src={logo} alt={name} style={{\n width: size, height: size, borderRadius: 8, flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }} />\n );\n }\n return (\n <div style={{\n width: size, height: size, borderRadius: 8, flexShrink: 0,\n background: bg[name] || \"#ccc\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <span style={font(11, \"#fff\", 700)}>{name[0]}</span>\n </div>\n );\n}\n","import { type ReactNode, type CSSProperties, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { c, font } from \"../design-system\";\nimport { PyeWordmark } from \"../Icons\";\n\nexport function Widget({ children }: { children: ReactNode }) {\n return (\n <div style={{\n width: \"min(420px, calc(100vw - 32px))\", height: 600,\n borderRadius: 10,\n boxShadow: \"0px 4px 8px rgba(0,0,0,0.07)\",\n display: \"flex\", flexDirection: \"column\",\n background: c.surface,\n }}>\n {children}\n </div>\n );\n}\n\nexport function Body({ children, padding = 24, style }: { children: ReactNode; padding?: number; style?: CSSProperties }) {\n return (\n <div style={{\n flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0,\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n ...style,\n }}>\n <div style={{\n flex: 1, display: \"flex\", flexDirection: \"column\", padding, gap: 16,\n minHeight: 0, overflowY: \"auto\",\n }}>\n {children}\n </div>\n <div style={{ height: 0, borderTop: `1px solid ${c.shadow}`, flexShrink: 0 }} />\n </div>\n );\n}\n\nexport function Spacer() { return <div style={{ flex: 1 }} />; }\n\nexport function StepHeader({ step, total, onBack, hideStep, label, tooltipText }: {\n step?: number;\n total?: number;\n onBack?: () => void;\n hideStep?: boolean;\n label?: string;\n tooltipText?: string;\n}) {\n const hasProgress = !hideStep && step != null && total != null && total > 0;\n const pct = hasProgress ? Math.round((step! / total!) * 100) : 0;\n\n const backButton = (\n <button onClick={onBack} style={{\n background: \"none\", border: \"none\", cursor: \"pointer\", padding: 0,\n display: \"flex\", alignItems: \"center\",\n visibility: onBack ? \"visible\" : \"hidden\",\n color: c.secondary, flexShrink: 0,\n }}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ display: \"block\" }}>\n <path d=\"M13 8H3M3 8L7 4M3 8L7 12\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </button>\n );\n\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: 14,\n padding: \"20px 24px\",\n flexShrink: 0,\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: \"10px 10px 0 0\",\n }}>\n {backButton}\n {!hasProgress && label && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <span style={{ ...font(15, c.primary, 500) }}>{label}</span>\n {tooltipText && <Tooltip position=\"below\" text={tooltipText} />}\n </div>\n )}\n {hasProgress && (\n <div style={{ flex: 1, display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <div style={{\n flex: 1, height: 3, background: c.shadow, borderRadius: 2, overflow: \"hidden\",\n }}>\n <div style={{\n height: \"100%\", width: `${pct}%`, background: c.purple, borderRadius: 2,\n transition: \"width 0.25s ease\",\n }} />\n </div>\n <span style={{\n ...font(13, c.secondary), lineHeight: 1, whiteSpace: \"nowrap\",\n fontVariantNumeric: \"tabular-nums\",\n }}>\n {step}/{total}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport function StepTitle({ title, subtitle }: { title: string; subtitle?: string }) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <p style={font(18, c.primary, 500)}>{title}</p>\n {subtitle && <p style={font(14, c.secondary)}>{subtitle}</p>}\n </div>\n );\n}\n\n// Dan's Tooltip — self-contained \"?\" circle trigger with portalled popup to escape overflow clipping\nexport function Tooltip({ text, bg, position = \"above\" }: { text: string; bg?: string; position?: \"above\" | \"below\" }) {\n const fill = bg ?? c.raised;\n const isBelow = position === \"below\";\n const triggerRef = useRef<HTMLDivElement>(null);\n const [coords, setCoords] = useState<{ top: number; left: number } | null>(null);\n\n const handleEnter = () => {\n const el = triggerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setCoords({\n top: isBelow ? rect.bottom + 8 : rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n };\n\n const popup = coords ? createPortal(\n <div style={{\n position: \"fixed\",\n top: isBelow ? coords.top : undefined,\n bottom: isBelow ? undefined : `calc(100vh - ${coords.top}px)`,\n left: coords.left,\n transform: \"translateX(-50%)\",\n width: 210,\n background: fill,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `0 4px 16px rgba(0,0,0,0.15), inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8,\n padding: \"8px 10px\",\n zIndex: 10000,\n pointerEvents: \"none\",\n }}>\n <p style={{ ...font(11, c.secondary), lineHeight: 1.5 }}>{text}</p>\n <div style={{\n position: \"absolute\",\n ...(isBelow\n ? { top: -4 }\n : { bottom: -4 }),\n left: \"50%\",\n transform: \"translateX(-50%) rotate(45deg)\",\n width: 8, height: 8,\n background: fill,\n boxShadow: isBelow ? `-1px -1px 0 ${c.shadow}` : `1px 1px 0 ${c.shadow}`,\n }} />\n </div>,\n document.body,\n ) : null;\n\n return (\n <div\n ref={triggerRef}\n onMouseEnter={handleEnter}\n onMouseLeave={() => setCoords(null)}\n style={{ position: \"relative\", display: \"inline-flex\", flexShrink: 0 }}\n >\n <div\n style={{\n width: 16, height: 16, borderRadius: \"50%\",\n background: fill,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n cursor: \"default\", flexShrink: 0,\n }}\n >\n <span style={{ ...font(9, c.muted), lineHeight: 1, userSelect: \"none\", fontWeight: 500 }}>?</span>\n </div>\n {popup}\n </div>\n );\n}\n\n// Dan's RowGroup — column with 8px gap between items\nexport function RowGroup({ children }: { children: ReactNode }) {\n return <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>{children}</div>;\n}\n\n// Dan's SelectableRow — with inset shadow elevation, inverted on selected\nexport function SelectableRow({ icon, label, sub, amount, selected, onClick }: {\n icon: ReactNode;\n label: string;\n sub: string;\n amount?: string;\n selected?: boolean;\n onClick?: () => void;\n}) {\n const bg = selected ? c.bg : c.raised;\n const shadow = selected\n ? `inset 0 1px 0 ${c.shadow}, inset 0 -1px 0 ${c.highlight}`\n : `inset 0 1px 0 ${c.highlight}, inset 0 -1px 0 ${c.shadow}`;\n return (\n <div\n className={selected ? undefined : \"pye-hoverable\"}\n onClick={onClick}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 12, borderRadius: 8,\n background: bg, boxShadow: shadow,\n cursor: \"pointer\", transition: \"background 0.1s\",\n }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n {icon}\n <div>\n <p style={font(15, c.primary)}>{label}</p>\n <p style={font(14, c.secondary)}>{sub}</p>\n </div>\n </div>\n {amount && (\n <div style={{ textAlign: \"right\" }}>\n <p style={font(15, c.primary)}>{amount}</p>\n <p style={font(14, c.secondary)}>SOL</p>\n </div>\n )}\n </div>\n );\n}\n\n// Dan's RecapRow — non-interactive, raised surface\nexport function RecapRow({ icon, label, sub, amount }: {\n icon: ReactNode;\n label: string;\n sub: string;\n amount?: string;\n}) {\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 12, borderRadius: 8, minHeight: 62,\n background: c.raised,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n {icon}\n <div>\n <p style={font(15, c.primary)}>{label}</p>\n <p style={font(14, c.secondary)}>{sub}</p>\n </div>\n </div>\n {amount && (\n <div style={{ textAlign: \"right\" }}>\n <p style={font(15, c.primary)}>{amount}</p>\n <p style={font(14, c.secondary)}>SOL</p>\n </div>\n )}\n </div>\n );\n}\n\n// Matches ChoiceRow dimensions (min-height 76, same padding/radius) so layout doesn't jump when real rows load.\nexport function SkeletonRow() {\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: 12,\n padding: 16, borderRadius: 10, minHeight: 76,\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <div className=\"pye-skeleton\" style={{ width: 44, height: 44, borderRadius: 10, flexShrink: 0 }} />\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 8, minWidth: 0 }}>\n <div className=\"pye-skeleton\" style={{ width: \"55%\", height: 14 }} />\n <div className=\"pye-skeleton\" style={{ width: \"75%\", height: 12 }} />\n </div>\n </div>\n );\n}\n\n// Dan's CTA — two variants: purple (brand) and default\nexport function CTA({ label, onClick, disabled, purple }: {\n label: string;\n onClick?: () => void;\n disabled?: boolean;\n purple?: boolean;\n}) {\n if (purple) {\n return (\n <button\n className=\"pye-cta-purple\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n style={{\n width: \"100%\", height: 40, borderRadius: 6,\n border: \"none\",\n borderTop: `1px solid var(--c-brand-hi)`,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n background: c.purple,\n ...font(15, \"var(--c-brand-text)\"),\n boxShadow: `inset 0 -1px 0 var(--c-brand-sh)`,\n opacity: disabled ? 0.5 : 1,\n transition: \"filter 0.1s, opacity 0.1s\", flexShrink: 0,\n }}\n >\n {label}\n </button>\n );\n }\n return (\n <button\n className=\"pye-cta-default\"\n onClick={onClick}\n disabled={disabled}\n style={{\n width: \"100%\", height: 40, borderRadius: 6,\n border: \"none\",\n borderTop: `1px solid ${c.highlight}`,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n background: c.raised,\n ...font(15, c.primary),\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n opacity: disabled ? 0.5 : 1,\n transition: \"background 0.1s, opacity 0.1s\", flexShrink: 0,\n }}\n >\n {label}\n </button>\n );\n}\n\nexport function SuccessHeader({ label, onClose }: { label: string; onClose: () => void }) {\n return (\n <div style={{\n height: 48, display: \"flex\", alignItems: \"center\",\n padding: \"0 24px\",\n flexShrink: 0, gap: 8,\n background: c.surface,\n borderRadius: \"10px 10px 0 0\",\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <div style={{\n width: 20, height: 20, borderRadius: \"50%\", flexShrink: 0,\n background: \"rgba(13, 156, 94, 0.15)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5L6.5 12L13 5\" stroke=\"#0d9c5e\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n <p style={{ ...font(15, c.primary), flex: 1 }}>{label}</p>\n <button onClick={onClose} style={{\n background: \"none\", border: \"none\", cursor: \"pointer\",\n padding: 0, width: 28, height: 28, marginRight: -7,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n borderRadius: 8, flexShrink: 0,\n }}>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M1 1L13 13M13 1L1 13\" stroke={c.secondary} strokeWidth=\"1\" strokeLinecap=\"round\"/>\n </svg>\n </button>\n </div>\n );\n}\n\nexport function Footer() {\n return (\n <div style={{\n height: 44, display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n gap: 8, flexShrink: 0,\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: \"0 0 10px 10px\",\n }}>\n <a href=\"https://pye.fi/\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ display: \"flex\", alignItems: \"center\", gap: 8, textDecoration: \"none\" }}>\n <span style={font(15, c.secondary)}>Powered by</span>\n <PyeWordmark />\n </a>\n </div>\n );\n}\n\n// Dan's Alert — single style, raised with inset shadow\nexport function Alert({ children }: { children: ReactNode }) {\n return (\n <div style={{\n background: c.raised, borderRadius: 8, padding: 12,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <p style={font(14, c.secondary)}>{children}</p>\n </div>\n );\n}\n\nexport function InlineError({ message }: { message?: string | null }) {\n return message\n ? <p style={{ ...font(14, c.red), marginTop: 4 }}>{message}</p>\n : null;\n}\n\nexport function Divider() {\n return <div style={{ height: 1, background: c.shadow }} />;\n}\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport {\n useBalanceStore,\n useWalletStore,\n useLockupStore,\n useValidatorStore,\n} from \"@pyefi/sdk/react\";\nimport { getPyeConfig, validatorAvailability } from \"@pyefi/sdk\";\nimport { Body, Spacer, SkeletonRow, StepTitle } from \"../shared/Layout\";\nimport { c, font, formatSolAmount } from \"../design-system\";\n\nconst LAMPORTS_PER_SOL = 1_000_000_000;\n\nfunction ChoiceRow({\n icon,\n label,\n sub,\n subColor,\n onClick,\n disabled,\n}: {\n icon: React.ReactNode;\n label: string;\n sub: string;\n subColor?: string;\n onClick?: () => void;\n disabled?: boolean;\n}) {\n return (\n <div\n className={disabled ? undefined : \"pye-hoverable\"}\n onClick={disabled ? undefined : onClick}\n style={{\n display: \"flex\", alignItems: \"center\", gap: 12,\n padding: 16, borderRadius: 10, minHeight: 76,\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n transition: \"background 0.1s\",\n }}\n >\n {icon}\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 2, minWidth: 0 }}>\n <p style={font(15, c.primary)}>{label}</p>\n <p style={font(14, subColor ?? c.secondary)}>{sub}</p>\n </div>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path d=\"M6 4L10 8L6 12\" stroke={c.muted} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n );\n}\n\nfunction WalletSwitcher({ address, onSwitch }: { address: string; onSwitch: () => void }) {\n const truncated = `${address.slice(0, 4)}...${address.slice(-4)}`;\n return (\n <button\n className=\"pye-hoverable\"\n onClick={onSwitch}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 20, borderRadius: 10, width: \"100%\",\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n border: \"none\", cursor: \"pointer\", transition: \"background 0.1s\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <div style={{\n width: 4, height: 4, borderRadius: 9,\n background: c.green,\n }} />\n <span style={{ ...font(15, c.primary), fontVariantNumeric: \"tabular-nums\" }}>\n {truncated}\n </span>\n </div>\n <span style={font(15, c.secondary)}>Switch</span>\n </button>\n );\n}\n\nfunction IconRedeem() {\n return (\n <div style={{\n flexShrink: 0, width: 44, height: 44, borderRadius: 10,\n background: \"color-mix(in srgb, var(--c-brand) 20%, transparent)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 rgba(0,0,0,0.2)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" style={{ color: \"var(--c-brand)\" }}>\n <circle cx=\"8\" cy=\"8\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"5\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n );\n}\n\nfunction IconSell() {\n return (\n <div style={{\n flexShrink: 0, width: 44, height: 44, borderRadius: 10,\n background: \"color-mix(in srgb, #0d9c5e 20%, transparent)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"0 4px 8px rgba(0,0,0,0.07), inset 0 -1px 0 rgba(0,0,0,0.2)\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" style={{ color: \"#0d9c5e\" }}>\n <rect x=\"3\" y=\"5\" width=\"14\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 9H17\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"13\" cy=\"12.5\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </div>\n );\n}\n\nexport default function WelcomeScreen() {\n const navigate = useWidgetStore((s) => s.navigate);\n const walletBalances = useBalanceStore((s) => s.walletBalances);\n const userStakeAccounts = useBalanceStore((s) => s.userStakeAccounts);\n const userStakeAccountsLoading = useBalanceStore((s) => s.userStakeAccountsLoading);\n const walletPublicKey = useWalletStore((s) => s.publicKey);\n const bonds = useLockupStore((s) => s.bonds);\n const validators = useValidatorStore((s) => s.validators);\n const { disconnect } = useWallet();\n\n // Look up the configured validator's display name (single-validator widgets only).\n const configuredVoteAccount = (() => {\n try { return getPyeConfig().voteAccount; } catch { return undefined; }\n })();\n const validatorName = configuredVoteAccount\n ? validators[configuredVoteAccount]?.name\n : undefined;\n\n // Sum of all ptSOL positions (matured + unmatured) and matured-only subtotal\n const { totalPtSol, maturedPtSol } = useMemo(() => {\n const ptMintToBond = new Map<string, (typeof bonds)[string]>();\n for (const bond of Object.values(bonds)) {\n ptMintToBond.set(bond.pt_mint, bond);\n }\n const now = Date.now() / 1000;\n let total = 0;\n let matured = 0;\n for (const [mint, amount] of Object.entries(walletBalances)) {\n if (amount <= 0) continue;\n const bond = ptMintToBond.get(mint);\n if (!bond) continue;\n const sol = amount / LAMPORTS_PER_SOL;\n total += sol;\n if (now >= bond.maturity_ts) matured += sol;\n }\n return { totalPtSol: total, maturedPtSol: matured };\n }, [walletBalances, bonds]);\n\n // Sum SOL across active stake accounts on widget-allowed validators only —\n // matches the filter applied in SelectPosition so the headline number can't\n // exceed what the user is actually able to sell.\n const activeStakeSol = useMemo(() => {\n let lamports = 0;\n for (const acc of userStakeAccounts) {\n if (acc.state !== \"active\") continue;\n if (!acc.validatorVoteAccount) continue;\n if (validators[acc.validatorVoteAccount]?.widget !== true) continue;\n lamports += acc.lamports;\n }\n return lamports / LAMPORTS_PER_SOL;\n }, [userStakeAccounts, validators]);\n\n // Telemetry: log each active stake whose validator isn't sellable so the\n // Pye team can spot misconfigured / pending validators showing demand.\n const loggedRef = useRef<Set<string>>(new Set());\n useEffect(() => {\n if (Object.keys(validators).length === 0) return; // wait until validators load\n for (const acc of userStakeAccounts) {\n if (acc.state !== \"active\" || !acc.validatorVoteAccount) continue;\n const status = validatorAvailability(acc.validatorVoteAccount, validators);\n if (status.ok) continue;\n const key = `${status.code}:${acc.validatorVoteAccount}`;\n if (loggedRef.current.has(key)) continue;\n loggedRef.current.add(key);\n console.warn(\n `[Pye] ${status.code}: stake ${acc.pubkey} on validator ${acc.validatorVoteAccount} — ${status.reason}`,\n );\n }\n }, [userStakeAccounts, validators]);\n\n const canRedeem = totalPtSol > 0;\n const canSell = activeStakeSol > 0;\n\n // Show skeletons only on the very first fetch when we have nothing to display.\n // Once stake accounts or balances are known (even if zero), render real rows.\n const hasAnyBalance = Object.values(walletBalances).some((v) => v > 0);\n const isInitialLoading =\n userStakeAccountsLoading && userStakeAccounts.length === 0 && !hasAnyBalance;\n\n const redeemSub = !canRedeem\n ? \"No PT positions\"\n : maturedPtSol > 0\n ? `${formatSolAmount(maturedPtSol)} SOL ready to redeem`\n : `${formatSolAmount(totalPtSol)} SOL locked`;\n\n const sellSub = canSell\n ? `${formatSolAmount(activeStakeSol, 2)} SOL across active stake`\n : \"No active stake\";\n\n return (\n <Body style={{ borderRadius: \"10px 10px 0 0\" }}>\n <StepTitle\n title=\"Manage your rewards\"\n subtitle=\"Your stake and positions at a glance. Sell future rewards or redeem SOL that has matured.\"\n />\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 10 }}>\n {isInitialLoading ? (\n <>\n <SkeletonRow />\n <SkeletonRow />\n </>\n ) : (\n <>\n <ChoiceRow\n icon={<IconSell />}\n label=\"Sell future rewards\"\n sub={sellSub}\n disabled={!canSell}\n onClick={() => navigate(\"select-position\")}\n />\n <ChoiceRow\n icon={<IconRedeem />}\n label=\"Redeem\"\n sub={redeemSub}\n subColor={maturedPtSol > 0 ? c.green : undefined}\n disabled={!canRedeem}\n onClick={() => navigate(\"redeem-list\")}\n />\n </>\n )}\n </div>\n\n <Spacer />\n\n {walletPublicKey && (\n <WalletSwitcher\n address={walletPublicKey}\n onSwitch={() => { disconnect().catch(() => {}); }}\n />\n )}\n </Body>\n );\n}\n","import { useEffect } from \"react\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport { useWalletStore } from \"@pyefi/sdk/react\";\nimport { c, font } from \"../design-system\";\nimport { StepTitle, RowGroup, Spacer } from \"../shared/Layout\";\nimport { WalletDot } from \"../Icons\";\n\ninterface WalletRowProps {\n name: string;\n iconUrl?: string;\n connecting: string | null;\n onConnect: (name: string) => void;\n}\n\nfunction WalletRow({ name, iconUrl, connecting, onConnect }: WalletRowProps) {\n const isConnecting = connecting === name;\n const isDimmed = connecting != null && !isConnecting;\n\n return (\n <div\n className={!connecting ? \"pye-hoverable\" : undefined}\n onClick={() => !connecting && onConnect(name)}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n padding: 12, borderRadius: 8,\n background: c.raised,\n boxShadow: `inset 0 1px 0 ${c.highlight}, inset 0 -1px 0 ${c.shadow}`,\n cursor: connecting ? \"default\" : \"pointer\",\n opacity: isDimmed ? 0.4 : 1,\n transition: \"background 0.1s, opacity 0.2s\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n {iconUrl ? (\n <img src={iconUrl} alt=\"\" style={{ width: 32, height: 32, borderRadius: 8, objectFit: \"cover\" }} />\n ) : (\n <WalletDot name={name} size={32} />\n )}\n <p style={font(15, c.primary)}>{name}</p>\n </div>\n <p style={font(14, isConnecting ? c.purple : c.secondary)}>\n {isConnecting ? \"Connecting…\" : \"Detected\"}\n </p>\n </div>\n );\n}\n\nexport default function ConnectWallet() {\n const { wallets, wallet, select, connecting } = useWallet();\n const navigate = useWidgetStore((s) => s.navigate);\n const walletStatus = useWalletStore((s) => s.status);\n\n useEffect(() => {\n if (walletStatus === \"connected\") navigate(\"welcome\");\n }, [walletStatus, navigate]);\n\n const connectingName = connecting ? wallet?.adapter.name ?? null : null;\n\n // Dedupe: wallet-adapter-react merges explicit adapters with Wallet Standard\n // auto-discovery, so some wallets (e.g. MetaMask's Solana snap) show up\n // twice and trip a React duplicate-key warning.\n const uniqueWallets = Array.from(\n new Map(wallets.map((w) => [w.adapter.name, w])).values(),\n );\n const sortedWallets = [...uniqueWallets].sort((a, b) => {\n const aDetected = a.readyState === \"Installed\" ? 0 : 1;\n const bDetected = b.readyState === \"Installed\" ? 0 : 1;\n return aDetected - bDetected;\n });\n\n const handleConnect = (name: string) => {\n const w = wallets.find((w) => w.adapter.name === name);\n if (w) select(w.adapter.name);\n };\n\n return (\n <>\n <StepTitle\n title=\"Connect your wallet\"\n subtitle=\"Connect to see your existing stake and SOL balance.\"\n />\n <RowGroup>\n {sortedWallets.map((w) => (\n <WalletRow\n key={w.adapter.name}\n name={w.adapter.name}\n iconUrl={w.adapter.icon}\n connecting={connectingName}\n onConnect={handleConnect}\n />\n ))}\n </RowGroup>\n <Spacer />\n </>\n );\n}\n","import { useWidgetStore } from \"../../stores/widget-store\";\nimport { useWalletStore } from \"@pyefi/sdk/react\";\nimport { c, font, displayFont } from \"../design-system\";\nimport { CTA } from \"../shared/Layout\";\n\nfunction BenefitRow({ icon, title, body }: { icon: React.ReactNode; title: string; body: string }) {\n return (\n <div style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n padding: \"10px 4px\",\n }}>\n <div style={{\n flexShrink: 0,\n width: 40,\n height: 40,\n borderRadius: 8,\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: c.primary,\n }}>{icon}</div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, minWidth: 0 }}>\n <p style={font(13, c.primary, 600)}>{title}</p>\n <p style={font(12, c.secondary)}>{body}</p>\n </div>\n </div>\n );\n}\n\nconst BoltIcon = (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M13 2 3 14h9l-1 8 10-12h-9l1-8z\"/></svg>\n);\nconst ShieldIcon = (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/></svg>\n);\nconst ClockIcon = (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/></svg>\n);\n\nexport default function YieldForwardIntro() {\n const navigate = useWidgetStore((s) => s.navigate);\n const walletStatus = useWalletStore((s) => s.status);\n const isConnected = walletStatus === \"connected\";\n\n return (\n <>\n <p style={{ ...displayFont(32, c.primary, 600), letterSpacing: \"-0.02em\", lineHeight: 1.3 }}>\n Get your future staking rewards today.\n </p>\n\n <p style={font(15, c.secondary)}>\n The simplest way to access your staking rewards early.\n </p>\n\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <BenefitRow icon={BoltIcon} title=\"Instant Liquidity\" body=\"Get SOL today for future rewards\" />\n <BenefitRow icon={ShieldIcon} title=\"Non-Custodial\" body=\"Your stake stays with your validator\" />\n <BenefitRow icon={ClockIcon} title=\"Flexible Terms\" body=\"Get rewards up to 9 months in advance\" />\n </div>\n\n <div style={{ marginTop: \"auto\" }}>\n <CTA\n label=\"Get Started\"\n onClick={() => navigate(isConnected ? \"select-position\" : \"connect-wallet\")}\n purple\n />\n </div>\n </>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport { useBalanceStore, useValidatorStore } from \"@pyefi/sdk/react\";\nimport { validatorAvailability } from \"@pyefi/sdk\";\n// TODO(SIMD-185): restore getPyeConfig, SolIcon, useWalletStore imports when re-enabling liquid SOL deposit\nimport { StepTitle, RowGroup, Spacer, SelectableRow } from \"../shared/Layout\";\n\nconst LAMPORTS_PER_SOL = 1_000_000_000;\n\nexport default function SelectPosition() {\n const navigate = useWidgetStore((s) => s.navigate);\n const selectStakeAccount = useWidgetStore((s) => s.selectStakeAccount);\n\n const userStakeAccounts = useBalanceStore((s) => s.userStakeAccounts);\n const validators = useValidatorStore((s) => s.validators);\n\n const activeAccounts = userStakeAccounts.filter(\n (a) =>\n a.state === \"active\" &&\n !!a.validatorVoteAccount &&\n validators[a.validatorVoteAccount]?.widget === true,\n );\n\n // Telemetry: log every active stake we silently hide because its validator\n // isn't configured / widget-enabled. Paste-friendly for support.\n const loggedRef = useRef<Set<string>>(new Set());\n useEffect(() => {\n for (const acc of userStakeAccounts) {\n if (acc.state !== \"active\" || !acc.validatorVoteAccount) continue;\n const status = validatorAvailability(acc.validatorVoteAccount, validators);\n if (status.ok) continue;\n const key = `${status.code}:${acc.validatorVoteAccount}`;\n if (loggedRef.current.has(key)) continue;\n loggedRef.current.add(key);\n console.warn(\n `[Pye] ${status.code}: stake ${acc.pubkey} on validator ${acc.validatorVoteAccount} — ${status.reason}`,\n );\n }\n }, [userStakeAccounts, validators]);\n\n const handleSelectStake = (pubkey: string, lamports: number, validatorName?: string, validatorIcon?: string, validatorVoteAccount?: string, validatorAltPubkey?: string | null) => {\n selectStakeAccount(pubkey, lamports / LAMPORTS_PER_SOL, validatorName, validatorIcon, validatorVoteAccount, validatorAltPubkey);\n navigate(\"choose-amount\");\n };\n\n return (\n <>\n <StepTitle\n title=\"Select a position\"\n subtitle=\"We'll sell the future rewards from this position upfront.\"\n />\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n <RowGroup>\n {activeAccounts.map((account) => (\n <SelectableRow\n key={account.pubkey}\n icon={\n <img\n src={account.validatorLogo ?? account.validatorIcon}\n alt={account.validatorName}\n onError={(e) => {\n const img = e.currentTarget;\n if (img.src !== account.validatorIcon) {\n img.src = account.validatorIcon;\n }\n }}\n style={{\n width: 36, height: 36, borderRadius: \"50%\", flexShrink: 0,\n objectFit: \"cover\",\n boxShadow: \"0px 4px 8px 0px rgba(0,0,0,0.07)\",\n }}\n />\n }\n label=\"Staked SOL\"\n sub={account.validatorName || `${account.pubkey.slice(0, 8)}...`}\n amount={(account.lamports / LAMPORTS_PER_SOL).toFixed(4)}\n onClick={() => handleSelectStake(account.pubkey, account.lamports, account.validatorName, account.validatorIcon, account.validatorVoteAccount, account.validatorAltPubkey)}\n />\n ))}\n {/* TODO(SIMD-185): Re-enable liquid SOL deposit once transient account flow is fixed.\n {hasLiquidSol && (\n <SelectableRow\n icon={<SolIcon />}\n label=\"SOL\"\n sub=\"Unstaked\"\n amount={(balanceLamports / LAMPORTS_PER_SOL).toFixed(4)}\n onClick={handleSelectLiquidSol}\n />\n )} */}\n </RowGroup>\n </div>\n </>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport { c, font, formatSolAmount } from \"../design-system\";\nimport { StepTitle, CTA, InlineError, Spacer } from \"../shared/Layout\";\n\nconst SLIDER_CSS = `\n .pye-amount-slider {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 4px;\n border-radius: 999px;\n background: transparent;\n outline: none;\n cursor: pointer;\n }\n .pye-amount-slider::-webkit-slider-runnable-track {\n height: 4px;\n border-radius: 999px;\n background: linear-gradient(to right, var(--c-brand) var(--pye-slider-pct, 0%), var(--c-shadow) var(--pye-slider-pct, 0%));\n }\n .pye-amount-slider::-moz-range-track {\n height: 4px;\n border-radius: 999px;\n background: var(--c-shadow);\n }\n .pye-amount-slider::-moz-range-progress {\n height: 4px;\n border-radius: 999px;\n background: var(--c-brand);\n }\n .pye-amount-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--c-surface);\n border: 2px solid var(--c-brand);\n margin-top: -7px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.15);\n cursor: pointer;\n }\n .pye-amount-slider::-moz-range-thumb {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--c-surface);\n border: 2px solid var(--c-brand);\n box-shadow: 0 2px 4px rgba(0,0,0,0.15);\n cursor: pointer;\n }\n`;\n\nexport default function ChooseAmount() {\n const navigate = useWidgetStore((s) => s.navigate);\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const setDepositAmount = useWidgetStore((s) => s.setDepositAmount);\n const selectedBalance = useWidgetStore((s) => s.selectedStakeAccountBalance);\n const selectedPubkey = useWidgetStore((s) => s.selectedStakeAccountPubkey);\n const validatorName = useWidgetStore((s) => s.selectedValidatorName);\n\n const available = selectedBalance;\n const parsed = parseFloat(depositAmount) || 0;\n const pcts = [0.25, 0.5, 0.75, 1];\n\n // Smoothly ramp the deposit amount from current → target (pill clicks only).\n const rafRef = useRef<number | null>(null);\n useEffect(() => () => { if (rafRef.current != null) cancelAnimationFrame(rafRef.current); }, []);\n\n const truncate4 = (v: number) => (Math.floor(v * 10000) / 10000).toFixed(4);\n\n const rampToAmount = (target: number) => {\n if (rafRef.current != null) cancelAnimationFrame(rafRef.current);\n const start = parsed;\n if (Math.abs(target - start) < 1e-9) return;\n const reduced = window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n if (reduced) { setDepositAmount(truncate4(target)); return; }\n\n const duration = 500;\n const startTime = performance.now();\n const ease = (t: number) => 1 - Math.pow(1 - t, 3); // easeOutCubic\n let lastWritten = \"\";\n const tick = (now: number) => {\n const t = Math.min(1, (now - startTime) / duration);\n const v = start + (target - start) * ease(t);\n const s = truncate4(v);\n if (s !== lastWritten) {\n lastWritten = s;\n setDepositAmount(s);\n }\n if (t < 1) rafRef.current = requestAnimationFrame(tick);\n else rafRef.current = null;\n };\n rafRef.current = requestAnimationFrame(tick);\n };\n\n const isLiquidSol = selectedPubkey === \"liquid-sol\";\n const GAS_RESERVE = 0.01;\n\n let error: string | null = null;\n let warning: string | null = null;\n if (depositAmount && parsed <= 0) error = \"Amount must be greater than 0\";\n if (depositAmount && parsed > available) error = `Maximum available is ${available} SOL`;\n if (!error && isLiquidSol && parsed > 0 && parsed >= available - GAS_RESERVE)\n warning = \"This leaves very little SOL for transaction fees\";\n\n const isValid = !!depositAmount && !error && parsed > 0;\n\n const sliderMax = available > 0 ? available : 1;\n const sliderValue = Math.min(parsed, sliderMax);\n const sliderPct = available > 0 ? Math.min(100, (sliderValue / available) * 100) : 0;\n\n const stepSize = Math.max(0.0001, available / 1000);\n\n const availableLabel = formatSolAmount(available);\n const subtitle = validatorName\n ? `${validatorName} balance detected: ${availableLabel} SOL.`\n : `Balance detected: ${availableLabel} SOL.`;\n\n return (\n <>\n <style>{SLIDER_CSS}</style>\n <StepTitle title=\"How much of your stake do you want to sell rewards for?\" subtitle={subtitle} />\n\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8,\n padding: 16,\n marginTop: 8,\n display: \"flex\", flexDirection: \"column\", gap: 16,\n }}>\n {/* Input */}\n <div style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n background: c.bg, borderRadius: 8, padding: \"8px 16px\",\n borderTop: `1px solid ${error ? c.red : c.shadow}`,\n boxShadow: error\n ? `inset 0 -1px 0 ${c.highlight}, 0 0 0 1px ${c.red}`\n : `inset 0 -1px 0 ${c.highlight}`,\n }}>\n <input\n type=\"number\"\n value={depositAmount}\n onChange={(e) => setDepositAmount(e.target.value)}\n min={0.0001}\n max={available}\n placeholder=\"0\"\n style={{\n background: \"none\", border: \"none\", outline: \"none\",\n ...font(24, c.green, 500),\n width: \"100%\",\n fontVariantNumeric: \"tabular-nums\",\n }}\n />\n <span style={font(15, c.secondary)}>SOL</span>\n </div>\n\n {/* Slider */}\n <input\n type=\"range\"\n className=\"pye-amount-slider\"\n min={0}\n max={sliderMax}\n step={stepSize}\n value={sliderValue}\n onChange={(e) => {\n const s = truncate4(parseFloat(e.target.value));\n if (s !== depositAmount) setDepositAmount(s);\n }}\n style={{ \"--pye-slider-pct\": `${sliderPct}%` } as React.CSSProperties}\n />\n\n {/* % pills */}\n <div style={{ display: \"flex\", gap: 8 }}>\n {pcts.map((p) => (\n <button\n key={p}\n type=\"button\"\n className=\"pye-pill\"\n onClick={() => {\n const target = p === 1\n ? (isLiquidSol ? Math.max(0, available - GAS_RESERVE) : available)\n : available * p;\n rampToAmount(target);\n }}\n style={{\n flex: 1, borderRadius: 8,\n border: \"none\",\n borderTop: `1px solid ${c.highlight}`,\n cursor: \"pointer\",\n background: c.surface,\n ...font(14, c.secondary),\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n padding: \"8px 4px\",\n transition: \"background 0.1s\",\n }}\n >\n {p * 100}%\n </button>\n ))}\n </div>\n </div>\n\n <InlineError message={error ?? \"\"} />\n {!error && warning && <p style={{ ...font(14, c.red), marginTop: 4 }}>{warning}</p>}\n\n <Spacer />\n <CTA\n label=\"Continue\"\n onClick={() => navigate(\"choose-duration\")}\n disabled={!isValid}\n purple\n />\n </>\n );\n}\n","import { useEffect, useRef, useState, type CSSProperties } from \"react\";\n\nconst DIGITS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] as const;\n\ntype OdometerProps = {\n /** Fully-formatted string. Digits roll; all other characters (+, ., space, letters) pass through. */\n value: string;\n /** Typography + color applied to the root span. */\n style?: CSSProperties;\n /** Total roll duration per digit column, ms. */\n duration?: number;\n /** Stagger between adjacent digit columns, ms. */\n stagger?: number;\n};\n\n/** Per-digit rolling counter. Pure CSS transforms, zero deps. */\nexport function Odometer({ value, style, duration = 1200, stagger = 80 }: OdometerProps) {\n const reducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n\n const chars = [...value];\n let digitIdx = 0;\n\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"baseline\",\n fontVariantNumeric: \"lining-nums tabular-nums\",\n whiteSpace: \"pre\",\n ...style,\n }}\n >\n {chars.map((ch, i) => {\n if (!/\\d/.test(ch)) {\n return <span key={i}>{ch}</span>;\n }\n const delay = reducedMotion ? 0 : digitIdx * stagger;\n digitIdx++;\n return (\n <DigitColumn\n key={i}\n digit={Number(ch)}\n delay={delay}\n duration={reducedMotion ? 0 : duration}\n />\n );\n })}\n </span>\n );\n}\n\nfunction DigitColumn({ digit, delay, duration }: { digit: number; delay: number; duration: number }) {\n const [target, setTarget] = useState(0);\n const raf = useRef<number | null>(null);\n\n useEffect(() => {\n raf.current = requestAnimationFrame(() => setTarget(digit));\n return () => {\n if (raf.current != null) cancelAnimationFrame(raf.current);\n };\n }, [digit]);\n\n return (\n <span\n aria-hidden\n style={{\n display: \"inline-block\",\n height: \"1em\",\n lineHeight: 1,\n overflow: \"hidden\",\n verticalAlign: \"baseline\",\n }}\n >\n <span\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n transform: `translateY(-${target}em)`,\n transition:\n duration === 0\n ? \"none\"\n : `transform ${duration}ms cubic-bezier(0.2, 0.9, 0.2, 1) ${delay}ms`,\n willChange: \"transform\",\n }}\n >\n {DIGITS.map((n) => (\n <span key={n} style={{ height: \"1em\", lineHeight: 1 }}>\n {n}\n </span>\n ))}\n </span>\n </span>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConnection } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport {\n maturities,\n type MaturityId,\n type SellYieldCode,\n type SellYieldStatus,\n SELL_YIELD_CODES,\n applyTradingFee,\n canSellYield,\n checkSellLiquidity,\n estimateRtFromStake,\n fetchEpochSyncedNowTs,\n} from \"@pyefi/sdk\";\nimport {\n useMarketStore,\n useValidatorStore,\n useLockupStore,\n} from \"@pyefi/sdk/react\";\nimport { c, font, displayFont, formatSolAmount, POINTS_ENABLED } from \"../design-system\";\nimport { CTA, Tooltip } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\n/** Short user-facing headlines per gate failure code. Reason text from\n * canSellYield is shown beneath this as the detail line. */\nconst GATE_HEADLINE: Record<SellYieldCode, string> = {\n [SELL_YIELD_CODES.VALIDATOR_NOT_CONFIGURED]: \"Validator not supported\",\n [SELL_YIELD_CODES.VALIDATOR_WIDGET_DISABLED]: \"Validator not enabled\",\n [SELL_YIELD_CODES.VALIDATOR_ALT_MISSING]: \"Setup pending\",\n [SELL_YIELD_CODES.BOND_MISSING]: \"Not available\",\n [SELL_YIELD_CODES.BOND_NOT_STANDARD]: \"Setup pending\",\n [SELL_YIELD_CODES.MARKET_MISSING]: \"Market not open\",\n [SELL_YIELD_CODES.LIQUIDITY_INSUFFICIENT]: \"Insufficient liquidity\",\n};\n\n/** Map SDK maturity IDs to Dan's display format */\nconst QUARTER_INFO: Record<MaturityId, { label: string; pts: string | null }> =\n {\n q22026: { label: \"30 Jun 2026\", pts: null },\n q32026: { label: \"30 Sep 2026\", pts: \"2x points\" },\n q42026: { label: \"31 Dec 2026\", pts: \"3x points\" },\n q12026: { label: \"31 Mar 2026\", pts: null },\n };\n\n/** All maturity IDs in chronological order */\nconst ALL_MATURITIES: MaturityId[] = [\"q12026\", \"q22026\", \"q32026\", \"q42026\"];\n\nconst TWO_DAYS_S = 2 * 24 * 60 * 60;\n\n/** Filter out maturities within 2 days of maturity date */\nfunction getAvailableMaturities(): MaturityId[] {\n const nowS = Date.now() / 1000;\n return ALL_MATURITIES.filter((id) => {\n const ts = Number(maturities[id].maturity_timestamp);\n return ts - nowS > TWO_DAYS_S;\n });\n}\n\nexport default function ChooseDuration() {\n const { connection } = useConnection();\n const navigate = useWidgetStore((s) => s.navigate);\n const selectedMaturityId = useWidgetStore((s) => s.selectedMaturityId);\n const setSelectedMaturity = useWidgetStore((s) => s.setSelectedMaturity);\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const selectedValidatorVoteAccount = useWidgetStore((s) => s.selectedValidatorVoteAccount);\n const markets = useMarketStore((s) => s.markets);\n const validators = useValidatorStore((s) => s.validators);\n const bonds = useLockupStore((s) => s.bonds);\n\n // Epoch-synced wall-clock seconds — matches the on-chain \"now\" used by the\n // Bonds program when computing RT issuance, so our preview number stays in\n // sync with the real swap amount.\n const [nowTs, setNowTs] = useState<number | null>(null);\n useEffect(() => {\n fetchEpochSyncedNowTs(connection).then(setNowTs).catch(() => {\n setNowTs(Date.now() / 1000);\n });\n }, [connection]);\n\n // Only show maturities that have a canonical RT market for the selected\n // validator. Without a market we have no real price to quote against, so\n // hiding the row is more honest than showing a fabricated fallback rate.\n const availableMaturities = useMemo(() => {\n const timeFiltered = getAvailableMaturities();\n if (!selectedValidatorVoteAccount) return [];\n return timeFiltered.filter((matId) =>\n Boolean(markets[`${selectedValidatorVoteAccount}-${matId}-RT`]),\n );\n }, [selectedValidatorVoteAccount, markets]);\n\n // Default to first available duration if none selected, or clear if the\n // current selection is no longer available (e.g. markets refreshed).\n useEffect(() => {\n if (availableMaturities.length === 0) {\n if (selectedMaturityId) setSelectedMaturity(null);\n return;\n }\n if (!selectedMaturityId || !availableMaturities.includes(selectedMaturityId)) {\n setSelectedMaturity(availableMaturities[0]);\n }\n }, [selectedMaturityId, setSelectedMaturity, availableMaturities]);\n\n const parsedAmount = parseFloat(depositAmount) || 0;\n // Use epoch-synced now when available; fall back to wall-clock for the\n // first render before the RPC call resolves.\n const effectiveNowTs = nowTs ?? Date.now() / 1000;\n\n // Build display quarters from available maturities. canSellYield is the\n // single source of truth for gating — it covers alt_pubkey, standard, and\n // liquidity. We re-compute the price from the same liquidity check when\n // the status is ok, so the displayed yield matches the gate decision.\n const quarters = availableMaturities.map((matId) => {\n const info = QUARTER_INFO[matId] ?? {\n label: maturities[matId]?.human_readable ?? matId,\n pts: null,\n };\n\n const maturity = maturities[matId];\n const status: SellYieldStatus = selectedValidatorVoteAccount\n ? canSellYield({\n validatorVoteAccount: selectedValidatorVoteAccount,\n maturityId: matId,\n amountSol: parsedAmount,\n nowTs: effectiveNowTs,\n validators,\n bonds,\n markets,\n })\n : {\n ok: false,\n code: SELL_YIELD_CODES.VALIDATOR_NOT_CONFIGURED,\n reason: \"No validator selected.\",\n };\n\n let grossYield = 0;\n if (status.ok) {\n const rtMarket = markets[`${selectedValidatorVoteAccount}-${matId}-RT`];\n const estimatedRt = estimateRtFromStake({\n amountSol: parsedAmount,\n maturity,\n nowTs: effectiveNowTs,\n });\n const liq = rtMarket?.bids?.length\n ? checkSellLiquidity(rtMarket.bids, estimatedRt)\n : null;\n grossYield = (liq?.expectedFillPrice ?? 0) * estimatedRt;\n }\n const netYield = applyTradingFee(grossYield);\n const daysToMaturity = Math.max(\n 0,\n Math.ceil((Number(maturity.maturity_timestamp) - effectiveNowTs) / 86400),\n );\n\n return { matId, ...info, status, grossYield, netYield, daysToMaturity };\n });\n\n // Telemetry: log each (validator, maturity, code) gate failure once per\n // session — useful for support and for spotting validators that have demand\n // but aren't yet fully set up.\n const loggedRef = useRef<Set<string>>(new Set());\n useEffect(() => {\n if (!selectedValidatorVoteAccount) return;\n for (const q of quarters) {\n if (q.status.ok) continue;\n const key = `${q.status.code}:${selectedValidatorVoteAccount}:${q.matId}`;\n if (loggedRef.current.has(key)) continue;\n loggedRef.current.add(key);\n console.warn(\n `[Pye] ${q.status.code}: validator ${selectedValidatorVoteAccount}, maturity ${q.matId} — ${q.status.reason}`,\n );\n }\n }, [quarters, selectedValidatorVoteAccount]);\n\n const sel = quarters.find((q) => q.matId === selectedMaturityId);\n\n return (\n <>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <p style={font(18, c.primary, 500)}>Choose a staking duration</p>\n <Tooltip position=\"below\" text=\"Lock your stake until the chosen date. All staking rewards for the period are sold to you upfront today. Your full SOL stake is returned at maturity.\" />\n </div>\n <p style={font(14, c.secondary)}>\n All rewards for the period are paid to you today. Your stake is\n returned in full at the end.\n </p>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {quarters.length === 0 && (\n <div\n style={{\n background: c.lowered,\n borderRadius: 8,\n padding: 12,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n }}\n >\n <p style={font(14, c.primary, 500)}>No durations available</p>\n <p style={font(13, c.secondary)}>\n There aren't any active markets for this validator yet. Check\n back soon.\n </p>\n </div>\n )}\n\n {/* Duration rows — full width, one per row */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n {quarters.map((q) => {\n const isSelected = selectedMaturityId === q.matId;\n const gateCode = q.status.ok ? null : q.status.code;\n const isGated = gateCode !== null;\n const labelColor = isGated\n ? c.muted\n : isSelected ? c.primary : c.secondary;\n return (\n <div\n key={q.matId}\n className={isSelected ? \"pye-pill pye-pill--selected\" : \"pye-pill\"}\n onClick={() => setSelectedMaturity(q.matId as MaturityId)}\n style={{\n width: \"100%\",\n minHeight: 48,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"10px 16px\",\n borderRadius: 8,\n cursor: \"pointer\",\n background: isSelected ? c.bg : c.raised,\n borderTop: `1px solid ${isSelected ? c.shadow : c.highlight}`,\n boxShadow: isSelected\n ? `inset 0 -1px 0 ${c.highlight}`\n : `inset 0 -1px 0 ${c.shadow}`,\n transition: \"background 0.1s\",\n opacity: isGated ? 0.7 : 1,\n }}\n >\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n <span style={font(15, labelColor, isSelected ? 500 : 400)}>\n {q.label}\n </span>\n <span style={font(12, c.muted)}>\n {q.daysToMaturity} {q.daysToMaturity === 1 ? \"day\" : \"days\"}\n </span>\n </div>\n {gateCode ? (\n <span\n style={{\n ...font(12, c.muted),\n padding: \"2px 8px\",\n borderRadius: 4,\n background: c.lowered,\n flexShrink: 0,\n }}\n >\n {GATE_HEADLINE[gateCode] ?? \"Not available\"}\n </span>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-end\", gap: 2 }}>\n <span\n style={{\n ...font(15, c.green, 500),\n fontVariantNumeric: \"lining-nums tabular-nums\",\n }}\n >\n {q.netYield < 0.0001\n ? \"< 0.0001 SOL\"\n : `+${formatSolAmount(q.netYield, 3)} SOL`}\n </span>\n {POINTS_ENABLED && q.pts && (\n <span style={font(12, c.purple)}>{q.pts}</span>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Yield card */}\n {sel && (\n <div\n style={{\n background: c.lowered,\n borderRadius: 8,\n padding: 12,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n }}\n >\n <p style={font(14, c.secondary)}>You receive today</p>\n {sel.status.ok ? (\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 8 }}>\n {sel.netYield < 0.0001 ? (\n <p\n style={{\n ...displayFont(32, c.green),\n lineHeight: 1.2,\n fontVariantNumeric: \"lining-nums tabular-nums\",\n }}\n >\n < 0.0001 SOL\n </p>\n ) : (\n <Odometer\n value={`+${formatSolAmount(sel.netYield, 3)} SOL`}\n style={{ ...displayFont(32, c.green), lineHeight: 1.2 }}\n />\n )}\n </div>\n ) : (\n <>\n <p style={{ ...displayFont(22, c.muted), lineHeight: 1.2 }}>\n {GATE_HEADLINE[sel.status.code] ?? \"Not available\"}\n </p>\n <p style={font(12, c.muted)}>{sel.status.reason}</p>\n <p style={{ ...font(10, c.muted), letterSpacing: \"0.02em\", marginTop: 4 }}>\n {sel.status.code}\n </p>\n </>\n )}\n </div>\n )}\n\n </div>\n\n <CTA\n label=\"Review\"\n onClick={() => navigate(\"review-quote\")}\n disabled={!selectedMaturityId || !sel?.status.ok}\n purple\n />\n </>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport {\n maturities,\n canSellYield,\n executeStakeDeposit,\n executeRtSell,\n executeDepositAndSell,\n checkSellLiquidity,\n fetchBalances,\n fetchUserStakeAccounts,\n writeCachedWalletBalances,\n PYE_TRADING_FEE_BPS,\n applyTradingFee,\n estimateRtFromStake,\n fetchEpochSyncedNowTs,\n type CanonicalMaturity,\n} from \"@pyefi/sdk\";\nimport {\n useMarketStore,\n useBalanceStore,\n useWalletStore,\n useLockupStore,\n useValidatorStore,\n} from \"@pyefi/sdk/react\";\nimport { c, font, pointsMap, formatSolAmount, POINTS_ENABLED } from \"../design-system\";\nimport { StepTitle, CTA, Tooltip, Spacer } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\n/* ═══════════════════════════════════════════════════════════════════════════\n DiscountSlider — Dan's exact pointer-capture slider\n ═══════════════════════════════════════════════════════════════════════════ */\n\nfunction DiscountSlider({\n value,\n onChange,\n}: {\n value: number; // 0-5 float\n onChange: (v: number) => void;\n}) {\n const trackRef = useRef<HTMLDivElement>(null);\n const MIN = 0, MAX = 5;\n const pct = ((value - MIN) / (MAX - MIN)) * 100;\n\n const computeValue = (clientX: number): number => {\n const rect = trackRef.current!.getBoundingClientRect();\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width));\n const raw = MIN + (x / rect.width) * (MAX - MIN);\n return Math.round(raw * 100) / 100;\n };\n\n const handlePointerDown = (e: React.PointerEvent) => {\n e.preventDefault();\n trackRef.current!.setPointerCapture(e.pointerId);\n onChange(computeValue(e.clientX));\n };\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (e.buttons === 0) return;\n onChange(computeValue(e.clientX));\n };\n\n const filledColor = value > 3 ? \"#D93B3B\" : \"#0d9c5e\";\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <div\n ref={trackRef}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n style={{ position: \"relative\", height: 12, display: \"flex\", alignItems: \"center\", cursor: \"pointer\", userSelect: \"none\" }}\n >\n <div style={{\n position: \"absolute\", left: 0, width: `${pct}%`, height: 8,\n background: filledColor,\n borderRadius: pct > 98 ? \"999px\" : \"999px 0 0 999px\",\n borderTop: \"1px solid rgba(255,255,255,0.3)\",\n boxShadow: \"inset 0 -1px 0 rgba(0,0,0,0.2)\",\n minWidth: pct > 0 ? 4 : 0,\n }} />\n <div style={{\n position: \"absolute\", left: `${pct}%`, right: 0, height: 8,\n background: c.bg,\n borderRadius: pct < 2 ? \"999px\" : \"0 999px 999px 0\",\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n }} />\n <div style={{\n position: \"absolute\", left: `calc(${pct}% - 8px)`,\n width: 16, height: 16, borderRadius: \"50%\",\n background: \"#fdfcfc\",\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n zIndex: 1, flexShrink: 0,\n }} />\n </div>\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n {[\"0%\", \"1%\", \"2%\", \"3%\", \"4%\", \"5%\"].map((l) => (\n <span key={l} style={{\n ...font(14, c.secondary),\n textTransform: \"uppercase\" as const, letterSpacing: \"0.04em\",\n width: 24, textAlign: l === \"0%\" ? \"left\" : l === \"5%\" ? \"right\" : \"center\",\n }}>{l}</span>\n ))}\n </div>\n </div>\n );\n}\n\nexport default function ReviewQuote() {\n const { connection } = useConnection();\n const wallet = useWallet();\n\n // Epoch-synced wall-clock — matches the on-chain clock the Bonds program\n // uses when computing RT issuance, so the swap we build matches what the\n // user will actually hold after deposit.\n const [nowTs, setNowTs] = useState<number | null>(null);\n useEffect(() => {\n fetchEpochSyncedNowTs(connection).then(setNowTs).catch(() => {\n setNowTs(Date.now() / 1000);\n });\n }, [connection]);\n\n const navigate = useWidgetStore((s) => s.navigate);\n const txStatus = useWidgetStore((s) => s.txStatus);\n const txStep = useWidgetStore((s) => s.txStep);\n const txError = useWidgetStore((s) => s.txError);\n const setTxStatus = useWidgetStore((s) => s.setTxStatus);\n const setTxStep = useWidgetStore((s) => s.setTxStep);\n const setSellAmountSol = useWidgetStore((s) => s.setSellAmountSol);\n const advancedOpen = useWidgetStore((s) => s.advancedOpen);\n const setAdvancedOpen = useWidgetStore((s) => s.setAdvancedOpen);\n const slippageBps = useWidgetStore((s) => s.slippageBps);\n const setSlippageBps = useWidgetStore((s) => s.setSlippageBps);\n\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const selectedMaturityId = useWidgetStore((s) => s.selectedMaturityId);\n const selectedStakeAccountPubkey = useWidgetStore((s) => s.selectedStakeAccountPubkey);\n const selectedStakeAccountBalance = useWidgetStore((s) => s.selectedStakeAccountBalance);\n const selectedValidatorAltPubkey = useWidgetStore((s) => s.selectedValidatorAltPubkey);\n\n const markets = useMarketStore((s) => s.markets);\n const bonds = useLockupStore((s) => s.bonds);\n const validators = useValidatorStore((s) => s.validators);\n const userStakeAccounts = useBalanceStore((s) => s.userStakeAccounts);\n const setWalletBalances = useBalanceStore((s) => s.setWalletBalances);\n const setUserStakeAccounts = useBalanceStore((s) => s.setUserStakeAccounts);\n const setBalanceLamports = useWalletStore((s) => s.setBalanceLamports);\n\n const parsedAmount = parseFloat(depositAmount) || 0;\n const maturity = selectedMaturityId ? maturities[selectedMaturityId] : null;\n const matures = maturity?.human_readable ?? \"Sep 30, 2026\";\n\n // Find points label from maturity month\n const monthToQuarter: Record<string, string> = { JUN: \"Q3\", SEP: \"Q4\", DEC: \"Q1\", MAR: \"Q2\" };\n const quarterId = maturity ? (monthToQuarter[maturity.month] ?? null) : null;\n const points = POINTS_ENABLED && quarterId ? (pointsMap[quarterId] ?? null) : null;\n\n // Find the validator vote account from stake accounts\n const selectedStakeAccount = selectedStakeAccountPubkey !== \"liquid-sol\"\n ? userStakeAccounts.find((a) => a.pubkey === selectedStakeAccountPubkey)\n : null;\n\n // Resolve the bond for the stake account's validator at the chosen maturity.\n // In the new schema, market keys are vote_account-scoped, so we use the\n // stake account's vote_account directly to build the key.\n const stakeVoteAccount = selectedStakeAccount?.validatorVoteAccount;\n const stakeBond = stakeVoteAccount && selectedMaturityId\n ? bonds[`${stakeVoteAccount}:${selectedMaturityId}`] ?? null\n : null;\n\n // RT market data — must match the stake account's validator (each validator has its own RT token)\n const rtMarketKey = selectedMaturityId\n ? (stakeBond && stakeVoteAccount\n ? `${stakeVoteAccount}-${selectedMaturityId}-RT`\n : Object.keys(markets).find((k) => k.endsWith(`-${selectedMaturityId}-RT`)))\n : null;\n const rtMarket = rtMarketKey ? markets[rtMarketKey] ?? null : null;\n\n // Bonds program mints RT proportional to remaining issuance window, not\n // 1:1 with the deposit. Use the same formula the on-chain program does\n // so the swap we build matches the user's actual post-deposit RT balance.\n // PT, separately, *is* 1:1 with the stake — keep `parsedAmount` for PT rows.\n const effectiveNowTs = nowTs ?? Date.now() / 1000;\n const rtAmount = maturity\n ? estimateRtFromStake({\n amountSol: parsedAmount,\n maturity,\n nowTs: effectiveNowTs,\n })\n : 0;\n\n // Real liquidity check against RT order book bids\n const liquidityCheck = rtMarket?.bids?.length\n ? checkSellLiquidity(rtMarket.bids, rtAmount)\n : null;\n\n const hasLiquidity = liquidityCheck?.isSufficientLiquidity ?? false;\n const orderBookSlippageBps = liquidityCheck?.slippageBps ?? 0;\n\n // Quote: expected gross SOL from selling RT on Manifest. When the book can't\n // fill (no liquidity), the quote is zero and the Sign CTA is already disabled\n // by `canSign` — better than showing a fabricated fallback price.\n const grossSellAmount =\n liquidityCheck?.expectedFillPrice != null\n ? liquidityCheck.expectedFillPrice * rtAmount\n : 0;\n\n // Net-of-fee SOL shown to the user and paid out after treasury transfer\n const sellAmount = applyTradingFee(grossSellAmount);\n const feeAmountSol = grossSellAmount - sellAmount;\n const feePct = (PYE_TRADING_FEE_BPS / 100).toFixed(2);\n\n // Slippage tolerance from slider (0-5 float)\n const slippage = slippageBps / 100;\n\n const isLoading = txStatus === \"loading\";\n const selectedStakeStillOwned =\n selectedStakeAccountPubkey === \"liquid-sol\" ||\n (selectedStakeAccountPubkey !== null &&\n userStakeAccounts.some((a) => a.pubkey === selectedStakeAccountPubkey));\n const canSign =\n !!selectedStakeAccountPubkey &&\n !!selectedMaturityId &&\n !isLoading &&\n hasLiquidity &&\n selectedStakeStillOwned;\n\n // Resolve bond from the stake account's actual validator (not from market key)\n // Fall back to market-key-based resolution for liquid SOL (no stake account)\n const marketBondParams = (() => {\n if (stakeBond) return null;\n const fallbackMarketKey = rtMarketKey\n ?? (selectedMaturityId ? Object.keys(markets).find((k) => k.endsWith(`-${selectedMaturityId}-PT`)) : null);\n if (!fallbackMarketKey) return null;\n // Market key format: `${voteAccount}-${canonicalLabel}-${PT|RT}`\n const parts = fallbackMarketKey.split(\"-\");\n parts.pop(); // tokenType\n const canonicalLabel = parts.pop() as CanonicalMaturity;\n const voteAccount = parts.join(\"-\");\n const bond = bonds[`${voteAccount}:${canonicalLabel}`];\n if (!bond) return null;\n return {\n bondPubkey: bond.pubkey,\n principalTokenMint: bond.pt_mint,\n yieldTokenMint: bond.rt_mint,\n voteAccount,\n };\n })();\n\n const bondParams = stakeBond\n ? {\n bondPubkey: stakeBond.pubkey,\n principalTokenMint: stakeBond.pt_mint,\n yieldTokenMint: stakeBond.rt_mint,\n voteAccount: stakeVoteAccount!,\n }\n : marketBondParams;\n\n const handleSign = useCallback(async () => {\n if (!selectedStakeAccountPubkey || !selectedMaturityId) return;\n if (!bondParams) throw new Error(\"Could not resolve bond data for this market\");\n if (!rtMarket) throw new Error(\"No RT market found for this maturity\");\n if (!maturity) throw new Error(\"No maturity selected\");\n\n // Safety net — ChooseDuration already gates this, but re-check at sign time\n // so a stale or mid-flight state can't slip a doomed swap through.\n const gate = canSellYield({\n validatorVoteAccount: bondParams.voteAccount,\n maturityId: selectedMaturityId,\n amountSol: parsedAmount,\n nowTs: nowTs ?? Date.now() / 1000,\n validators,\n bonds,\n markets,\n });\n if (!gate.ok) {\n console.error(\n `[Pye] ${gate.code}: validator ${bondParams.voteAccount}, maturity ${selectedMaturityId} — ${gate.reason}`,\n );\n throw new Error(`${gate.reason} (${gate.code})`);\n }\n\n setTxStatus(\"loading\");\n setTxStep(\"depositing\");\n\n // Swap-level minReceive is measured against the gross swap output;\n // the fixed taker fee is transferred from that wSOL post-swap.\n const minReceive = Math.max(grossSellAmount * (1 - slippage / 100), 0);\n\n // Refresh the epoch-synced clock right before signing — the mount-time\n // value can be minutes stale by the time the user clicks, and the chain\n // clock keeps advancing. An out-of-date nowTs overshoots the actual\n // mint by ~1 atom per second of drift, which fails the Manifest swap.\n const freshNowTs = await fetchEpochSyncedNowTs(connection).catch(\n () => Date.now() / 1000,\n );\n const freshRtAmount = estimateRtFromStake({\n amountSol: parsedAmount,\n maturity,\n nowTs: freshNowTs,\n });\n\n try {\n if (selectedStakeAccountPubkey === \"liquid-sol\") {\n // Liquid SOL path — kept as two transactions (SIMD-185: disabled in UI)\n await executeStakeDeposit({\n connection,\n wallet,\n bondPubkey: bondParams.bondPubkey,\n principalTokenMint: bondParams.principalTokenMint,\n yieldTokenMint: bondParams.yieldTokenMint,\n validatorVoteAccount: bondParams.voteAccount,\n amountSol: parsedAmount,\n });\n setTxStep(\"selling\");\n const rtSellResult = await executeRtSell({\n connection,\n wallet,\n marketPubkey: rtMarket.marketPubkey,\n rtMint: bondParams.yieldTokenMint,\n orderSizeTokens: freshRtAmount,\n minReceiveTokens: minReceive,\n expectedSolOut: grossSellAmount,\n });\n setTxStep(\"complete\");\n setSellAmountSol(sellAmount);\n setTxStatus(\"success\", rtSellResult.signature);\n navigate(\"complete\");\n } else {\n // Stake account path — single bundled v0 transaction.\n // ALT presence is guaranteed by the canSellYield safety net above;\n // the non-null assertion narrows the widget-store union for TS.\n const altPubkey = selectedValidatorAltPubkey!;\n const result = await executeDepositAndSell({\n connection,\n wallet,\n bondPubkey: bondParams.bondPubkey,\n principalTokenMint: bondParams.principalTokenMint,\n yieldTokenMint: bondParams.yieldTokenMint,\n validatorVoteAccount: bondParams.voteAccount,\n stakeAccountPubkey: selectedStakeAccountPubkey,\n amountSol: parsedAmount,\n rtAmountToSell: freshRtAmount,\n stakeBalanceSol: selectedStakeAccountBalance,\n marketPubkey: rtMarket.marketPubkey,\n minReceiveTokens: minReceive,\n expectedSolOut: grossSellAmount,\n altPubkey,\n });\n setTxStep(\"complete\");\n setSellAmountSol(sellAmount);\n setTxStatus(\"success\", result.signature);\n navigate(\"complete\");\n }\n } catch (err) {\n setTxStatus(\n \"error\",\n null,\n err instanceof Error ? err.message : \"Transaction failed\",\n );\n } finally {\n const owner = wallet.publicKey!;\n connection.getBalance(owner, \"confirmed\").then(setBalanceLamports).catch(() => {});\n fetchBalances(connection, owner)\n .then((bals) => {\n setWalletBalances(bals);\n writeCachedWalletBalances(owner.toBase58(), bals);\n })\n .catch(() => {});\n fetchUserStakeAccounts(connection, owner).then(setUserStakeAccounts).catch(() => {});\n }\n }, [\n rtMarket,\n bondParams,\n stakeBond,\n bonds,\n validators,\n markets,\n nowTs,\n selectedStakeAccount,\n selectedStakeAccountPubkey,\n selectedMaturityId,\n selectedValidatorAltPubkey,\n connection,\n wallet,\n parsedAmount,\n maturity,\n selectedStakeAccountBalance,\n sellAmount,\n grossSellAmount,\n slippage,\n setTxStatus,\n setTxStep,\n setSellAmountSol,\n navigate,\n setBalanceLamports,\n setWalletBalances,\n setUserStakeAccounts,\n ]);\n\n return (\n <>\n <StepTitle title=\"Approve in your wallet\" />\n\n {/* Quote — stacked sections */}\n {(() => {\n const rows: Array<{ key: string; left: React.ReactNode; right: React.ReactNode }> = [\n {\n key: \"receive\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>You receive today</p>\n <Tooltip text=\"Estimated upfront payout based on current market rates, net of fees. The final amount is confirmed when your order fills on the Pye orderbook.\" />\n </div>\n ),\n right: (\n <Odometer\n value={`+${formatSolAmount(sellAmount)} SOL`}\n style={{ ...font(15, c.green, 500), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"stake\",\n left: <p style={font(14, c.secondary)}>Stake amount</p>,\n right: (\n <Odometer\n value={`${parsedAmount} SOL`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"pt\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>PTs you'll receive</p>\n <Tooltip text=\"Your PT is a token receipt for your staked SOL. At the redeem date, redeem it 1:1 for your full stake.\" />\n </div>\n ),\n right: (\n <Odometer\n value={`${parsedAmount} PT`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"redeem\",\n left: <p style={font(14, c.secondary)}>Redeem date</p>,\n right: (\n <p style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0 }}>\n {matures}\n </p>\n ),\n },\n {\n key: \"fee\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>Pye protocol fee ({feePct}%)</p>\n <Tooltip text={`A ${feePct}% fee is taken from the SOL proceeds of your sale and routed to the Pye treasury.`} />\n </div>\n ),\n right: (\n <Odometer\n value={`−${formatSolAmount(feeAmountSol)} SOL`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n ...(points ? [{\n key: \"points\",\n left: <p style={font(14, c.secondary)}>Points multiplier</p>,\n right: (\n <p style={{ ...font(14, c.purple), whiteSpace: \"nowrap\", flexShrink: 0 }}>\n {points}\n </p>\n ),\n }] : []),\n ];\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 0 }}>\n {rows.map((row, i) => {\n const isFirst = i === 0;\n const isLast = i === rows.length - 1;\n const radius = isFirst && isLast\n ? 8\n : isFirst\n ? \"8px 8px 0 0\"\n : isLast\n ? \"0 0 8px 8px\"\n : 0;\n return (\n <div\n key={row.key}\n style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: radius,\n padding: \"12px 12px\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n {row.left}\n {row.right}\n </div>\n );\n })}\n </div>\n );\n })()}\n\n {/* Advanced toggle */}\n <div\n onClick={() => setAdvancedOpen(!advancedOpen)}\n style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n cursor: \"pointer\", padding: \"2px 0\", userSelect: \"none\",\n }}\n >\n <span style={font(14, c.secondary)}>Advanced</span>\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" style={{\n transform: advancedOpen ? \"rotate(180deg)\" : \"none\", transition: \"transform 0.2s\",\n }}>\n <path d=\"M1 1L5 5L9 1\" stroke={c.secondary} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n\n {/* Advanced panel — discount rate (grid-row height transition) */}\n <div style={{\n display: \"grid\",\n gridTemplateRows: advancedOpen ? \"1fr\" : \"0fr\",\n transition: \"grid-template-rows 280ms cubic-bezier(0.2,0.9,0.2,1)\",\n }}>\n <div style={{\n overflow: \"hidden\",\n opacity: advancedOpen ? 1 : 0,\n transition: \"opacity 200ms cubic-bezier(0.2,0.9,0.2,1)\",\n }}>\n <div style={{\n background: c.raised, borderRadius: 8, padding: 12,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n display: \"flex\", flexDirection: \"column\", gap: 16,\n }}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\n <span style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <span style={font(14, c.secondary)}>Max slippage tolerance</span>\n <Tooltip bg={c.highlight} text=\"Slippage is the maximum difference between the quoted price and the price you actually receive. A higher tolerance means your order is more likely to fill, but you may receive slightly less SOL.\" />\n </span>\n {orderBookSlippageBps > 0 && (\n <span style={font(14, c.secondary)}>Est. slippage: {(orderBookSlippageBps / 100).toFixed(2)}%</span>\n )}\n </div>\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: 4 }}>\n <span style={{ ...font(18, c.primary), transition: \"color 0.15s\" }}>\n {slippage.toFixed(2)}\n </span>\n <span style={font(14, c.secondary)}>% max slippage</span>\n </div>\n <DiscountSlider value={slippage} onChange={(v) => setSlippageBps(Math.round(v * 100))} />\n </div>\n </div>\n </div>\n </div>\n\n {/* Liquidity warning */}\n {!hasLiquidity && rtAmount > 0 && (\n <div style={{\n background: \"rgba(255,181,77,0.15)\",\n borderTop: \"1px solid rgba(255,255,255,0.2)\",\n boxShadow: \"inset 0 -1px 0 rgba(0,0,0,0.08)\",\n borderRadius: 6, padding: 12,\n display: \"flex\", flexDirection: \"column\", gap: 2,\n }}>\n <p style={{ ...font(14, c.primary), fontWeight: 500 }}>Insufficient liquidity</p>\n <p style={font(14, c.secondary)}>\n Only {liquidityCheck?.totalAvailableSize?.toFixed(2) ?? \"0\"} RT available on the order book.\n Your order may partially fill or not fill at all.\n </p>\n </div>\n )}\n\n {/* Error */}\n {txStatus === \"error\" && txError && (\n <div style={{\n ...font(14, c.red),\n background: `${c.red}12`,\n borderRadius: 6, padding: \"8px 12px\",\n }}>\n {txError}\n </div>\n )}\n\n <Spacer />\n <CTA\n label={\n isLoading\n ? txStep === \"selling\" ? \"Selling rewards...\"\n : \"Confirming...\"\n : `Sell Rewards — get ${formatSolAmount(sellAmount, 3)} SOL`\n }\n onClick={handleSign}\n disabled={!canSign}\n purple\n />\n </>\n );\n}\n","import { useMemo, useCallback } from \"react\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { useWidgetStore } from \"../../stores/widget-store\";\nimport {\n maturities,\n executeRedeem,\n fetchBalances,\n fetchUserStakeAccounts,\n writeCachedWalletBalances,\n type BondRow,\n type CanonicalMaturity,\n} from \"@pyefi/sdk\";\nimport {\n useBalanceStore,\n useWalletStore,\n useLockupStore,\n useValidatorStore,\n} from \"@pyefi/sdk/react\";\nimport { Body } from \"../shared/Layout\";\nimport { c, font, formatSolAmount } from \"../design-system\";\n\nconst LAMPORTS_PER_SOL = 1_000_000_000;\n\ninterface Position {\n ptMint: string;\n voteAccount: string;\n canonicalLabel: CanonicalMaturity;\n bond: BondRow;\n ptAmount: number;\n ptAmountLamports: number;\n maturityTimestamp: number;\n maturityLabel: string;\n isMatured: boolean;\n daysLeft: number;\n validatorName: string;\n validatorPtIcon: string;\n}\n\nfunction PositionRow({ position, onRedeem, isRedeeming }: {\n position: Position;\n onRedeem: (p: Position) => void;\n isRedeeming: boolean;\n}) {\n return (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: 8,\n padding: \"12px 16px\",\n background: c.surface,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n }}>\n <img\n src={position.validatorPtIcon}\n alt={`${position.validatorName} PT`}\n style={{ width: 32, height: 32, borderRadius: 8, flexShrink: 0, objectFit: \"cover\" }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n <p style={font(15, c.primary)}>{formatSolAmount(position.ptAmount)} PT</p>\n <p style={font(14, c.secondary)}>{position.validatorName} · {position.maturityLabel}</p>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, flexShrink: 0 }}>\n <p style={{ ...font(14, position.isMatured ? c.green : c.secondary), whiteSpace: \"nowrap\" }}>\n {position.isMatured ? \"Unlocked\" : `${position.daysLeft}d left`}\n </p>\n <button\n className=\"pye-redeem-btn\"\n onClick={position.isMatured && !isRedeeming ? () => onRedeem(position) : undefined}\n disabled={!position.isMatured || isRedeeming}\n style={{\n height: 26, width: 72, borderRadius: 6, border: \"none\",\n padding: \"0 10px\",\n borderTop: `1px solid var(--c-brand-hi)`,\n cursor: !position.isMatured ? \"not-allowed\" : isRedeeming ? \"wait\" : \"pointer\",\n background: c.purple,\n ...font(14, \"var(--c-brand-text)\"),\n boxShadow: `inset 0 -1px 0 var(--c-brand-sh)`,\n transition: \"filter 0.1s\",\n opacity: !position.isMatured ? 0.5 : isRedeeming ? 0.7 : 1,\n whiteSpace: \"nowrap\",\n }}\n >\n {isRedeeming ? \"...\" : \"Redeem\"}\n </button>\n </div>\n </div>\n );\n}\n\nexport default function RedeemList() {\n const { connection } = useConnection();\n const wallet = useWallet();\n const walletBalances = useBalanceStore((s) => s.walletBalances);\n const navigate = useWidgetStore((s) => s.navigate);\n const bonds = useLockupStore((s) => s.bonds);\n const validators = useValidatorStore((s) => s.validators);\n\n const redeemingMint = useWidgetStore((s) => s.redeemingMint);\n const setRedeemingMint = useWidgetStore((s) => s.setRedeemingMint);\n const redeemError = useWidgetStore((s) => s.redeemError);\n const setRedeemError = useWidgetStore((s) => s.setRedeemError);\n const setRedeemAmountSol = useWidgetStore((s) => s.setRedeemAmountSol);\n const setRedeemTxSignature = useWidgetStore((s) => s.setRedeemTxSignature);\n const setWalletBalances = useBalanceStore((s) => s.setWalletBalances);\n const setUserStakeAccounts = useBalanceStore((s) => s.setUserStakeAccounts);\n const setBalanceLamports = useWalletStore((s) => s.setBalanceLamports);\n\n const positions: Position[] = useMemo(() => {\n const ptMintToBond = new Map<string, BondRow>();\n for (const bond of Object.values(bonds)) {\n ptMintToBond.set(bond.pt_mint, bond);\n }\n const now = Date.now() / 1000;\n const result: Position[] = [];\n for (const [mint, amount] of Object.entries(walletBalances)) {\n if (amount <= 0) continue;\n const bond = ptMintToBond.get(mint);\n if (!bond) continue;\n const matTs = bond.maturity_ts;\n const isMatured = now >= matTs;\n const daysLeft = isMatured ? 0 : Math.ceil((matTs * 1000 - Date.now()) / (1000 * 60 * 60 * 24));\n const validator = validators[bond.validator_vote_account];\n const maturityLabel = maturities[bond.canonical_label]?.human_readable ?? bond.canonical_label;\n result.push({\n ptMint: mint,\n voteAccount: bond.validator_vote_account,\n canonicalLabel: bond.canonical_label,\n bond,\n ptAmount: amount / LAMPORTS_PER_SOL,\n ptAmountLamports: amount,\n maturityTimestamp: matTs,\n maturityLabel,\n isMatured,\n daysLeft,\n validatorName: validator?.name ?? bond.validator_vote_account,\n validatorPtIcon: validator?.pt_image_url ?? \"\",\n });\n }\n result.sort((a, b) => a.maturityTimestamp - b.maturityTimestamp);\n return result;\n }, [walletBalances, bonds, validators]);\n\n const handleRedeem = useCallback(async (p: Position) => {\n setRedeemError(null);\n setRedeemingMint(p.ptMint);\n try {\n const { signature } = await executeRedeem({\n connection,\n wallet,\n bondPubkey: p.bond.pubkey,\n principalTokenMint: p.bond.pt_mint,\n yieldTokenMint: p.bond.rt_mint,\n ptAmountLamports: p.ptAmountLamports,\n rtAmountLamports: 0,\n });\n setRedeemAmountSol(p.ptAmountLamports / LAMPORTS_PER_SOL);\n setRedeemTxSignature(signature);\n navigate(\"redeem-complete\");\n } catch (err) {\n setRedeemError(err instanceof Error ? err.message : \"Redeem failed\");\n } finally {\n setRedeemingMint(null);\n const owner = wallet.publicKey!;\n connection.getBalance(owner, \"confirmed\")\n .then(setBalanceLamports)\n .catch(() => {});\n fetchBalances(connection, owner)\n .then((bals) => {\n setWalletBalances(bals);\n writeCachedWalletBalances(owner.toBase58(), bals);\n })\n .catch(() => {});\n fetchUserStakeAccounts(connection, owner)\n .then(setUserStakeAccounts)\n .catch(() => {});\n }\n }, [connection, wallet, setRedeemError, setRedeemingMint, setRedeemAmountSol, setRedeemTxSignature, navigate, setBalanceLamports, setWalletBalances, setUserStakeAccounts]);\n\n return (\n <Body padding={0} style={{ borderTop: \"none\" }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {redeemError && (\n <div style={{\n padding: \"8px 16px\",\n background: `${c.red}12`,\n ...font(14, c.red),\n }}>\n {redeemError}\n </div>\n )}\n\n {positions.length > 0 ? (\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {positions.map(p => (\n <PositionRow\n key={p.ptMint}\n position={p}\n onRedeem={handleRedeem}\n isRedeeming={redeemingMint === p.ptMint}\n />\n ))}\n </div>\n ) : (\n <div style={{\n flex: 1, display: \"flex\", flexDirection: \"column\",\n alignItems: \"center\", justifyContent: \"center\",\n gap: 6, padding: 24, textAlign: \"center\",\n }}>\n <p style={font(15, c.primary)}>No active positions</p>\n <p style={font(14, c.secondary)}>Sell future rewards to create a position.</p>\n </div>\n )}\n </div>\n </Body>\n );\n}\n","import { useWidgetStore } from \"../../stores/widget-store\";\nimport { maturities } from \"@pyefi/sdk\";\nimport { c, font, formatSolAmount } from \"../design-system\";\nimport { Body, CTA, Tooltip, Spacer, SuccessHeader } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\nexport default function StepComplete() {\n const reset = useWidgetStore((s) => s.reset);\n const txSignature = useWidgetStore((s) => s.txSignature);\n const depositAmount = useWidgetStore((s) => s.depositAmount);\n const selectedMaturityId = useWidgetStore((s) => s.selectedMaturityId);\n const sellAmountSol = useWidgetStore((s) => s.sellAmountSol);\n\n const parsedAmount = parseFloat(depositAmount) || 0;\n const sellAmount = sellAmountSol ?? 0;\n\n // Resolve maturity from real SDK data\n const maturity = selectedMaturityId ? maturities[selectedMaturityId] : null;\n const matures = maturity?.human_readable ?? \"Sep 30, 2026\";\n\n const solscanUrl = txSignature\n ? `https://solscan.io/tx/${txSignature}`\n : \"https://solscan.io\";\n\n return (\n <>\n <SuccessHeader label=\"Transaction confirmed\" onClose={() => reset()} />\n\n <Body>\n <p style={font(14, c.secondary)}>Your future staking rewards have been sold upfront.</p>\n\n {/* Summary — stacked rows matching ReviewQuote layout */}\n {(() => {\n const rows: Array<{ key: string; left: React.ReactNode; right: React.ReactNode }> = [\n {\n key: \"received\",\n left: <p style={font(14, c.secondary)}>Rewards sold upfront</p>,\n right: (\n <Odometer\n value={`+${formatSolAmount(sellAmount)} SOL`}\n style={{ ...font(15, c.green, 500), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"pt\",\n left: (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, minWidth: 0 }}>\n <p style={font(14, c.secondary)}>PT received</p>\n <Tooltip text=\"A PT (Principal Token) is a 1:1 tokenised claim on your staked SOL. It accrues no rewards — those were sold upfront. Redeem it at maturity to get your full stake back.\" />\n </div>\n ),\n right: (\n <Odometer\n value={`+${parsedAmount} PT`}\n style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0, fontVariantNumeric: \"tabular-nums\" }}\n />\n ),\n },\n {\n key: \"stake\",\n left: <p style={font(14, c.secondary)}>Stake returned</p>,\n right: (\n <p style={{ ...font(14, c.primary), whiteSpace: \"nowrap\", flexShrink: 0 }}>\n {matures}\n </p>\n ),\n },\n {\n key: \"tx\",\n left: <p style={font(14, c.secondary)}>Transaction</p>,\n right: (\n <a\n href={solscanUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{ ...font(14, c.purple), textDecoration: \"none\", display: \"flex\", alignItems: \"center\", gap: 4, flexShrink: 0 }}\n >\n Solscan\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1h4v4M11 1L5.5 6.5M5 2H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </a>\n ),\n },\n ];\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 0 }}>\n {rows.map((row, i) => {\n const isFirst = i === 0;\n const isLast = i === rows.length - 1;\n const radius = isFirst && isLast\n ? 8\n : isFirst\n ? \"8px 8px 0 0\"\n : isLast\n ? \"0 0 8px 8px\"\n : 0;\n return (\n <div\n key={row.key}\n style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: radius,\n padding: \"12px 12px\",\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n {row.left}\n {row.right}\n </div>\n );\n })}\n </div>\n );\n })()}\n\n {/* Wallet visibility notice */}\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8, padding: 12,\n display: \"flex\", alignItems: \"flex-start\", gap: 10,\n }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0, marginTop: 2 }}>\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke={c.secondary} strokeWidth=\"1.2\"/>\n <path d=\"M8 7.5v3.5M8 5v.5\" stroke={c.secondary} strokeWidth=\"1.4\" strokeLinecap=\"round\"/>\n </svg>\n <p style={font(12, c.secondary)}>\n Your PT tokens may be hidden in your wallet — enable them via <span style={{ color: c.primary }}>Manage Tokens</span> to see your balance.\n </p>\n </div>\n\n <Spacer />\n\n {/* Stay updated */}\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8, padding: 12,\n display: \"flex\", alignItems: \"center\", gap: 12,\n }}>\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <p style={font(14, c.primary)}>Learn more about Pye</p>\n <a href=\"https://docs.pye.fi/how-pye-works\" target=\"_blank\" rel=\"noreferrer\"\n style={{ ...font(11, c.secondary), textDecoration: \"none\", display: \"flex\", alignItems: \"center\", gap: 4 }}>\n Read the docs\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1h4v4M11 1L5.5 6.5M5 2H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </a>\n </div>\n <div style={{ display: \"flex\", gap: 8, flexShrink: 0, alignSelf: \"center\" }}>\n <a href=\"https://t.me/pyefi\" target=\"_blank\" rel=\"noreferrer\"\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", width: 28, height: 28, borderRadius: 8, background: c.highlight, borderTop: `1px solid ${c.highlight}`, boxShadow: `inset 0 -1px 0 ${c.shadow}`, textDecoration: \"none\" }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill={c.secondary}>\n <path d=\"M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z\"/>\n </svg>\n </a>\n <a href=\"https://x.com/pyefinance\" target=\"_blank\" rel=\"noreferrer\"\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", width: 28, height: 28, borderRadius: 8, background: c.highlight, borderTop: `1px solid ${c.highlight}`, boxShadow: `inset 0 -1px 0 ${c.shadow}`, textDecoration: \"none\" }}>\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill={c.secondary}>\n <path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.744l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.912-5.622zm-1.161 17.52h1.833L7.084 4.126H5.117z\"/>\n </svg>\n </a>\n </div>\n </div>\n\n <CTA label=\"Sell more rewards\" onClick={() => reset()} />\n </Body>\n </>\n );\n}\n","import { useWidgetStore } from \"../../stores/widget-store\";\nimport { c, font, displayFont, formatSolAmount } from \"../design-system\";\nimport { Body, CTA, Spacer, SuccessHeader } from \"../shared/Layout\";\nimport { Odometer } from \"../shared/Odometer\";\n\nexport default function RedeemComplete() {\n const reset = useWidgetStore((s) => s.reset);\n const redeemAmountSol = useWidgetStore((s) => s.redeemAmountSol);\n const redeemTxSignature = useWidgetStore((s) => s.redeemTxSignature);\n\n const amount = redeemAmountSol ?? 12.5; // fallback for dev preview\n\n const solscanUrl = redeemTxSignature\n ? `https://solscan.io/tx/${redeemTxSignature}`\n : \"https://solscan.io\";\n\n return (\n <>\n <SuccessHeader label=\"Redeem confirmed\" onClose={() => reset()} />\n\n <Body>\n <p style={font(14, c.secondary)}>Your staked SOL has been returned to your wallet.</p>\n\n {/* Amount received */}\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <div style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: \"8px 8px 0 0\",\n padding: 12,\n display: \"flex\", flexDirection: \"column\", gap: 12,\n }}>\n <p style={font(14, c.secondary)}>Staked SOL returned</p>\n <Odometer\n value={`${formatSolAmount(amount)} SOL`}\n style={{ ...displayFont(32, c.green), lineHeight: 1.2 }}\n />\n </div>\n {/* Solscan link row */}\n <div style={{\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n borderRadius: \"0 0 8px 8px\",\n padding: 12,\n display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\",\n }}>\n <p style={font(14, c.secondary)}>Received as a stake account</p>\n <a\n href={solscanUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{ ...font(14, c.purple), textDecoration: \"none\", display: \"flex\", alignItems: \"center\", gap: 4 }}\n >\n Solscan\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1h4v4M11 1L5.5 6.5M5 2H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V8\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </a>\n </div>\n </div>\n\n {/* Educational: what to do next */}\n <div style={{\n background: c.raised,\n borderTop: `1px solid ${c.highlight}`,\n boxShadow: `inset 0 -1px 0 ${c.shadow}`,\n borderRadius: 8, padding: 12,\n display: \"flex\", flexDirection: \"column\", gap: 12,\n }}>\n <p style={font(14, c.primary)}>\n <strong style={{ fontWeight: 600 }}>What to do next</strong>\n </p>\n <p style={font(14, c.secondary)}>\n Two more steps to make it liquid.\n </p>\n\n {/* Step 1 */}\n <div style={{ display: \"flex\", gap: 10 }}>\n <div style={{\n width: 20, height: 20, borderRadius: \"50%\", flexShrink: 0,\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n ...font(11, c.secondary),\n }}>\n 1\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n <p style={font(14, c.primary)}>Deactivate the stake account</p>\n <p style={font(11, c.secondary)}>\n Deactivate in your wallet app. Takes ~1 epoch (~2 days).\n </p>\n </div>\n </div>\n\n {/* Step 2 */}\n <div style={{ display: \"flex\", gap: 10 }}>\n <div style={{\n width: 20, height: 20, borderRadius: \"50%\", flexShrink: 0,\n background: c.lowered,\n borderTop: `1px solid ${c.shadow}`,\n boxShadow: `inset 0 -1px 0 ${c.highlight}`,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n ...font(11, c.secondary),\n }}>\n 2\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n <p style={font(14, c.primary)}>Withdraw to liquid SOL</p>\n <p style={font(11, c.secondary)}>\n Once deactivated, withdraw to get liquid SOL.\n </p>\n </div>\n </div>\n </div>\n\n <Spacer />\n\n <CTA label=\"Done\" onClick={() => reset()} />\n </Body>\n </>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useWalletStore } from \"@pyefi/sdk/react\";\nimport { useWidgetStore, type WidgetScreen } from \"../stores/widget-store\";\nimport { Widget, Body, Footer, StepHeader } from \"./shared/Layout\";\nimport WelcomeScreen from \"./screens/WelcomeScreen\";\nimport ConnectWallet from \"./screens/ConnectWallet\";\nimport YieldForwardIntro from \"./screens/YieldForwardIntro\";\nimport SelectPosition from \"./screens/SelectPosition\";\nimport ChooseAmount from \"./screens/ChooseAmount\";\nimport ChooseDuration from \"./screens/ChooseDuration\";\nimport ReviewQuote from \"./screens/ReviewQuote\";\nimport RedeemList from \"./screens/RedeemList\";\nimport StepComplete from \"./screens/StepComplete\";\nimport RedeemComplete from \"./screens/RedeemComplete\";\n\nconst STEP_CONFIG: Partial<Record<WidgetScreen, { step: number; total: number }>> = {\n \"select-position\": { step: 1, total: 4 },\n \"choose-amount\": { step: 2, total: 4 },\n \"choose-duration\": { step: 3, total: 4 },\n \"review-quote\": { step: 4, total: 4 },\n};\n\nconst REDEEM_TOOLTIP =\n \"Each PT (Principal Token) is a 1:1 tokenised claim on your staked SOL. It accrues no rewards — those were sold upfront. Redeem at maturity to receive your full SOL stake back.\";\n\nfunction HeaderlessShell({ screen, children }: { screen: WidgetScreen; children: React.ReactNode }) {\n return (\n <Widget>\n <Body style={{ borderRadius: \"10px 10px 0 0\", borderTop: \"none\" }}>\n <div key={screen} className=\"pye-step-in\">{children}</div>\n </Body>\n <Footer />\n </Widget>\n );\n}\n\nexport default function WidgetShell() {\n const screen = useWidgetStore((s) => s.screen);\n const goBack = useWidgetStore((s) => s.goBack);\n const reset = useWidgetStore((s) => s.reset);\n const navigate = useWidgetStore((s) => s.navigate);\n const walletPublicKey = useWalletStore((s) => s.publicKey);\n const walletStatus = useWalletStore((s) => s.status);\n const prevWalletRef = useRef<string | null>(null);\n\n useEffect(() => {\n const connected = walletStatus === \"connected\";\n const atIntro = screen === \"yield-forward-intro\" || screen === \"connect-wallet\";\n\n if (connected && atIntro) {\n navigate(\"welcome\");\n } else if (!connected && !atIntro) {\n reset();\n }\n }, [walletStatus, screen, navigate, reset]);\n\n // Reset mid-flow if the connected wallet changes\n useEffect(() => {\n if (!walletPublicKey) {\n prevWalletRef.current = null;\n return;\n }\n if (prevWalletRef.current && prevWalletRef.current !== walletPublicKey) {\n reset();\n navigate(\"welcome\");\n }\n prevWalletRef.current = walletPublicKey;\n }, [walletPublicKey, reset, navigate]);\n\n if (screen === \"complete\") {\n return <Widget><StepComplete /><Footer /></Widget>;\n }\n\n if (screen === \"redeem-complete\") {\n return <Widget><RedeemComplete /><Footer /></Widget>;\n }\n\n if (screen === \"welcome\") {\n return <Widget><WelcomeScreen /><Footer /></Widget>;\n }\n\n if (screen === \"yield-forward-intro\") {\n return <HeaderlessShell screen={screen}><YieldForwardIntro /></HeaderlessShell>;\n }\n\n if (screen === \"connect-wallet\") {\n return <HeaderlessShell screen={screen}><ConnectWallet /></HeaderlessShell>;\n }\n\n if (screen === \"redeem-list\") {\n return (\n <Widget>\n <StepHeader hideStep label=\"Your positions\" tooltipText={REDEEM_TOOLTIP} onBack={goBack} />\n <RedeemList />\n <Footer />\n </Widget>\n );\n }\n\n const config = STEP_CONFIG[screen];\n\n return (\n <Widget>\n <StepHeader\n step={config?.step}\n total={config?.total}\n hideStep={!config?.step}\n onBack={goBack}\n />\n <Body>\n <div key={screen} className=\"pye-step-in\">\n {screen === \"select-position\" && <SelectPosition />}\n {screen === \"choose-amount\" && <ChooseAmount />}\n {screen === \"choose-duration\" && <ChooseDuration />}\n {screen === \"review-quote\" && <ReviewQuote />}\n </div>\n </Body>\n <Footer />\n </Widget>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useWalletStore } from \"@pyefi/sdk/react\";\nimport { useWidgetStore } from \"../stores/widget-store\";\n\n/**\n * Watches the connected wallet's publicKey and resets widget-store selection\n * state whenever the user switches accounts in their wallet (e.g. Phantom).\n * Without this, selectedStakeAccountPubkey / depositAmount / validator data\n * from the previous wallet persist and block the Sell Future Rewards flow.\n */\nexport default function WalletChangeWatcher() {\n const publicKey = useWalletStore((s) => s.publicKey);\n const resetForWalletChange = useWidgetStore((s) => s.resetForWalletChange);\n const prev = useRef<string | null>(null);\n\n useEffect(() => {\n const current = publicKey ? String(publicKey) : null;\n if (prev.current !== null && prev.current !== current) {\n resetForWalletChange();\n }\n prev.current = current;\n }, [publicKey, resetForWalletChange]);\n\n return null;\n}\n","import { useRef, useMemo } from \"react\";\nimport {\n ConnectionProvider,\n WalletProvider,\n} from \"@solana/wallet-adapter-react\";\nimport {\n PhantomWalletAdapter,\n SolflareWalletAdapter,\n TorusWalletAdapter,\n LedgerWalletAdapter,\n WalletConnectWalletAdapter,\n} from \"@solana/wallet-adapter-wallets\";\nimport { WalletAdapterNetwork } from \"@solana/wallet-adapter-base\";\n\nconst WALLET_CONNECT_PROJECT_ID = \"7b89b9d2ef5d0298961c3eeb879793b0\";\nimport { configurePyeSDK } from \"@pyefi/sdk\";\nimport {\n PyeSDKProvider,\n WalletSyncer,\n BalanceSyncer,\n MarketSyncer,\n ApySyncer,\n ValidatorSyncer,\n LockupSyncer,\n} from \"@pyefi/sdk/react\";\nimport {\n createWidgetStore,\n WidgetStoreContext,\n} from \"./stores/widget-store\";\nimport { THEME_CSS } from \"./components/design-system\";\nimport WidgetShell from \"./components/WidgetShell\";\nimport WalletChangeWatcher from \"./components/WalletChangeWatcher\";\nimport type { PyeWidgetProps } from \"./types\";\n\nexport default function PyeWidget({\n rpcUrl,\n supabaseUrl,\n supabaseAnonKey,\n voteAccount,\n theme = \"pye-light\",\n onClose,\n}: PyeWidgetProps) {\n const configuredRef = useRef(false);\n if (!configuredRef.current) {\n configurePyeSDK({ rpcUrl, supabaseUrl, supabaseAnonKey, voteAccount });\n configuredRef.current = true;\n }\n\n const wallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new SolflareWalletAdapter(),\n new TorusWalletAdapter(),\n new LedgerWalletAdapter(),\n new WalletConnectWalletAdapter({\n network: WalletAdapterNetwork.Mainnet,\n options: {\n projectId: WALLET_CONNECT_PROJECT_ID,\n metadata: {\n name: \"Pye\",\n description: \"Earn staking rewards upfront\",\n url: \"https://pye.fi\",\n icons: [\"https://pye.fi/icon.png\"],\n },\n },\n }),\n ],\n [],\n );\n\n const widgetStoreRef = useRef<ReturnType<typeof createWidgetStore>>(undefined);\n if (!widgetStoreRef.current) {\n widgetStoreRef.current = createWidgetStore();\n }\n\n return (\n <div data-theme={theme}>\n <style>{THEME_CSS}</style>\n <ConnectionProvider endpoint={rpcUrl}>\n <WalletProvider wallets={wallets} autoConnect>\n <PyeSDKProvider>\n <WalletSyncer />\n <BalanceSyncer />\n <ValidatorSyncer />\n <LockupSyncer />\n <MarketSyncer />\n <ApySyncer />\n <WidgetStoreContext.Provider value={widgetStoreRef.current}>\n <WalletChangeWatcher />\n <WidgetShell />\n </WidgetStoreContext.Provider>\n </PyeSDKProvider>\n </WalletProvider>\n </ConnectionProvider>\n </div>\n );\n}\n"],"names":["base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","i","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","parts","maxChunkLength","len2","ieee754","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","value","c","rt","base64","require$$0","require$$1","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","length","buf","arg","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","b","fromObject","assertSize","size","alloc","fill","encoding","checked","string","actual","fromArrayLike","array","arrayView","copy","byteOffset","obj","numberIsNaN","a","x","y","list","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","str","max","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","checkInt","min","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","E","sym","getMessage","Base","name","range","input","msg","received","addNumericalSeparator","checkBounds","type","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","g","BufferShim","initialState","createWidgetStore","createStore","immer","set","screen","prev","pubkey","balance","validatorName","validatorIcon","validatorVoteAccount","validatorAltPubkey","amount","id","open","bps","mint","error","sig","step","status","signature","WidgetStoreContext","createContext","useWidgetStore","selector","store","useContext","useStore","THEME_CSS","DISPLAY_FONT","font","color","weight","displayFont","formatSolAmount","minDecimals","digits","POINTS_ENABLED","phantomLogo","backpackLogo","metamaskLogo","PyeWordmark","jsx","jsxs","WalletDot","logos","bg","logo","Widget","children","Body","padding","style","Spacer","StepHeader","total","onBack","hideStep","label","tooltipText","hasProgress","pct","backButton","Tooltip","StepTitle","title","subtitle","text","position","isBelow","triggerRef","useRef","coords","setCoords","useState","handleEnter","el","rect","popup","createPortal","RowGroup","SelectableRow","icon","selected","onClick","shadow","SkeletonRow","CTA","disabled","purple","SuccessHeader","onClose","Footer","InlineError","message","LAMPORTS_PER_SOL","ChoiceRow","subColor","WalletSwitcher","address","onSwitch","truncated","IconRedeem","IconSell","WelcomeScreen","navigate","walletBalances","useBalanceStore","userStakeAccounts","userStakeAccountsLoading","walletPublicKey","useWalletStore","bonds","useLockupStore","validators","useValidatorStore","disconnect","useWallet","configuredVoteAccount","getPyeConfig","_a","totalPtSol","maturedPtSol","useMemo","ptMintToBond","bond","now","matured","sol","activeStakeSol","lamports","acc","loggedRef","useEffect","validatorAvailability","key","canRedeem","canSell","hasAnyBalance","v","isInitialLoading","redeemSub","sellSub","Fragment","WalletRow","iconUrl","connecting","onConnect","isConnecting","isDimmed","ConnectWallet","wallets","wallet","select","walletStatus","connectingName","sortedWallets","w","aDetected","bDetected","handleConnect","BenefitRow","body","BoltIcon","ShieldIcon","ClockIcon","YieldForwardIntro","isConnected","SelectPosition","selectStakeAccount","activeAccounts","handleSelectStake","account","img","SLIDER_CSS","ChooseAmount","depositAmount","setDepositAmount","selectedBalance","selectedPubkey","available","pcts","rafRef","truncate4","rampToAmount","duration","startTime","ease","t","lastWritten","tick","isLiquidSol","GAS_RESERVE","warning","isValid","sliderMax","sliderValue","sliderPct","stepSize","availableLabel","p","DIGITS","Odometer","stagger","reducedMotion","chars","digitIdx","ch","delay","DigitColumn","digit","setTarget","raf","GATE_HEADLINE","SELL_YIELD_CODES","QUARTER_INFO","ALL_MATURITIES","TWO_DAYS_S","getAvailableMaturities","nowS","maturities","ChooseDuration","connection","useConnection","selectedMaturityId","setSelectedMaturity","selectedValidatorVoteAccount","markets","useMarketStore","nowTs","setNowTs","fetchEpochSyncedNowTs","availableMaturities","timeFiltered","matId","parsedAmount","effectiveNowTs","quarters","info","maturity","canSellYield","grossYield","rtMarket","estimatedRt","estimateRtFromStake","liq","_b","checkSellLiquidity","netYield","applyTradingFee","daysToMaturity","q","sel","isSelected","gateCode","isGated","labelColor","DiscountSlider","onChange","trackRef","MIN","MAX","computeValue","clientX","raw","handlePointerDown","handlePointerMove","filledColor","l","ReviewQuote","txStatus","txStep","txError","setTxStatus","setTxStep","setSellAmountSol","advancedOpen","setAdvancedOpen","slippageBps","setSlippageBps","selectedStakeAccountPubkey","selectedStakeAccountBalance","selectedValidatorAltPubkey","setWalletBalances","setUserStakeAccounts","setBalanceLamports","matures","selectedStakeAccount","stakeVoteAccount","stakeBond","rtMarketKey","k","rtAmount","liquidityCheck","hasLiquidity","orderBookSlippageBps","grossSellAmount","sellAmount","feeAmountSol","feePct","PYE_TRADING_FEE_BPS","slippage","isLoading","selectedStakeStillOwned","canSign","marketBondParams","fallbackMarketKey","canonicalLabel","voteAccount","bondParams","handleSign","useCallback","gate","minReceive","freshNowTs","freshRtAmount","executeStakeDeposit","rtSellResult","executeRtSell","altPubkey","result","executeDepositAndSell","err","owner","fetchBalances","bals","writeCachedWalletBalances","fetchUserStakeAccounts","rows","row","isFirst","isLast","radius","PositionRow","onRedeem","isRedeeming","RedeemList","redeemingMint","setRedeemingMint","redeemError","setRedeemError","setRedeemAmountSol","setRedeemTxSignature","positions","matTs","isMatured","daysLeft","validator","maturityLabel","handleRedeem","executeRedeem","StepComplete","reset","txSignature","sellAmountSol","solscanUrl","RedeemComplete","redeemAmountSol","redeemTxSignature","STEP_CONFIG","REDEEM_TOOLTIP","HeaderlessShell","WidgetShell","goBack","prevWalletRef","connected","atIntro","config","WalletChangeWatcher","publicKey","resetForWalletChange","current","WALLET_CONNECT_PROJECT_ID","PyeWidget","rpcUrl","supabaseUrl","supabaseAnonKey","theme","configuredRef","configurePyeSDK","PhantomWalletAdapter","SolflareWalletAdapter","TorusWalletAdapter","LedgerWalletAdapter","WalletConnectWalletAdapter","WalletAdapterNetwork","widgetStoreRef","ConnectionProvider","WalletProvider","PyeSDKProvider","WalletSyncer","BalanceSyncer","ValidatorSyncer","LockupSyncer","MarketSyncer","ApySyncer"],"mappings":";;;;;;;;;;;;;;UAEAA,GAAA,aAAqBC,GACrBD,GAAA,cAAsBE,GACtBF,GAAA,gBAAwBG;AAOxB,WALIC,IAAS,CAAA,GACTC,IAAY,CAAA,GACZC,IAAM,OAAO,aAAe,MAAc,aAAa,OAEvDC,IAAO,oEACFC,IAAI,GAAGC,IAAMF,EAAK,QAAQC,IAAIC,GAAK,EAAED;AAC5C,IAAAJ,EAAOI,CAAC,IAAID,EAAKC,CAAC,GAClBH,EAAUE,EAAK,WAAWC,CAAC,CAAC,IAAIA;AAKlC,EAAAH,EAAU,EAAiB,IAAI,IAC/BA,EAAU,EAAiB,IAAI;AAE/B,WAASK,EAASC,GAAK;AACrB,QAAIF,IAAME,EAAI;AAEd,QAAIF,IAAM,IAAI;AACZ,YAAM,IAAI,MAAM,gDAAgD;AAKlE,QAAIG,IAAWD,EAAI,QAAQ,GAAG;AAC9B,IAAIC,MAAa,OAAIA,IAAWH;AAEhC,QAAII,IAAkBD,MAAaH,IAC/B,IACA,IAAKG,IAAW;AAEpB,WAAO,CAACA,GAAUC,CAAe;AAAA,EACnC;AAGA,WAASZ,EAAYU,GAAK;AACxB,QAAIG,IAAOJ,EAAQC,CAAG,GAClBC,IAAWE,EAAK,CAAC,GACjBD,IAAkBC,EAAK,CAAC;AAC5B,YAASF,IAAWC,KAAmB,IAAI,IAAKA;AAAA,EAClD;AAEA,WAASE,EAAaJ,GAAKC,GAAUC,GAAiB;AACpD,YAASD,IAAWC,KAAmB,IAAI,IAAKA;AAAA,EAClD;AAEA,WAASX,EAAaS,GAAK;AACzB,QAAIK,GACAF,IAAOJ,EAAQC,CAAG,GAClBC,IAAWE,EAAK,CAAC,GACjBD,IAAkBC,EAAK,CAAC,GAExBG,IAAM,IAAIX,EAAIS,EAAYJ,GAAKC,GAAUC,CAAe,CAAC,GAEzDK,IAAU,GAGVT,IAAMI,IAAkB,IACxBD,IAAW,IACXA,GAEAJ;AACJ,SAAKA,IAAI,GAAGA,IAAIC,GAAKD,KAAK;AACxB,MAAAQ,IACGX,EAAUM,EAAI,WAAWH,CAAC,CAAC,KAAK,KAChCH,EAAUM,EAAI,WAAWH,IAAI,CAAC,CAAC,KAAK,KACpCH,EAAUM,EAAI,WAAWH,IAAI,CAAC,CAAC,KAAK,IACrCH,EAAUM,EAAI,WAAWH,IAAI,CAAC,CAAC,GACjCS,EAAIC,GAAS,IAAKF,KAAO,KAAM,KAC/BC,EAAIC,GAAS,IAAKF,KAAO,IAAK,KAC9BC,EAAIC,GAAS,IAAIF,IAAM;AAGzB,WAAIH,MAAoB,MACtBG,IACGX,EAAUM,EAAI,WAAWH,CAAC,CAAC,KAAK,IAChCH,EAAUM,EAAI,WAAWH,IAAI,CAAC,CAAC,KAAK,GACvCS,EAAIC,GAAS,IAAIF,IAAM,MAGrBH,MAAoB,MACtBG,IACGX,EAAUM,EAAI,WAAWH,CAAC,CAAC,KAAK,KAChCH,EAAUM,EAAI,WAAWH,IAAI,CAAC,CAAC,KAAK,IACpCH,EAAUM,EAAI,WAAWH,IAAI,CAAC,CAAC,KAAK,GACvCS,EAAIC,GAAS,IAAKF,KAAO,IAAK,KAC9BC,EAAIC,GAAS,IAAIF,IAAM,MAGlBC;AAAA,EACT;AAEA,WAASE,EAAiBC,GAAK;AAC7B,WAAOhB,EAAOgB,KAAO,KAAK,EAAI,IAC5BhB,EAAOgB,KAAO,KAAK,EAAI,IACvBhB,EAAOgB,KAAO,IAAI,EAAI,IACtBhB,EAAOgB,IAAM,EAAI;AAAA,EACrB;AAEA,WAASC,EAAaC,GAAOC,GAAOC,GAAK;AAGvC,aAFIR,GACAS,IAAS,CAAA,GACJjB,IAAIe,GAAOf,IAAIgB,GAAKhB,KAAK;AAChC,MAAAQ,KACIM,EAAMd,CAAC,KAAK,KAAM,aAClBc,EAAMd,IAAI,CAAC,KAAK,IAAK,UACtBc,EAAMd,IAAI,CAAC,IAAI,MAClBiB,EAAO,KAAKN,EAAgBH,CAAG,CAAC;AAElC,WAAOS,EAAO,KAAK,EAAE;AAAA,EACvB;AAEA,WAAStB,EAAemB,GAAO;AAQ7B,aAPIN,GACAP,IAAMa,EAAM,QACZI,IAAajB,IAAM,GACnBkB,IAAQ,CAAA,GACRC,IAAiB,OAGZpB,IAAI,GAAGqB,IAAOpB,IAAMiB,GAAYlB,IAAIqB,GAAMrB,KAAKoB;AACtD,MAAAD,EAAM,KAAKN,EAAYC,GAAOd,GAAIA,IAAIoB,IAAkBC,IAAOA,IAAQrB,IAAIoB,CAAe,CAAC;AAI7F,WAAIF,MAAe,KACjBV,IAAMM,EAAMb,IAAM,CAAC,GACnBkB,EAAM;AAAA,MACJvB,EAAOY,KAAO,CAAC,IACfZ,EAAQY,KAAO,IAAK,EAAI,IACxB;AAAA,IACN,KACaU,MAAe,MACxBV,KAAOM,EAAMb,IAAM,CAAC,KAAK,KAAKa,EAAMb,IAAM,CAAC,GAC3CkB,EAAM;AAAA,MACJvB,EAAOY,KAAO,EAAE,IAChBZ,EAAQY,KAAO,IAAK,EAAI,IACxBZ,EAAQY,KAAO,IAAK,EAAI,IACxB;AAAA,IACN,IAGSW,EAAM,KAAK,EAAE;AAAA,EACtB;;;;;;;wBCpJAG,GAAA,OAAe,SAAUC,GAAQC,GAAQC,GAAMC,GAAMC,GAAQ;AAC3D,QAAIC,GAAGC,GACHC,IAAQH,IAAS,IAAKD,IAAO,GAC7BK,KAAQ,KAAKD,KAAQ,GACrBE,IAAQD,KAAQ,GAChBE,IAAQ,IACRjC,IAAIyB,IAAQE,IAAS,IAAK,GAC1BO,IAAIT,IAAO,KAAK,GAChBU,IAAIZ,EAAOC,IAASxB,CAAC;AAOzB,SALAA,KAAKkC,GAELN,IAAIO,KAAM,KAAM,CAACF,KAAU,GAC3BE,MAAO,CAACF,GACRA,KAASH,GACFG,IAAQ,GAAGL,IAAKA,IAAI,MAAOL,EAAOC,IAASxB,CAAC,GAAGA,KAAKkC,GAAGD,KAAS;AAAG;AAK1E,SAHAJ,IAAID,KAAM,KAAM,CAACK,KAAU,GAC3BL,MAAO,CAACK,GACRA,KAASP,GACFO,IAAQ,GAAGJ,IAAKA,IAAI,MAAON,EAAOC,IAASxB,CAAC,GAAGA,KAAKkC,GAAGD,KAAS;AAAG;AAE1E,QAAIL,MAAM;AACR,MAAAA,IAAI,IAAII;AAAA,SACH;AAAA,UAAIJ,MAAMG;AACf,eAAOF,IAAI,OAAQM,IAAI,KAAK,KAAK;AAEjC,MAAAN,IAAIA,IAAI,KAAK,IAAI,GAAGH,CAAI,GACxBE,IAAIA,IAAII;AAAA;AAEV,YAAQG,IAAI,KAAK,KAAKN,IAAI,KAAK,IAAI,GAAGD,IAAIF,CAAI;AAAA,EAChD,GAEAJ,GAAA,QAAgB,SAAUC,GAAQa,GAAOZ,GAAQC,GAAMC,GAAMC,GAAQ;AACnE,QAAIC,GAAGC,GAAGQ,GACNP,IAAQH,IAAS,IAAKD,IAAO,GAC7BK,KAAQ,KAAKD,KAAQ,GACrBE,IAAQD,KAAQ,GAChBO,IAAMZ,MAAS,KAAK,KAAK,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,GAC1D1B,IAAIyB,IAAO,IAAKE,IAAS,GACzBO,IAAIT,IAAO,IAAI,IACfU,IAAIC,IAAQ,KAAMA,MAAU,KAAK,IAAIA,IAAQ,IAAK,IAAI;AAmC1D,SAjCAA,IAAQ,KAAK,IAAIA,CAAK,GAElB,MAAMA,CAAK,KAAKA,MAAU,SAC5BP,IAAI,MAAMO,CAAK,IAAI,IAAI,GACvBR,IAAIG,MAEJH,IAAI,KAAK,MAAM,KAAK,IAAIQ,CAAK,IAAI,KAAK,GAAG,GACrCA,KAASC,IAAI,KAAK,IAAI,GAAG,CAACT,CAAC,KAAK,MAClCA,KACAS,KAAK,IAEHT,IAAII,KAAS,IACfI,KAASE,IAAKD,IAEdD,KAASE,IAAK,KAAK,IAAI,GAAG,IAAIN,CAAK,GAEjCI,IAAQC,KAAK,MACfT,KACAS,KAAK,IAGHT,IAAII,KAASD,KACfF,IAAI,GACJD,IAAIG,KACKH,IAAII,KAAS,KACtBH,KAAMO,IAAQC,IAAK,KAAK,KAAK,IAAI,GAAGX,CAAI,GACxCE,IAAIA,IAAII,MAERH,IAAIO,IAAQ,KAAK,IAAI,GAAGJ,IAAQ,CAAC,IAAI,KAAK,IAAI,GAAGN,CAAI,GACrDE,IAAI,KAIDF,KAAQ,GAAGH,EAAOC,IAASxB,CAAC,IAAI6B,IAAI,KAAM7B,KAAKkC,GAAGL,KAAK,KAAKH,KAAQ;AAAG;AAI9E,SAFAE,IAAKA,KAAKF,IAAQG,GAClBC,KAAQJ,GACDI,IAAO,GAAGP,EAAOC,IAASxB,CAAC,IAAI4B,IAAI,KAAM5B,KAAKkC,GAAGN,KAAK,KAAKE,KAAQ;AAAG;AAE7E,IAAAP,EAAOC,IAASxB,IAAIkC,CAAC,KAAKC,IAAI;AAAA,EAChC;;;;;;;;;;;AC1EA,UAAMI,IAASC,GAAA,GACTlB,IAAUmB,GAAA,GACVC,IACH,OAAO,UAAW,cAAc,OAAO,OAAO,OAAW,aACtD,OAAO,IAAO,4BAA4B,IAC1C;AAENC,IAAAA,EAAA,SAAiBC,GACjBD,EAAA,aAAqBE,GACrBF,EAAA,oBAA4B;AAE5B,UAAMG,IAAe;AACrBH,IAAAA,EAAA,aAAqBG,GAgBrBF,EAAO,sBAAsBG,EAAiB,GAE1C,CAACH,EAAO,uBAAuB,OAAO,UAAY,OAClD,OAAO,QAAQ,SAAU,cAC3B,QAAQ;AAAA,MACN;AAAA,IAEJ;AAGA,aAASG,IAAqB;AAE5B,UAAI;AACF,cAAMtC,IAAM,IAAI,WAAW,CAAC,GACtBuC,IAAQ,EAAE,KAAK,WAAY;AAAE,iBAAO;AAAA,QAAE,EAAE;AAC9C,sBAAO,eAAeA,GAAO,WAAW,SAAS,GACjD,OAAO,eAAevC,GAAKuC,CAAK,GACzBvC,EAAI,UAAU;AAAA,MACzB,QAAc;AACV,eAAO;AAAA,MACX;AAAA,IACA;AAEA,WAAO,eAAemC,EAAO,WAAW,UAAU;AAAA,MAChD,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,YAAKA,EAAO,SAAS,IAAI;AACzB,iBAAO,KAAK;AAAA,MAChB;AAAA,KACC,GAED,OAAO,eAAeA,EAAO,WAAW,UAAU;AAAA,MAChD,YAAY;AAAA,MACZ,KAAK,WAAY;AACf,YAAKA,EAAO,SAAS,IAAI;AACzB,iBAAO,KAAK;AAAA,MAChB;AAAA,KACC;AAED,aAASK,EAAcC,GAAQ;AAC7B,UAAIA,IAASJ;AACX,cAAM,IAAI,WAAW,gBAAgBI,IAAS,gCAAgC;AAGhF,YAAMC,IAAM,IAAI,WAAWD,CAAM;AACjC,oBAAO,eAAeC,GAAKP,EAAO,SAAS,GACpCO;AAAA,IACT;AAYA,aAASP,EAAQQ,GAAKC,GAAkBH,GAAQ;AAE9C,UAAI,OAAOE,KAAQ,UAAU;AAC3B,YAAI,OAAOC,KAAqB;AAC9B,gBAAM,IAAI;AAAA,YACR;AAAA,UACR;AAEI,eAAOC,EAAYF,CAAG;AAAA,MAC1B;AACE,aAAOG,EAAKH,GAAKC,GAAkBH,CAAM;AAAA,IAC3C;AAEA,IAAAN,EAAO,WAAW;AAElB,aAASW,EAAMnB,GAAOiB,GAAkBH,GAAQ;AAC9C,UAAI,OAAOd,KAAU;AACnB,eAAOoB,EAAWpB,GAAOiB,CAAgB;AAG3C,UAAI,YAAY,OAAOjB,CAAK;AAC1B,eAAOqB,EAAcrB,CAAK;AAG5B,UAAIA,KAAS;AACX,cAAM,IAAI;AAAA,UACR,oHAC0C,OAAOA;AAAA,QACvD;AAQE,UALIsB,EAAWtB,GAAO,WAAW,KAC5BA,KAASsB,EAAWtB,EAAM,QAAQ,WAAW,KAI9C,OAAO,oBAAsB,QAC5BsB,EAAWtB,GAAO,iBAAiB,KACnCA,KAASsB,EAAWtB,EAAM,QAAQ,iBAAiB;AACtD,eAAOuB,EAAgBvB,GAAOiB,GAAkBH,CAAM;AAGxD,UAAI,OAAOd,KAAU;AACnB,cAAM,IAAI;AAAA,UACR;AAAA,QACN;AAGE,YAAMwB,IAAUxB,EAAM,WAAWA,EAAM,QAAO;AAC9C,UAAIwB,KAAW,QAAQA,MAAYxB;AACjC,eAAOQ,EAAO,KAAKgB,GAASP,GAAkBH,CAAM;AAGtD,YAAMW,IAAIC,EAAW1B,CAAK;AAC1B,UAAIyB,EAAG,QAAOA;AAEd,UAAI,OAAO,SAAW,OAAe,OAAO,eAAe,QACvD,OAAOzB,EAAM,OAAO,WAAW,KAAM;AACvC,eAAOQ,EAAO,KAAKR,EAAM,OAAO,WAAW,EAAE,QAAQ,GAAGiB,GAAkBH,CAAM;AAGlF,YAAM,IAAI;AAAA,QACR,oHAC0C,OAAOd;AAAA,MACrD;AAAA,IACA;AAUA,IAAAQ,EAAO,OAAO,SAAUR,GAAOiB,GAAkBH,GAAQ;AACvD,aAAOK,EAAKnB,GAAOiB,GAAkBH,CAAM;AAAA,IAC7C,GAIA,OAAO,eAAeN,EAAO,WAAW,WAAW,SAAS,GAC5D,OAAO,eAAeA,GAAQ,UAAU;AAExC,aAASmB,EAAYC,GAAM;AACzB,UAAI,OAAOA,KAAS;AAClB,cAAM,IAAI,UAAU,wCAAwC;AACvD,UAAIA,IAAO;AAChB,cAAM,IAAI,WAAW,gBAAgBA,IAAO,gCAAgC;AAAA,IAEhF;AAEA,aAASC,EAAOD,GAAME,GAAMC,GAAU;AAEpC,aADAJ,EAAWC,CAAI,GACXA,KAAQ,IACHf,EAAae,CAAI,IAEtBE,MAAS,SAIJ,OAAOC,KAAa,WACvBlB,EAAae,CAAI,EAAE,KAAKE,GAAMC,CAAQ,IACtClB,EAAae,CAAI,EAAE,KAAKE,CAAI,IAE3BjB,EAAae,CAAI;AAAA,IAC1B;AAMA,IAAApB,EAAO,QAAQ,SAAUoB,GAAME,GAAMC,GAAU;AAC7C,aAAOF,EAAMD,GAAME,GAAMC,CAAQ;AAAA,IACnC;AAEA,aAASb,EAAaU,GAAM;AAC1B,aAAAD,EAAWC,CAAI,GACRf,EAAae,IAAO,IAAI,IAAII,EAAQJ,CAAI,IAAI,CAAC;AAAA,IACtD;AAKA,IAAApB,EAAO,cAAc,SAAUoB,GAAM;AACnC,aAAOV,EAAYU,CAAI;AAAA,IACzB,GAIApB,EAAO,kBAAkB,SAAUoB,GAAM;AACvC,aAAOV,EAAYU,CAAI;AAAA,IACzB;AAEA,aAASR,EAAYa,GAAQF,GAAU;AAKrC,WAJI,OAAOA,KAAa,YAAYA,MAAa,QAC/CA,IAAW,SAGT,CAACvB,EAAO,WAAWuB,CAAQ;AAC7B,cAAM,IAAI,UAAU,uBAAuBA,CAAQ;AAGrD,YAAMjB,IAASzD,EAAW4E,GAAQF,CAAQ,IAAI;AAC9C,UAAIhB,IAAMF,EAAaC,CAAM;AAE7B,YAAMoB,IAASnB,EAAI,MAAMkB,GAAQF,CAAQ;AAEzC,aAAIG,MAAWpB,MAIbC,IAAMA,EAAI,MAAM,GAAGmB,CAAM,IAGpBnB;AAAA,IACT;AAEA,aAASoB,EAAeC,GAAO;AAC7B,YAAMtB,IAASsB,EAAM,SAAS,IAAI,IAAIJ,EAAQI,EAAM,MAAM,IAAI,GACxDrB,IAAMF,EAAaC,CAAM;AAC/B,eAASlD,IAAI,GAAGA,IAAIkD,GAAQlD,KAAK;AAC/B,QAAAmD,EAAInD,CAAC,IAAIwE,EAAMxE,CAAC,IAAI;AAEtB,aAAOmD;AAAA,IACT;AAEA,aAASM,EAAegB,GAAW;AACjC,UAAIf,EAAWe,GAAW,UAAU,GAAG;AACrC,cAAMC,IAAO,IAAI,WAAWD,CAAS;AACrC,eAAOd,EAAgBe,EAAK,QAAQA,EAAK,YAAYA,EAAK,UAAU;AAAA,MACxE;AACE,aAAOH,EAAcE,CAAS;AAAA,IAChC;AAEA,aAASd,EAAiBa,GAAOG,GAAYzB,GAAQ;AACnD,UAAIyB,IAAa,KAAKH,EAAM,aAAaG;AACvC,cAAM,IAAI,WAAW,sCAAsC;AAG7D,UAAIH,EAAM,aAAaG,KAAczB,KAAU;AAC7C,cAAM,IAAI,WAAW,sCAAsC;AAG7D,UAAIC;AACJ,aAAIwB,MAAe,UAAazB,MAAW,SACzCC,IAAM,IAAI,WAAWqB,CAAK,IACjBtB,MAAW,SACpBC,IAAM,IAAI,WAAWqB,GAAOG,CAAU,IAEtCxB,IAAM,IAAI,WAAWqB,GAAOG,GAAYzB,CAAM,GAIhD,OAAO,eAAeC,GAAKP,EAAO,SAAS,GAEpCO;AAAA,IACT;AAEA,aAASW,EAAYc,GAAK;AACxB,UAAIhC,EAAO,SAASgC,CAAG,GAAG;AACxB,cAAM3E,IAAMmE,EAAQQ,EAAI,MAAM,IAAI,GAC5BzB,IAAMF,EAAahD,CAAG;AAE5B,eAAIkD,EAAI,WAAW,KAInByB,EAAI,KAAKzB,GAAK,GAAG,GAAGlD,CAAG,GAChBkD;AAAA,MACX;AAEE,UAAIyB,EAAI,WAAW;AACjB,eAAI,OAAOA,EAAI,UAAW,YAAYC,GAAYD,EAAI,MAAM,IACnD3B,EAAa,CAAC,IAEhBsB,EAAcK,CAAG;AAG1B,UAAIA,EAAI,SAAS,YAAY,MAAM,QAAQA,EAAI,IAAI;AACjD,eAAOL,EAAcK,EAAI,IAAI;AAAA,IAEjC;AAEA,aAASR,EAASlB,GAAQ;AAGxB,UAAIA,KAAUJ;AACZ,cAAM,IAAI,WAAW,4DACaA,EAAa,SAAS,EAAE,IAAI,QAAQ;AAExE,aAAOI,IAAS;AAAA,IAClB;AAEA,aAASL,EAAYK,GAAQ;AAC3B,aAAI,CAACA,KAAUA,MACbA,IAAS,IAEJN,EAAO,MAAM,CAACM,CAAM;AAAA,IAC7B;AAEA,IAAAN,EAAO,WAAW,SAAmBiB,GAAG;AACtC,aAAOA,KAAK,QAAQA,EAAE,cAAc,MAClCA,MAAMjB,EAAO;AAAA,IACjB,GAEAA,EAAO,UAAU,SAAkBkC,GAAGjB,GAAG;AAGvC,UAFIH,EAAWoB,GAAG,UAAU,MAAGA,IAAIlC,EAAO,KAAKkC,GAAGA,EAAE,QAAQA,EAAE,UAAU,IACpEpB,EAAWG,GAAG,UAAU,MAAGA,IAAIjB,EAAO,KAAKiB,GAAGA,EAAE,QAAQA,EAAE,UAAU,IACpE,CAACjB,EAAO,SAASkC,CAAC,KAAK,CAAClC,EAAO,SAASiB,CAAC;AAC3C,cAAM,IAAI;AAAA,UACR;AAAA,QACN;AAGE,UAAIiB,MAAMjB,EAAG,QAAO;AAEpB,UAAIkB,IAAID,EAAE,QACNE,IAAInB,EAAE;AAEV,eAAS7D,IAAI,GAAGC,IAAM,KAAK,IAAI8E,GAAGC,CAAC,GAAGhF,IAAIC,GAAK,EAAED;AAC/C,YAAI8E,EAAE9E,CAAC,MAAM6D,EAAE7D,CAAC,GAAG;AACjB,UAAA+E,IAAID,EAAE9E,CAAC,GACPgF,IAAInB,EAAE7D,CAAC;AACP;AAAA,QACN;AAGE,aAAI+E,IAAIC,IAAU,KACdA,IAAID,IAAU,IACX;AAAA,IACT,GAEAnC,EAAO,aAAa,SAAqBuB,GAAU;AACjD,cAAQ,OAAOA,CAAQ,EAAE,YAAW,GAAE;AAAA,QACpC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACb;AAAA,IACA,GAEAvB,EAAO,SAAS,SAAiBqC,GAAM/B,GAAQ;AAC7C,UAAI,CAAC,MAAM,QAAQ+B,CAAI;AACrB,cAAM,IAAI,UAAU,6CAA6C;AAGnE,UAAIA,EAAK,WAAW;AAClB,eAAOrC,EAAO,MAAM,CAAC;AAGvB,UAAI5C;AACJ,UAAIkD,MAAW;AAEb,aADAA,IAAS,GACJlD,IAAI,GAAGA,IAAIiF,EAAK,QAAQ,EAAEjF;AAC7B,UAAAkD,KAAU+B,EAAKjF,CAAC,EAAE;AAItB,YAAMuB,IAASqB,EAAO,YAAYM,CAAM;AACxC,UAAIgC,IAAM;AACV,WAAKlF,IAAI,GAAGA,IAAIiF,EAAK,QAAQ,EAAEjF,GAAG;AAChC,YAAImD,IAAM8B,EAAKjF,CAAC;AAChB,YAAI0D,EAAWP,GAAK,UAAU;AAC5B,UAAI+B,IAAM/B,EAAI,SAAS5B,EAAO,UACvBqB,EAAO,SAASO,CAAG,MAAGA,IAAMP,EAAO,KAAKO,CAAG,IAChDA,EAAI,KAAK5B,GAAQ2D,CAAG,KAEpB,WAAW,UAAU,IAAI;AAAA,YACvB3D;AAAA,YACA4B;AAAA,YACA+B;AAAA,UACV;AAAA,iBAEgBtC,EAAO,SAASO,CAAG;AAG7B,UAAAA,EAAI,KAAK5B,GAAQ2D,CAAG;AAAA;AAFpB,gBAAM,IAAI,UAAU,6CAA6C;AAInE,QAAAA,KAAO/B,EAAI;AAAA,MACf;AACE,aAAO5B;AAAA,IACT;AAEA,aAAS9B,EAAY4E,GAAQF,GAAU;AACrC,UAAIvB,EAAO,SAASyB,CAAM;AACxB,eAAOA,EAAO;AAEhB,UAAI,YAAY,OAAOA,CAAM,KAAKX,EAAWW,GAAQ,WAAW;AAC9D,eAAOA,EAAO;AAEhB,UAAI,OAAOA,KAAW;AACpB,cAAM,IAAI;AAAA,UACR,6FACmB,OAAOA;AAAA,QAChC;AAGE,YAAMpE,IAAMoE,EAAO,QACbc,IAAa,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM;AAC5D,UAAI,CAACA,KAAalF,MAAQ,EAAG,QAAO;AAGpC,UAAImF,IAAc;AAClB;AACE,gBAAQjB,GAAQ;AAAA,UACd,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOlE;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AACH,mBAAOoF,GAAYhB,CAAM,EAAE;AAAA,UAC7B,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOpE,IAAM;AAAA,UACf,KAAK;AACH,mBAAOA,MAAQ;AAAA,UACjB,KAAK;AACH,mBAAOqF,GAAcjB,CAAM,EAAE;AAAA,UAC/B;AACE,gBAAIe;AACF,qBAAOD,IAAY,KAAKE,GAAYhB,CAAM,EAAE;AAE9C,YAAAF,KAAY,KAAKA,GAAU,YAAW,GACtCiB,IAAc;AAAA,QACtB;AAAA,IAEA;AACA,IAAAxC,EAAO,aAAanD;AAEpB,aAAS8F,EAAcpB,GAAUpD,GAAOC,GAAK;AAC3C,UAAIoE,IAAc;AA8BlB,WArBIrE,MAAU,UAAaA,IAAQ,OACjCA,IAAQ,IAINA,IAAQ,KAAK,YAIbC,MAAQ,UAAaA,IAAM,KAAK,YAClCA,IAAM,KAAK,SAGTA,KAAO,OAKXA,OAAS,GACTD,OAAW,GAEPC,KAAOD;AACT,eAAO;AAKT,WAFKoD,MAAUA,IAAW;AAGxB,gBAAQA,GAAQ;AAAA,UACd,KAAK;AACH,mBAAOqB,EAAS,MAAMzE,GAAOC,CAAG;AAAA,UAElC,KAAK;AAAA,UACL,KAAK;AACH,mBAAOyE,GAAU,MAAM1E,GAAOC,CAAG;AAAA,UAEnC,KAAK;AACH,mBAAO0E,EAAW,MAAM3E,GAAOC,CAAG;AAAA,UAEpC,KAAK;AAAA,UACL,KAAK;AACH,mBAAO2E,GAAY,MAAM5E,GAAOC,CAAG;AAAA,UAErC,KAAK;AACH,mBAAO4E,GAAY,MAAM7E,GAAOC,CAAG;AAAA,UAErC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO6E,GAAa,MAAM9E,GAAOC,CAAG;AAAA,UAEtC;AACE,gBAAIoE,EAAa,OAAM,IAAI,UAAU,uBAAuBjB,CAAQ;AACpE,YAAAA,KAAYA,IAAW,IAAI,YAAW,GACtCiB,IAAc;AAAA,QACtB;AAAA,IAEA;AAQA,IAAAxC,EAAO,UAAU,YAAY;AAE7B,aAASkD,EAAMjC,GAAGkC,GAAGlE,GAAG;AACtB,YAAM7B,IAAI6D,EAAEkC,CAAC;AACb,MAAAlC,EAAEkC,CAAC,IAAIlC,EAAEhC,CAAC,GACVgC,EAAEhC,CAAC,IAAI7B;AAAA,IACT;AAEA,IAAA4C,EAAO,UAAU,SAAS,WAAmB;AAC3C,YAAM3C,IAAM,KAAK;AACjB,UAAIA,IAAM,MAAM;AACd,cAAM,IAAI,WAAW,2CAA2C;AAElE,eAASD,IAAI,GAAGA,IAAIC,GAAKD,KAAK;AAC5B,QAAA8F,EAAK,MAAM9F,GAAGA,IAAI,CAAC;AAErB,aAAO;AAAA,IACT,GAEA4C,EAAO,UAAU,SAAS,WAAmB;AAC3C,YAAM3C,IAAM,KAAK;AACjB,UAAIA,IAAM,MAAM;AACd,cAAM,IAAI,WAAW,2CAA2C;AAElE,eAASD,IAAI,GAAGA,IAAIC,GAAKD,KAAK;AAC5B,QAAA8F,EAAK,MAAM9F,GAAGA,IAAI,CAAC,GACnB8F,EAAK,MAAM9F,IAAI,GAAGA,IAAI,CAAC;AAEzB,aAAO;AAAA,IACT,GAEA4C,EAAO,UAAU,SAAS,WAAmB;AAC3C,YAAM3C,IAAM,KAAK;AACjB,UAAIA,IAAM,MAAM;AACd,cAAM,IAAI,WAAW,2CAA2C;AAElE,eAASD,IAAI,GAAGA,IAAIC,GAAKD,KAAK;AAC5B,QAAA8F,EAAK,MAAM9F,GAAGA,IAAI,CAAC,GACnB8F,EAAK,MAAM9F,IAAI,GAAGA,IAAI,CAAC,GACvB8F,EAAK,MAAM9F,IAAI,GAAGA,IAAI,CAAC,GACvB8F,EAAK,MAAM9F,IAAI,GAAGA,IAAI,CAAC;AAEzB,aAAO;AAAA,IACT,GAEA4C,EAAO,UAAU,WAAW,WAAqB;AAC/C,YAAMM,IAAS,KAAK;AACpB,aAAIA,MAAW,IAAU,KACrB,UAAU,WAAW,IAAUuC,GAAU,MAAM,GAAGvC,CAAM,IACrDqC,EAAa,MAAM,MAAM,SAAS;AAAA,IAC3C,GAEA3C,EAAO,UAAU,iBAAiBA,EAAO,UAAU,UAEnDA,EAAO,UAAU,SAAS,SAAiBiB,GAAG;AAC5C,UAAI,CAACjB,EAAO,SAASiB,CAAC,EAAG,OAAM,IAAI,UAAU,2BAA2B;AACxE,aAAI,SAASA,IAAU,KAChBjB,EAAO,QAAQ,MAAMiB,CAAC,MAAM;AAAA,IACrC,GAEAjB,EAAO,UAAU,UAAU,WAAoB;AAC7C,UAAIoD,IAAM;AACV,YAAMC,IAAMtD,EAAQ;AACpB,aAAAqD,IAAM,KAAK,SAAS,OAAO,GAAGC,CAAG,EAAE,QAAQ,WAAW,KAAK,EAAE,KAAI,GAC7D,KAAK,SAASA,MAAKD,KAAO,UACvB,aAAaA,IAAM;AAAA,IAC5B,GACItD,MACFE,EAAO,UAAUF,CAAmB,IAAIE,EAAO,UAAU,UAG3DA,EAAO,UAAU,UAAU,SAAkBsD,GAAQnF,GAAOC,GAAKmF,GAAWC,GAAS;AAInF,UAHI1C,EAAWwC,GAAQ,UAAU,MAC/BA,IAAStD,EAAO,KAAKsD,GAAQA,EAAO,QAAQA,EAAO,UAAU,IAE3D,CAACtD,EAAO,SAASsD,CAAM;AACzB,cAAM,IAAI;AAAA,UACR,mFACoB,OAAOA;AAAA,QACjC;AAgBE,UAbInF,MAAU,WACZA,IAAQ,IAENC,MAAQ,WACVA,IAAMkF,IAASA,EAAO,SAAS,IAE7BC,MAAc,WAChBA,IAAY,IAEVC,MAAY,WACdA,IAAU,KAAK,SAGbrF,IAAQ,KAAKC,IAAMkF,EAAO,UAAUC,IAAY,KAAKC,IAAU,KAAK;AACtE,cAAM,IAAI,WAAW,oBAAoB;AAG3C,UAAID,KAAaC,KAAWrF,KAASC;AACnC,eAAO;AAET,UAAImF,KAAaC;AACf,eAAO;AAET,UAAIrF,KAASC;AACX,eAAO;AAQT,UALAD,OAAW,GACXC,OAAS,GACTmF,OAAe,GACfC,OAAa,GAET,SAASF,EAAQ,QAAO;AAE5B,UAAInB,IAAIqB,IAAUD,GACdnB,IAAIhE,IAAMD;AACd,YAAMd,IAAM,KAAK,IAAI8E,GAAGC,CAAC,GAEnBqB,IAAW,KAAK,MAAMF,GAAWC,CAAO,GACxCE,IAAaJ,EAAO,MAAMnF,GAAOC,CAAG;AAE1C,eAAShB,IAAI,GAAGA,IAAIC,GAAK,EAAED;AACzB,YAAIqG,EAASrG,CAAC,MAAMsG,EAAWtG,CAAC,GAAG;AACjC,UAAA+E,IAAIsB,EAASrG,CAAC,GACdgF,IAAIsB,EAAWtG,CAAC;AAChB;AAAA,QACN;AAGE,aAAI+E,IAAIC,IAAU,KACdA,IAAID,IAAU,IACX;AAAA,IACT;AAWA,aAASwB,EAAsBhF,GAAQiF,GAAK7B,GAAYR,GAAUsC,GAAK;AAErE,UAAIlF,EAAO,WAAW,EAAG,QAAO;AAmBhC,UAhBI,OAAOoD,KAAe,YACxBR,IAAWQ,GACXA,IAAa,KACJA,IAAa,aACtBA,IAAa,aACJA,IAAa,gBACtBA,IAAa,cAEfA,IAAa,CAACA,GACVE,GAAYF,CAAU,MAExBA,IAAa8B,IAAM,IAAKlF,EAAO,SAAS,IAItCoD,IAAa,MAAGA,IAAapD,EAAO,SAASoD,IAC7CA,KAAcpD,EAAO,QAAQ;AAC/B,YAAIkF,EAAK,QAAO;AACX,QAAA9B,IAAapD,EAAO,SAAS;AAAA,MACtC,WAAaoD,IAAa;AACtB,YAAI8B,EAAK,CAAA9B,IAAa;AAAA,YACjB,QAAO;AASd,UALI,OAAO6B,KAAQ,aACjBA,IAAM5D,EAAO,KAAK4D,GAAKrC,CAAQ,IAI7BvB,EAAO,SAAS4D,CAAG;AAErB,eAAIA,EAAI,WAAW,IACV,KAEFE,EAAanF,GAAQiF,GAAK7B,GAAYR,GAAUsC,CAAG;AACrD,UAAI,OAAOD,KAAQ;AAExB,eADAA,IAAMA,IAAM,KACR,OAAO,WAAW,UAAU,WAAY,aACtCC,IACK,WAAW,UAAU,QAAQ,KAAKlF,GAAQiF,GAAK7B,CAAU,IAEzD,WAAW,UAAU,YAAY,KAAKpD,GAAQiF,GAAK7B,CAAU,IAGjE+B,EAAanF,GAAQ,CAACiF,CAAG,GAAG7B,GAAYR,GAAUsC,CAAG;AAG9D,YAAM,IAAI,UAAU,sCAAsC;AAAA,IAC5D;AAEA,aAASC,EAAcjG,GAAK+F,GAAK7B,GAAYR,GAAUsC,GAAK;AAC1D,UAAIE,IAAY,GACZC,IAAYnG,EAAI,QAChBoG,IAAYL,EAAI;AAEpB,UAAIrC,MAAa,WACfA,IAAW,OAAOA,CAAQ,EAAE,YAAW,GACnCA,MAAa,UAAUA,MAAa,WACpCA,MAAa,aAAaA,MAAa,aAAY;AACrD,YAAI1D,EAAI,SAAS,KAAK+F,EAAI,SAAS;AACjC,iBAAO;AAET,QAAAG,IAAY,GACZC,KAAa,GACbC,KAAa,GACblC,KAAc;AAAA,MACpB;AAGE,eAASmC,EAAM3D,GAAKnD,GAAG;AACrB,eAAI2G,MAAc,IACTxD,EAAInD,CAAC,IAELmD,EAAI,aAAanD,IAAI2G,CAAS;AAAA,MAE3C;AAEE,UAAI3G;AACJ,UAAIyG,GAAK;AACP,YAAIM,IAAa;AACjB,aAAK/G,IAAI2E,GAAY3E,IAAI4G,GAAW5G;AAClC,cAAI8G,EAAKrG,GAAKT,CAAC,MAAM8G,EAAKN,GAAKO,MAAe,KAAK,IAAI/G,IAAI+G,CAAU;AAEnE,gBADIA,MAAe,OAAIA,IAAa/G,IAChCA,IAAI+G,IAAa,MAAMF,EAAW,QAAOE,IAAaJ;AAAA;AAE1D,YAAII,MAAe,OAAI/G,KAAKA,IAAI+G,IAChCA,IAAa;AAAA,MAGrB;AAEI,aADIpC,IAAakC,IAAYD,MAAWjC,IAAaiC,IAAYC,IAC5D7G,IAAI2E,GAAY3E,KAAK,GAAGA,KAAK;AAChC,cAAIgH,IAAQ;AACZ,mBAASC,IAAI,GAAGA,IAAIJ,GAAWI;AAC7B,gBAAIH,EAAKrG,GAAKT,IAAIiH,CAAC,MAAMH,EAAKN,GAAKS,CAAC,GAAG;AACrC,cAAAD,IAAQ;AACR;AAAA,YACV;AAEM,cAAIA,EAAO,QAAOhH;AAAA,QACxB;AAGE,aAAO;AAAA,IACT;AAEA,IAAA4C,EAAO,UAAU,WAAW,SAAmB4D,GAAK7B,GAAYR,GAAU;AACxE,aAAO,KAAK,QAAQqC,GAAK7B,GAAYR,CAAQ,MAAM;AAAA,IACrD,GAEAvB,EAAO,UAAU,UAAU,SAAkB4D,GAAK7B,GAAYR,GAAU;AACtE,aAAOoC,EAAqB,MAAMC,GAAK7B,GAAYR,GAAU,EAAI;AAAA,IACnE,GAEAvB,EAAO,UAAU,cAAc,SAAsB4D,GAAK7B,GAAYR,GAAU;AAC9E,aAAOoC,EAAqB,MAAMC,GAAK7B,GAAYR,GAAU,EAAK;AAAA,IACpE;AAEA,aAAS+C,EAAU/D,GAAKkB,GAAQ7C,GAAQ0B,GAAQ;AAC9C,MAAA1B,IAAS,OAAOA,CAAM,KAAK;AAC3B,YAAM2F,IAAYhE,EAAI,SAAS3B;AAC/B,MAAK0B,KAGHA,IAAS,OAAOA,CAAM,GAClBA,IAASiE,MACXjE,IAASiE,MAJXjE,IAASiE;AAQX,YAAMC,IAAS/C,EAAO;AAEtB,MAAInB,IAASkE,IAAS,MACpBlE,IAASkE,IAAS;AAEpB,UAAIpH;AACJ,WAAKA,IAAI,GAAGA,IAAIkD,GAAQ,EAAElD,GAAG;AAC3B,cAAMqH,IAAS,SAAShD,EAAO,OAAOrE,IAAI,GAAG,CAAC,GAAG,EAAE;AACnD,YAAI6E,GAAYwC,CAAM,EAAG,QAAOrH;AAChC,QAAAmD,EAAI3B,IAASxB,CAAC,IAAIqH;AAAA,MACtB;AACE,aAAOrH;AAAA,IACT;AAEA,aAASsH,EAAWnE,GAAKkB,GAAQ7C,GAAQ0B,GAAQ;AAC/C,aAAOqE,EAAWlC,GAAYhB,GAAQlB,EAAI,SAAS3B,CAAM,GAAG2B,GAAK3B,GAAQ0B,CAAM;AAAA,IACjF;AAEA,aAASsE,EAAYrE,GAAKkB,GAAQ7C,GAAQ0B,GAAQ;AAChD,aAAOqE,EAAWE,EAAapD,CAAM,GAAGlB,GAAK3B,GAAQ0B,CAAM;AAAA,IAC7D;AAEA,aAASwE,EAAavE,GAAKkB,GAAQ7C,GAAQ0B,GAAQ;AACjD,aAAOqE,EAAWjC,GAAcjB,CAAM,GAAGlB,GAAK3B,GAAQ0B,CAAM;AAAA,IAC9D;AAEA,aAASyE,EAAWxE,GAAKkB,GAAQ7C,GAAQ0B,GAAQ;AAC/C,aAAOqE,EAAWK,GAAevD,GAAQlB,EAAI,SAAS3B,CAAM,GAAG2B,GAAK3B,GAAQ0B,CAAM;AAAA,IACpF;AAEA,IAAAN,EAAO,UAAU,QAAQ,SAAgByB,GAAQ7C,GAAQ0B,GAAQiB,GAAU;AAEzE,UAAI3C,MAAW;AACb,QAAA2C,IAAW,QACXjB,IAAS,KAAK,QACd1B,IAAS;AAAA,eAEA0B,MAAW,UAAa,OAAO1B,KAAW;AACnD,QAAA2C,IAAW3C,GACX0B,IAAS,KAAK,QACd1B,IAAS;AAAA,eAEA,SAASA,CAAM;AACxB,QAAAA,IAASA,MAAW,GAChB,SAAS0B,CAAM,KACjBA,IAASA,MAAW,GAChBiB,MAAa,WAAWA,IAAW,YAEvCA,IAAWjB,GACXA,IAAS;AAAA;AAGX,cAAM,IAAI;AAAA,UACR;AAAA,QACN;AAGE,YAAMiE,IAAY,KAAK,SAAS3F;AAGhC,WAFI0B,MAAW,UAAaA,IAASiE,OAAWjE,IAASiE,IAEpD9C,EAAO,SAAS,MAAMnB,IAAS,KAAK1B,IAAS,MAAOA,IAAS,KAAK;AACrE,cAAM,IAAI,WAAW,wCAAwC;AAG/D,MAAK2C,MAAUA,IAAW;AAE1B,UAAIiB,IAAc;AAClB;AACE,gBAAQjB,GAAQ;AAAA,UACd,KAAK;AACH,mBAAO+C,EAAS,MAAM7C,GAAQ7C,GAAQ0B,CAAM;AAAA,UAE9C,KAAK;AAAA,UACL,KAAK;AACH,mBAAOoE,EAAU,MAAMjD,GAAQ7C,GAAQ0B,CAAM;AAAA,UAE/C,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOsE,EAAW,MAAMnD,GAAQ7C,GAAQ0B,CAAM;AAAA,UAEhD,KAAK;AAEH,mBAAOwE,EAAY,MAAMrD,GAAQ7C,GAAQ0B,CAAM;AAAA,UAEjD,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOyE,EAAU,MAAMtD,GAAQ7C,GAAQ0B,CAAM;AAAA,UAE/C;AACE,gBAAIkC,EAAa,OAAM,IAAI,UAAU,uBAAuBjB,CAAQ;AACpE,YAAAA,KAAY,KAAKA,GAAU,YAAW,GACtCiB,IAAc;AAAA,QACtB;AAAA,IAEA,GAEAxC,EAAO,UAAU,SAAS,WAAmB;AAC3C,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,MAAM,UAAU,MAAM,KAAK,KAAK,QAAQ,MAAM,CAAC;AAAA,MACzD;AAAA,IACA;AAEA,aAASgD,GAAazC,GAAKpC,GAAOC,GAAK;AACrC,aAAID,MAAU,KAAKC,MAAQmC,EAAI,SACtBZ,EAAO,cAAcY,CAAG,IAExBZ,EAAO,cAAcY,EAAI,MAAMpC,GAAOC,CAAG,CAAC;AAAA,IAErD;AAEA,aAASyE,GAAWtC,GAAKpC,GAAOC,GAAK;AACnC,MAAAA,IAAM,KAAK,IAAImC,EAAI,QAAQnC,CAAG;AAC9B,YAAM6G,IAAM,CAAA;AAEZ,UAAI7H,IAAIe;AACR,aAAOf,IAAIgB,KAAK;AACd,cAAM8G,IAAY3E,EAAInD,CAAC;AACvB,YAAI+H,IAAY,MACZC,IAAoBF,IAAY,MAChC,IACCA,IAAY,MACT,IACCA,IAAY,MACT,IACA;AAEZ,YAAI9H,IAAIgI,KAAoBhH,GAAK;AAC/B,cAAIiH,GAAYC,GAAWC,GAAYC;AAEvC,kBAAQJ,GAAgB;AAAA,YACtB,KAAK;AACH,cAAIF,IAAY,QACdC,IAAYD;AAEd;AAAA,YACF,KAAK;AACH,cAAAG,IAAa9E,EAAInD,IAAI,CAAC,IACjBiI,IAAa,SAAU,QAC1BG,KAAiBN,IAAY,OAAS,IAAOG,IAAa,IACtDG,IAAgB,QAClBL,IAAYK;AAGhB;AAAA,YACF,KAAK;AACH,cAAAH,IAAa9E,EAAInD,IAAI,CAAC,GACtBkI,IAAY/E,EAAInD,IAAI,CAAC,IAChBiI,IAAa,SAAU,QAASC,IAAY,SAAU,QACzDE,KAAiBN,IAAY,OAAQ,MAAOG,IAAa,OAAS,IAAOC,IAAY,IACjFE,IAAgB,SAAUA,IAAgB,SAAUA,IAAgB,WACtEL,IAAYK;AAGhB;AAAA,YACF,KAAK;AACH,cAAAH,IAAa9E,EAAInD,IAAI,CAAC,GACtBkI,IAAY/E,EAAInD,IAAI,CAAC,GACrBmI,IAAahF,EAAInD,IAAI,CAAC,IACjBiI,IAAa,SAAU,QAASC,IAAY,SAAU,QAASC,IAAa,SAAU,QACzFC,KAAiBN,IAAY,OAAQ,MAAQG,IAAa,OAAS,MAAOC,IAAY,OAAS,IAAOC,IAAa,IAC/GC,IAAgB,SAAUA,IAAgB,YAC5CL,IAAYK;AAAA,UAG1B;AAAA,QACA;AAEI,QAAIL,MAAc,QAGhBA,IAAY,OACZC,IAAmB,KACVD,IAAY,UAErBA,KAAa,OACbF,EAAI,KAAKE,MAAc,KAAK,OAAQ,KAAM,GAC1CA,IAAY,QAASA,IAAY,OAGnCF,EAAI,KAAKE,CAAS,GAClB/H,KAAKgI;AAAA,MACT;AAEE,aAAOK,GAAsBR,CAAG;AAAA,IAClC;AAKA,UAAMS,KAAuB;AAE7B,aAASD,GAAuBE,GAAY;AAC1C,YAAMtI,IAAMsI,EAAW;AACvB,UAAItI,KAAOqI;AACT,eAAO,OAAO,aAAa,MAAM,QAAQC,CAAU;AAIrD,UAAIV,IAAM,IACN7H,IAAI;AACR,aAAOA,IAAIC;AACT,QAAA4H,KAAO,OAAO,aAAa;AAAA,UACzB;AAAA,UACAU,EAAW,MAAMvI,GAAGA,KAAKsI,EAAoB;AAAA,QACnD;AAEE,aAAOT;AAAA,IACT;AAEA,aAASnC,EAAYvC,GAAKpC,GAAOC,GAAK;AACpC,UAAIwH,IAAM;AACV,MAAAxH,IAAM,KAAK,IAAImC,EAAI,QAAQnC,CAAG;AAE9B,eAAShB,IAAIe,GAAOf,IAAIgB,GAAK,EAAEhB;AAC7B,QAAAwI,KAAO,OAAO,aAAarF,EAAInD,CAAC,IAAI,GAAI;AAE1C,aAAOwI;AAAA,IACT;AAEA,aAAS7C,GAAaxC,GAAKpC,GAAOC,GAAK;AACrC,UAAIwH,IAAM;AACV,MAAAxH,IAAM,KAAK,IAAImC,EAAI,QAAQnC,CAAG;AAE9B,eAAShB,IAAIe,GAAOf,IAAIgB,GAAK,EAAEhB;AAC7B,QAAAwI,KAAO,OAAO,aAAarF,EAAInD,CAAC,CAAC;AAEnC,aAAOwI;AAAA,IACT;AAEA,aAAShD,EAAUrC,GAAKpC,GAAOC,GAAK;AAClC,YAAMf,IAAMkD,EAAI;AAEhB,OAAI,CAACpC,KAASA,IAAQ,OAAGA,IAAQ,KAC7B,CAACC,KAAOA,IAAM,KAAKA,IAAMf,OAAKe,IAAMf;AAExC,UAAIwI,IAAM;AACV,eAASzI,IAAIe,GAAOf,IAAIgB,GAAK,EAAEhB;AAC7B,QAAAyI,KAAOC,GAAoBvF,EAAInD,CAAC,CAAC;AAEnC,aAAOyI;AAAA,IACT;AAEA,aAAS5C,GAAc1C,GAAKpC,GAAOC,GAAK;AACtC,YAAM2H,IAAQxF,EAAI,MAAMpC,GAAOC,CAAG;AAClC,UAAI6G,IAAM;AAEV,eAAS7H,IAAI,GAAGA,IAAI2I,EAAM,SAAS,GAAG3I,KAAK;AACzC,QAAA6H,KAAO,OAAO,aAAac,EAAM3I,CAAC,IAAK2I,EAAM3I,IAAI,CAAC,IAAI,GAAI;AAE5D,aAAO6H;AAAA,IACT;AAEA,IAAAjF,EAAO,UAAU,QAAQ,SAAgB7B,GAAOC,GAAK;AACnD,YAAMf,IAAM,KAAK;AACjB,MAAAc,IAAQ,CAAC,CAACA,GACVC,IAAMA,MAAQ,SAAYf,IAAM,CAAC,CAACe,GAE9BD,IAAQ,KACVA,KAASd,GACLc,IAAQ,MAAGA,IAAQ,MACdA,IAAQd,MACjBc,IAAQd,IAGNe,IAAM,KACRA,KAAOf,GACHe,IAAM,MAAGA,IAAM,MACVA,IAAMf,MACfe,IAAMf,IAGJe,IAAMD,MAAOC,IAAMD;AAEvB,YAAM6H,IAAS,KAAK,SAAS7H,GAAOC,CAAG;AAEvC,oBAAO,eAAe4H,GAAQhG,EAAO,SAAS,GAEvCgG;AAAA,IACT;AAKA,aAASC,EAAarH,GAAQsH,GAAK5F,GAAQ;AACzC,UAAK1B,IAAS,MAAO,KAAKA,IAAS,EAAG,OAAM,IAAI,WAAW,oBAAoB;AAC/E,UAAIA,IAASsH,IAAM5F,EAAQ,OAAM,IAAI,WAAW,uCAAuC;AAAA,IACzF;AAEA,IAAAN,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAa,SAAqBpB,GAAQ/B,GAAYsJ,GAAU;AAC/E,MAAAvH,IAASA,MAAW,GACpB/B,IAAaA,MAAe,GACvBsJ,KAAUF,EAAYrH,GAAQ/B,GAAY,KAAK,MAAM;AAE1D,UAAI+G,IAAM,KAAKhF,CAAM,GACjBwH,IAAM,GACNhJ,IAAI;AACR,aAAO,EAAEA,IAAIP,MAAeuJ,KAAO;AACjC,QAAAxC,KAAO,KAAKhF,IAASxB,CAAC,IAAIgJ;AAG5B,aAAOxC;AAAA,IACT,GAEA5D,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAa,SAAqBpB,GAAQ/B,GAAYsJ,GAAU;AAC/E,MAAAvH,IAASA,MAAW,GACpB/B,IAAaA,MAAe,GACvBsJ,KACHF,EAAYrH,GAAQ/B,GAAY,KAAK,MAAM;AAG7C,UAAI+G,IAAM,KAAKhF,IAAS,EAAE/B,CAAU,GAChCuJ,IAAM;AACV,aAAOvJ,IAAa,MAAMuJ,KAAO;AAC/B,QAAAxC,KAAO,KAAKhF,IAAS,EAAE/B,CAAU,IAAIuJ;AAGvC,aAAOxC;AAAA,IACT,GAEA5D,EAAO,UAAU,YACjBA,EAAO,UAAU,YAAY,SAAoBpB,GAAQuH,GAAU;AACjE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAC1C,KAAKA,CAAM;AAAA,IACpB,GAEAoB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBpB,GAAQuH,GAAU;AACvE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAC1C,KAAKA,CAAM,IAAK,KAAKA,IAAS,CAAC,KAAK;AAAA,IAC7C,GAEAoB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBpB,GAAQuH,GAAU;AACvE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GACzC,KAAKA,CAAM,KAAK,IAAK,KAAKA,IAAS,CAAC;AAAA,IAC9C,GAEAoB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBpB,GAAQuH,GAAU;AACvE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,IAExC,KAAKA,CAAM,IACf,KAAKA,IAAS,CAAC,KAAK,IACpB,KAAKA,IAAS,CAAC,KAAK,MACpB,KAAKA,IAAS,CAAC,IAAI;AAAA,IAC1B,GAEAoB,EAAO,UAAU,eACjBA,EAAO,UAAU,eAAe,SAAuBpB,GAAQuH,GAAU;AACvE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAEzC,KAAKA,CAAM,IAAI,YACnB,KAAKA,IAAS,CAAC,KAAK,KACrB,KAAKA,IAAS,CAAC,KAAK,IACrB,KAAKA,IAAS,CAAC;AAAA,IACnB,GAEAoB,EAAO,UAAU,kBAAkBqG,GAAmB,SAA0BzH,GAAQ;AACtF,MAAAA,IAASA,MAAW,GACpB0H,GAAe1H,GAAQ,QAAQ;AAC/B,YAAM2H,IAAQ,KAAK3H,CAAM,GACnB4H,IAAO,KAAK5H,IAAS,CAAC;AAC5B,OAAI2H,MAAU,UAAaC,MAAS,WAClCC,EAAY7H,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAM8H,IAAKH,IACT,KAAK,EAAE3H,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IAElB+H,IAAK,KAAK,EAAE/H,CAAM,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB4H,IAAO,KAAK;AAEd,aAAO,OAAOE,CAAE,KAAK,OAAOC,CAAE,KAAK,OAAO,EAAE;AAAA,IAC9C,CAAC,GAED3G,EAAO,UAAU,kBAAkBqG,GAAmB,SAA0BzH,GAAQ;AACtF,MAAAA,IAASA,MAAW,GACpB0H,GAAe1H,GAAQ,QAAQ;AAC/B,YAAM2H,IAAQ,KAAK3H,CAAM,GACnB4H,IAAO,KAAK5H,IAAS,CAAC;AAC5B,OAAI2H,MAAU,UAAaC,MAAS,WAClCC,EAAY7H,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAM+H,IAAKJ,IAAQ,KAAK,KACtB,KAAK,EAAE3H,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,GAET8H,IAAK,KAAK,EAAE9H,CAAM,IAAI,KAAK,KAC/B,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB4H;AAEF,cAAQ,OAAOG,CAAE,KAAK,OAAO,EAAE,KAAK,OAAOD,CAAE;AAAA,IAC/C,CAAC,GAED1G,EAAO,UAAU,YAAY,SAAoBpB,GAAQ/B,GAAYsJ,GAAU;AAC7E,MAAAvH,IAASA,MAAW,GACpB/B,IAAaA,MAAe,GACvBsJ,KAAUF,EAAYrH,GAAQ/B,GAAY,KAAK,MAAM;AAE1D,UAAI+G,IAAM,KAAKhF,CAAM,GACjBwH,IAAM,GACNhJ,IAAI;AACR,aAAO,EAAEA,IAAIP,MAAeuJ,KAAO;AACjC,QAAAxC,KAAO,KAAKhF,IAASxB,CAAC,IAAIgJ;AAE5B,aAAAA,KAAO,KAEHxC,KAAOwC,MAAKxC,KAAO,KAAK,IAAI,GAAG,IAAI/G,CAAU,IAE1C+G;AAAA,IACT,GAEA5D,EAAO,UAAU,YAAY,SAAoBpB,GAAQ/B,GAAYsJ,GAAU;AAC7E,MAAAvH,IAASA,MAAW,GACpB/B,IAAaA,MAAe,GACvBsJ,KAAUF,EAAYrH,GAAQ/B,GAAY,KAAK,MAAM;AAE1D,UAAIO,IAAIP,GACJuJ,IAAM,GACNxC,IAAM,KAAKhF,IAAS,EAAExB,CAAC;AAC3B,aAAOA,IAAI,MAAMgJ,KAAO;AACtB,QAAAxC,KAAO,KAAKhF,IAAS,EAAExB,CAAC,IAAIgJ;AAE9B,aAAAA,KAAO,KAEHxC,KAAOwC,MAAKxC,KAAO,KAAK,IAAI,GAAG,IAAI/G,CAAU,IAE1C+G;AAAA,IACT,GAEA5D,EAAO,UAAU,WAAW,SAAmBpB,GAAQuH,GAAU;AAG/D,aAFAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAC3C,KAAKA,CAAM,IAAI,OACZ,MAAO,KAAKA,CAAM,IAAI,KAAK,KADA,KAAKA,CAAM;AAAA,IAEjD,GAEAoB,EAAO,UAAU,cAAc,SAAsBpB,GAAQuH,GAAU;AACrE,MAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM;AACjD,YAAMgF,IAAM,KAAKhF,CAAM,IAAK,KAAKA,IAAS,CAAC,KAAK;AAChD,aAAQgF,IAAM,QAAUA,IAAM,aAAaA;AAAA,IAC7C,GAEA5D,EAAO,UAAU,cAAc,SAAsBpB,GAAQuH,GAAU;AACrE,MAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM;AACjD,YAAMgF,IAAM,KAAKhF,IAAS,CAAC,IAAK,KAAKA,CAAM,KAAK;AAChD,aAAQgF,IAAM,QAAUA,IAAM,aAAaA;AAAA,IAC7C,GAEA5D,EAAO,UAAU,cAAc,SAAsBpB,GAAQuH,GAAU;AACrE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAEzC,KAAKA,CAAM,IAChB,KAAKA,IAAS,CAAC,KAAK,IACpB,KAAKA,IAAS,CAAC,KAAK,KACpB,KAAKA,IAAS,CAAC,KAAK;AAAA,IACzB,GAEAoB,EAAO,UAAU,cAAc,SAAsBpB,GAAQuH,GAAU;AACrE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAEzC,KAAKA,CAAM,KAAK,KACrB,KAAKA,IAAS,CAAC,KAAK,KACpB,KAAKA,IAAS,CAAC,KAAK,IACpB,KAAKA,IAAS,CAAC;AAAA,IACpB,GAEAoB,EAAO,UAAU,iBAAiBqG,GAAmB,SAAyBzH,GAAQ;AACpF,MAAAA,IAASA,MAAW,GACpB0H,GAAe1H,GAAQ,QAAQ;AAC/B,YAAM2H,IAAQ,KAAK3H,CAAM,GACnB4H,IAAO,KAAK5H,IAAS,CAAC;AAC5B,OAAI2H,MAAU,UAAaC,MAAS,WAClCC,EAAY7H,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAMgF,IAAM,KAAKhF,IAAS,CAAC,IACzB,KAAKA,IAAS,CAAC,IAAI,KAAK,IACxB,KAAKA,IAAS,CAAC,IAAI,KAAK,MACvB4H,KAAQ;AAEX,cAAQ,OAAO5C,CAAG,KAAK,OAAO,EAAE,KAC9B,OAAO2C,IACP,KAAK,EAAE3H,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,EAAE;AAAA,IAC5B,CAAC,GAEDoB,EAAO,UAAU,iBAAiBqG,GAAmB,SAAyBzH,GAAQ;AACpF,MAAAA,IAASA,MAAW,GACpB0H,GAAe1H,GAAQ,QAAQ;AAC/B,YAAM2H,IAAQ,KAAK3H,CAAM,GACnB4H,IAAO,KAAK5H,IAAS,CAAC;AAC5B,OAAI2H,MAAU,UAAaC,MAAS,WAClCC,EAAY7H,GAAQ,KAAK,SAAS,CAAC;AAGrC,YAAMgF,KAAO2C,KAAS;AAAA,MACpB,KAAK,EAAE3H,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB,KAAK,EAAEA,CAAM;AAEf,cAAQ,OAAOgF,CAAG,KAAK,OAAO,EAAE,KAC9B,OAAO,KAAK,EAAEhF,CAAM,IAAI,KAAK,KAC7B,KAAK,EAAEA,CAAM,IAAI,KAAK,KACtB,KAAK,EAAEA,CAAM,IAAI,KAAK,IACtB4H,CAAI;AAAA,IACR,CAAC,GAEDxG,EAAO,UAAU,cAAc,SAAsBpB,GAAQuH,GAAU;AACrE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAC1CF,EAAQ,KAAK,MAAME,GAAQ,IAAM,IAAI,CAAC;AAAA,IAC/C,GAEAoB,EAAO,UAAU,cAAc,SAAsBpB,GAAQuH,GAAU;AACrE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAC1CF,EAAQ,KAAK,MAAME,GAAQ,IAAO,IAAI,CAAC;AAAA,IAChD,GAEAoB,EAAO,UAAU,eAAe,SAAuBpB,GAAQuH,GAAU;AACvE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAC1CF,EAAQ,KAAK,MAAME,GAAQ,IAAM,IAAI,CAAC;AAAA,IAC/C,GAEAoB,EAAO,UAAU,eAAe,SAAuBpB,GAAQuH,GAAU;AACvE,aAAAvH,IAASA,MAAW,GACfuH,KAAUF,EAAYrH,GAAQ,GAAG,KAAK,MAAM,GAC1CF,EAAQ,KAAK,MAAME,GAAQ,IAAO,IAAI,CAAC;AAAA,IAChD;AAEA,aAASgI,EAAUrG,GAAKf,GAAOZ,GAAQsH,GAAK7C,GAAKwD,GAAK;AACpD,UAAI,CAAC7G,EAAO,SAASO,CAAG,EAAG,OAAM,IAAI,UAAU,6CAA6C;AAC5F,UAAIf,IAAQ6D,KAAO7D,IAAQqH,EAAK,OAAM,IAAI,WAAW,mCAAmC;AACxF,UAAIjI,IAASsH,IAAM3F,EAAI,OAAQ,OAAM,IAAI,WAAW,oBAAoB;AAAA,IAC1E;AAEA,IAAAP,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAc,SAAsBR,GAAOZ,GAAQ/B,GAAYsJ,GAAU;AAIxF,UAHA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACpB/B,IAAaA,MAAe,GACxB,CAACsJ,GAAU;AACb,cAAMW,IAAW,KAAK,IAAI,GAAG,IAAIjK,CAAU,IAAI;AAC/C,QAAA+J,EAAS,MAAMpH,GAAOZ,GAAQ/B,GAAYiK,GAAU,CAAC;AAAA,MACzD;AAEE,UAAIV,IAAM,GACNhJ,IAAI;AAER,WADA,KAAKwB,CAAM,IAAIY,IAAQ,KAChB,EAAEpC,IAAIP,MAAeuJ,KAAO;AACjC,aAAKxH,IAASxB,CAAC,IAAKoC,IAAQ4G,IAAO;AAGrC,aAAOxH,IAAS/B;AAAA,IAClB,GAEAmD,EAAO,UAAU,cACjBA,EAAO,UAAU,cAAc,SAAsBR,GAAOZ,GAAQ/B,GAAYsJ,GAAU;AAIxF,UAHA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACpB/B,IAAaA,MAAe,GACxB,CAACsJ,GAAU;AACb,cAAMW,IAAW,KAAK,IAAI,GAAG,IAAIjK,CAAU,IAAI;AAC/C,QAAA+J,EAAS,MAAMpH,GAAOZ,GAAQ/B,GAAYiK,GAAU,CAAC;AAAA,MACzD;AAEE,UAAI1J,IAAIP,IAAa,GACjBuJ,IAAM;AAEV,WADA,KAAKxH,IAASxB,CAAC,IAAIoC,IAAQ,KACpB,EAAEpC,KAAK,MAAMgJ,KAAO;AACzB,aAAKxH,IAASxB,CAAC,IAAKoC,IAAQ4G,IAAO;AAGrC,aAAOxH,IAAS/B;AAAA,IAClB,GAEAmD,EAAO,UAAU,aACjBA,EAAO,UAAU,aAAa,SAAqBR,GAAOZ,GAAQuH,GAAU;AAC1E,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,KAAM,CAAC,GACvD,KAAKA,CAAM,IAAKY,IAAQ,KACjBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwBR,GAAOZ,GAAQuH,GAAU;AAChF,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,OAAQ,CAAC,GACzD,KAAKA,CAAM,IAAKY,IAAQ,KACxB,KAAKZ,IAAS,CAAC,IAAKY,MAAU,GACvBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwBR,GAAOZ,GAAQuH,GAAU;AAChF,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,OAAQ,CAAC,GACzD,KAAKA,CAAM,IAAKY,MAAU,GAC1B,KAAKZ,IAAS,CAAC,IAAKY,IAAQ,KACrBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwBR,GAAOZ,GAAQuH,GAAU;AAChF,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,YAAY,CAAC,GAC7D,KAAKA,IAAS,CAAC,IAAKY,MAAU,IAC9B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,IAC9B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,GAC9B,KAAKZ,CAAM,IAAKY,IAAQ,KACjBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,gBACjBA,EAAO,UAAU,gBAAgB,SAAwBR,GAAOZ,GAAQuH,GAAU;AAChF,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,YAAY,CAAC,GAC7D,KAAKA,CAAM,IAAKY,MAAU,IAC1B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,IAC9B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,GAC9B,KAAKZ,IAAS,CAAC,IAAKY,IAAQ,KACrBZ,IAAS;AAAA,IAClB;AAEA,aAASmI,GAAgBxG,GAAKf,GAAOZ,GAAQiI,GAAKxD,GAAK;AACrD,MAAA2D,GAAWxH,GAAOqH,GAAKxD,GAAK9C,GAAK3B,GAAQ,CAAC;AAE1C,UAAI8H,IAAK,OAAOlH,IAAQ,OAAO,UAAU,CAAC;AAC1C,MAAAe,EAAI3B,GAAQ,IAAI8H,GAChBA,IAAKA,KAAM,GACXnG,EAAI3B,GAAQ,IAAI8H,GAChBA,IAAKA,KAAM,GACXnG,EAAI3B,GAAQ,IAAI8H,GAChBA,IAAKA,KAAM,GACXnG,EAAI3B,GAAQ,IAAI8H;AAChB,UAAIC,IAAK,OAAOnH,KAAS,OAAO,EAAE,IAAI,OAAO,UAAU,CAAC;AACxD,aAAAe,EAAI3B,GAAQ,IAAI+H,GAChBA,IAAKA,KAAM,GACXpG,EAAI3B,GAAQ,IAAI+H,GAChBA,IAAKA,KAAM,GACXpG,EAAI3B,GAAQ,IAAI+H,GAChBA,IAAKA,KAAM,GACXpG,EAAI3B,GAAQ,IAAI+H,GACT/H;AAAA,IACT;AAEA,aAASqI,GAAgB1G,GAAKf,GAAOZ,GAAQiI,GAAKxD,GAAK;AACrD,MAAA2D,GAAWxH,GAAOqH,GAAKxD,GAAK9C,GAAK3B,GAAQ,CAAC;AAE1C,UAAI8H,IAAK,OAAOlH,IAAQ,OAAO,UAAU,CAAC;AAC1C,MAAAe,EAAI3B,IAAS,CAAC,IAAI8H,GAClBA,IAAKA,KAAM,GACXnG,EAAI3B,IAAS,CAAC,IAAI8H,GAClBA,IAAKA,KAAM,GACXnG,EAAI3B,IAAS,CAAC,IAAI8H,GAClBA,IAAKA,KAAM,GACXnG,EAAI3B,IAAS,CAAC,IAAI8H;AAClB,UAAIC,IAAK,OAAOnH,KAAS,OAAO,EAAE,IAAI,OAAO,UAAU,CAAC;AACxD,aAAAe,EAAI3B,IAAS,CAAC,IAAI+H,GAClBA,IAAKA,KAAM,GACXpG,EAAI3B,IAAS,CAAC,IAAI+H,GAClBA,IAAKA,KAAM,GACXpG,EAAI3B,IAAS,CAAC,IAAI+H,GAClBA,IAAKA,KAAM,GACXpG,EAAI3B,CAAM,IAAI+H,GACP/H,IAAS;AAAA,IAClB;AAEA,IAAAoB,EAAO,UAAU,mBAAmBqG,GAAmB,SAA2B7G,GAAOZ,IAAS,GAAG;AACnG,aAAOmI,GAAe,MAAMvH,GAAOZ,GAAQ,OAAO,CAAC,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACpF,CAAC,GAEDoB,EAAO,UAAU,mBAAmBqG,GAAmB,SAA2B7G,GAAOZ,IAAS,GAAG;AACnG,aAAOqI,GAAe,MAAMzH,GAAOZ,GAAQ,OAAO,CAAC,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACpF,CAAC,GAEDoB,EAAO,UAAU,aAAa,SAAqBR,GAAOZ,GAAQ/B,GAAYsJ,GAAU;AAGtF,UAFA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GAChB,CAACuH,GAAU;AACb,cAAMe,IAAQ,KAAK,IAAI,GAAI,IAAIrK,IAAc,CAAC;AAE9C,QAAA+J,EAAS,MAAMpH,GAAOZ,GAAQ/B,GAAYqK,IAAQ,GAAG,CAACA,CAAK;AAAA,MAC/D;AAEE,UAAI9J,IAAI,GACJgJ,IAAM,GACNe,IAAM;AAEV,WADA,KAAKvI,CAAM,IAAIY,IAAQ,KAChB,EAAEpC,IAAIP,MAAeuJ,KAAO;AACjC,QAAI5G,IAAQ,KAAK2H,MAAQ,KAAK,KAAKvI,IAASxB,IAAI,CAAC,MAAM,MACrD+J,IAAM,IAER,KAAKvI,IAASxB,CAAC,KAAMoC,IAAQ4G,KAAQ,KAAKe,IAAM;AAGlD,aAAOvI,IAAS/B;AAAA,IAClB,GAEAmD,EAAO,UAAU,aAAa,SAAqBR,GAAOZ,GAAQ/B,GAAYsJ,GAAU;AAGtF,UAFA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GAChB,CAACuH,GAAU;AACb,cAAMe,IAAQ,KAAK,IAAI,GAAI,IAAIrK,IAAc,CAAC;AAE9C,QAAA+J,EAAS,MAAMpH,GAAOZ,GAAQ/B,GAAYqK,IAAQ,GAAG,CAACA,CAAK;AAAA,MAC/D;AAEE,UAAI9J,IAAIP,IAAa,GACjBuJ,IAAM,GACNe,IAAM;AAEV,WADA,KAAKvI,IAASxB,CAAC,IAAIoC,IAAQ,KACpB,EAAEpC,KAAK,MAAMgJ,KAAO;AACzB,QAAI5G,IAAQ,KAAK2H,MAAQ,KAAK,KAAKvI,IAASxB,IAAI,CAAC,MAAM,MACrD+J,IAAM,IAER,KAAKvI,IAASxB,CAAC,KAAMoC,IAAQ4G,KAAQ,KAAKe,IAAM;AAGlD,aAAOvI,IAAS/B;AAAA,IAClB,GAEAmD,EAAO,UAAU,YAAY,SAAoBR,GAAOZ,GAAQuH,GAAU;AACxE,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,KAAM,IAAK,GACvDY,IAAQ,MAAGA,IAAQ,MAAOA,IAAQ,IACtC,KAAKZ,CAAM,IAAKY,IAAQ,KACjBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,eAAe,SAAuBR,GAAOZ,GAAQuH,GAAU;AAC9E,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,OAAQ,MAAO,GAC/D,KAAKA,CAAM,IAAKY,IAAQ,KACxB,KAAKZ,IAAS,CAAC,IAAKY,MAAU,GACvBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,eAAe,SAAuBR,GAAOZ,GAAQuH,GAAU;AAC9E,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,OAAQ,MAAO,GAC/D,KAAKA,CAAM,IAAKY,MAAU,GAC1B,KAAKZ,IAAS,CAAC,IAAKY,IAAQ,KACrBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,eAAe,SAAuBR,GAAOZ,GAAQuH,GAAU;AAC9E,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,YAAY,WAAW,GACvE,KAAKA,CAAM,IAAKY,IAAQ,KACxB,KAAKZ,IAAS,CAAC,IAAKY,MAAU,GAC9B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,IAC9B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,IACvBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,eAAe,SAAuBR,GAAOZ,GAAQuH,GAAU;AAC9E,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KAAUS,EAAS,MAAMpH,GAAOZ,GAAQ,GAAG,YAAY,WAAW,GACnEY,IAAQ,MAAGA,IAAQ,aAAaA,IAAQ,IAC5C,KAAKZ,CAAM,IAAKY,MAAU,IAC1B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,IAC9B,KAAKZ,IAAS,CAAC,IAAKY,MAAU,GAC9B,KAAKZ,IAAS,CAAC,IAAKY,IAAQ,KACrBZ,IAAS;AAAA,IAClB,GAEAoB,EAAO,UAAU,kBAAkBqG,GAAmB,SAA0B7G,GAAOZ,IAAS,GAAG;AACjG,aAAOmI,GAAe,MAAMvH,GAAOZ,GAAQ,CAAC,OAAO,oBAAoB,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACxG,CAAC,GAEDoB,EAAO,UAAU,kBAAkBqG,GAAmB,SAA0B7G,GAAOZ,IAAS,GAAG;AACjG,aAAOqI,GAAe,MAAMzH,GAAOZ,GAAQ,CAAC,OAAO,oBAAoB,GAAG,OAAO,oBAAoB,CAAC;AAAA,IACxG,CAAC;AAED,aAASwI,GAAc7G,GAAKf,GAAOZ,GAAQsH,GAAK7C,GAAKwD,GAAK;AACxD,UAAIjI,IAASsH,IAAM3F,EAAI,OAAQ,OAAM,IAAI,WAAW,oBAAoB;AACxE,UAAI3B,IAAS,EAAG,OAAM,IAAI,WAAW,oBAAoB;AAAA,IAC3D;AAEA,aAASyI,GAAY9G,GAAKf,GAAOZ,GAAQ0I,GAAcnB,GAAU;AAC/D,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KACHiB,GAAa7G,GAAKf,GAAOZ,GAAQ,CAAkD,GAErFF,EAAQ,MAAM6B,GAAKf,GAAOZ,GAAQ0I,GAAc,IAAI,CAAC,GAC9C1I,IAAS;AAAA,IAClB;AAEA,IAAAoB,EAAO,UAAU,eAAe,SAAuBR,GAAOZ,GAAQuH,GAAU;AAC9E,aAAOkB,GAAW,MAAM7H,GAAOZ,GAAQ,IAAMuH,CAAQ;AAAA,IACvD,GAEAnG,EAAO,UAAU,eAAe,SAAuBR,GAAOZ,GAAQuH,GAAU;AAC9E,aAAOkB,GAAW,MAAM7H,GAAOZ,GAAQ,IAAOuH,CAAQ;AAAA,IACxD;AAEA,aAASoB,GAAahH,GAAKf,GAAOZ,GAAQ0I,GAAcnB,GAAU;AAChE,aAAA3G,IAAQ,CAACA,GACTZ,IAASA,MAAW,GACfuH,KACHiB,GAAa7G,GAAKf,GAAOZ,GAAQ,CAAoD,GAEvFF,EAAQ,MAAM6B,GAAKf,GAAOZ,GAAQ0I,GAAc,IAAI,CAAC,GAC9C1I,IAAS;AAAA,IAClB;AAEA,IAAAoB,EAAO,UAAU,gBAAgB,SAAwBR,GAAOZ,GAAQuH,GAAU;AAChF,aAAOoB,GAAY,MAAM/H,GAAOZ,GAAQ,IAAMuH,CAAQ;AAAA,IACxD,GAEAnG,EAAO,UAAU,gBAAgB,SAAwBR,GAAOZ,GAAQuH,GAAU;AAChF,aAAOoB,GAAY,MAAM/H,GAAOZ,GAAQ,IAAOuH,CAAQ;AAAA,IACzD,GAGAnG,EAAO,UAAU,OAAO,SAAesD,GAAQkE,GAAarJ,GAAOC,GAAK;AACtE,UAAI,CAAC4B,EAAO,SAASsD,CAAM,EAAG,OAAM,IAAI,UAAU,6BAA6B;AAS/E,UARKnF,MAAOA,IAAQ,IAChB,CAACC,KAAOA,MAAQ,MAAGA,IAAM,KAAK,SAC9BoJ,KAAelE,EAAO,WAAQkE,IAAclE,EAAO,SAClDkE,MAAaA,IAAc,IAC5BpJ,IAAM,KAAKA,IAAMD,MAAOC,IAAMD,IAG9BC,MAAQD,KACRmF,EAAO,WAAW,KAAK,KAAK,WAAW,EAAG,QAAO;AAGrD,UAAIkE,IAAc;AAChB,cAAM,IAAI,WAAW,2BAA2B;AAElD,UAAIrJ,IAAQ,KAAKA,KAAS,KAAK,OAAQ,OAAM,IAAI,WAAW,oBAAoB;AAChF,UAAIC,IAAM,EAAG,OAAM,IAAI,WAAW,yBAAyB;AAG3D,MAAIA,IAAM,KAAK,WAAQA,IAAM,KAAK,SAC9BkF,EAAO,SAASkE,IAAcpJ,IAAMD,MACtCC,IAAMkF,EAAO,SAASkE,IAAcrJ;AAGtC,YAAMd,IAAMe,IAAMD;AAElB,aAAI,SAASmF,KAAU,OAAO,WAAW,UAAU,cAAe,aAEhE,KAAK,WAAWkE,GAAarJ,GAAOC,CAAG,IAEvC,WAAW,UAAU,IAAI;AAAA,QACvBkF;AAAA,QACA,KAAK,SAASnF,GAAOC,CAAG;AAAA,QACxBoJ;AAAA,MACN,GAGSnK;AAAA,IACT,GAMA2C,EAAO,UAAU,OAAO,SAAe4D,GAAKzF,GAAOC,GAAKmD,GAAU;AAEhE,UAAI,OAAOqC,KAAQ,UAAU;AAS3B,YARI,OAAOzF,KAAU,YACnBoD,IAAWpD,GACXA,IAAQ,GACRC,IAAM,KAAK,UACF,OAAOA,KAAQ,aACxBmD,IAAWnD,GACXA,IAAM,KAAK,SAETmD,MAAa,UAAa,OAAOA,KAAa;AAChD,gBAAM,IAAI,UAAU,2BAA2B;AAEjD,YAAI,OAAOA,KAAa,YAAY,CAACvB,EAAO,WAAWuB,CAAQ;AAC7D,gBAAM,IAAI,UAAU,uBAAuBA,CAAQ;AAErD,YAAIqC,EAAI,WAAW,GAAG;AACpB,gBAAMzG,IAAOyG,EAAI,WAAW,CAAC;AAC7B,WAAKrC,MAAa,UAAUpE,IAAO,OAC/BoE,MAAa,cAEfqC,IAAMzG;AAAA,QAEd;AAAA,MACA,MAAS,CAAI,OAAOyG,KAAQ,WACxBA,IAAMA,IAAM,MACH,OAAOA,KAAQ,cACxBA,IAAM,OAAOA,CAAG;AAIlB,UAAIzF,IAAQ,KAAK,KAAK,SAASA,KAAS,KAAK,SAASC;AACpD,cAAM,IAAI,WAAW,oBAAoB;AAG3C,UAAIA,KAAOD;AACT,eAAO;AAGT,MAAAA,IAAQA,MAAU,GAClBC,IAAMA,MAAQ,SAAY,KAAK,SAASA,MAAQ,GAE3CwF,MAAKA,IAAM;AAEhB,UAAIxG;AACJ,UAAI,OAAOwG,KAAQ;AACjB,aAAKxG,IAAIe,GAAOf,IAAIgB,GAAK,EAAEhB;AACzB,eAAKA,CAAC,IAAIwG;AAAA,WAEP;AACL,cAAMmC,IAAQ/F,EAAO,SAAS4D,CAAG,IAC7BA,IACA5D,EAAO,KAAK4D,GAAKrC,CAAQ,GACvBlE,IAAM0I,EAAM;AAClB,YAAI1I,MAAQ;AACV,gBAAM,IAAI,UAAU,gBAAgBuG,IAClC,mCAAmC;AAEvC,aAAKxG,IAAI,GAAGA,IAAIgB,IAAMD,GAAO,EAAEf;AAC7B,eAAKA,IAAIe,CAAK,IAAI4H,EAAM3I,IAAIC,CAAG;AAAA,MAErC;AAEE,aAAO;AAAA,IACT;AAMA,UAAMoK,KAAS,CAAA;AACf,aAASC,GAAGC,GAAKC,GAAYC,GAAM;AACjC,MAAAJ,GAAOE,CAAG,IAAI,cAAwBE,EAAK;AAAA,QACzC,cAAe;AACb,gBAAK,GAEL,OAAO,eAAe,MAAM,WAAW;AAAA,YACrC,OAAOD,EAAW,MAAM,MAAM,SAAS;AAAA,YACvC,UAAU;AAAA,YACV,cAAc;AAAA,WACf,GAGD,KAAK,OAAO,GAAG,KAAK,IAAI,KAAKD,CAAG,KAGhC,KAAK,OAEL,OAAO,KAAK;AAAA,QAClB;AAAA,QAEI,IAAI,OAAQ;AACV,iBAAOA;AAAA,QACb;AAAA,QAEI,IAAI,KAAMnI,GAAO;AACf,iBAAO,eAAe,MAAM,QAAQ;AAAA,YAClC,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,OAAAA;AAAA,YACA,UAAU;AAAA,WACX;AAAA,QACP;AAAA,QAEI,WAAY;AACV,iBAAO,GAAG,KAAK,IAAI,KAAKmI,CAAG,MAAM,KAAK,OAAO;AAAA,QACnD;AAAA,MACA;AAAA,IACA;AAEA,IAAAD;AAAA,MAAE;AAAA,MACA,SAAUI,GAAM;AACd,eAAIA,IACK,GAAGA,CAAI,iCAGT;AAAA,MACX;AAAA,MAAK;AAAA,IAAU,GACfJ;AAAA,MAAE;AAAA,MACA,SAAUI,GAAMpG,GAAQ;AACtB,eAAO,QAAQoG,CAAI,oDAAoD,OAAOpG,CAAM;AAAA,MACxF;AAAA,MAAK;AAAA,IAAS,GACdgG;AAAA,MAAE;AAAA,MACA,SAAUtE,GAAK2E,GAAOC,GAAO;AAC3B,YAAIC,IAAM,iBAAiB7E,CAAG,sBAC1B8E,IAAWF;AACf,eAAI,OAAO,UAAUA,CAAK,KAAK,KAAK,IAAIA,CAAK,IAAI,KAAK,KACpDE,IAAWC,GAAsB,OAAOH,CAAK,CAAC,IACrC,OAAOA,KAAU,aAC1BE,IAAW,OAAOF,CAAK,IACnBA,IAAQ,OAAO,CAAC,KAAK,OAAO,EAAE,KAAKA,IAAQ,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,QACrEE,IAAWC,GAAsBD,CAAQ,IAE3CA,KAAY,MAEdD,KAAO,eAAeF,CAAK,cAAcG,CAAQ,IAC1CD;AAAA,MACX;AAAA,MAAK;AAAA,IAAU;AAEf,aAASE,GAAuBvE,GAAK;AACnC,UAAIqB,IAAM,IACN7H,IAAIwG,EAAI;AACZ,YAAMzF,IAAQyF,EAAI,CAAC,MAAM,MAAM,IAAI;AACnC,aAAOxG,KAAKe,IAAQ,GAAGf,KAAK;AAC1B,QAAA6H,IAAM,IAAIrB,EAAI,MAAMxG,IAAI,GAAGA,CAAC,CAAC,GAAG6H,CAAG;AAErC,aAAO,GAAGrB,EAAI,MAAM,GAAGxG,CAAC,CAAC,GAAG6H,CAAG;AAAA,IACjC;AAKA,aAASmD,GAAa7H,GAAK3B,GAAQ/B,GAAY;AAC7C,MAAAyJ,GAAe1H,GAAQ,QAAQ,IAC3B2B,EAAI3B,CAAM,MAAM,UAAa2B,EAAI3B,IAAS/B,CAAU,MAAM,WAC5D4J,EAAY7H,GAAQ2B,EAAI,UAAU1D,IAAa,EAAE;AAAA,IAErD;AAEA,aAASmK,GAAYxH,GAAOqH,GAAKxD,GAAK9C,GAAK3B,GAAQ/B,GAAY;AAC7D,UAAI2C,IAAQ6D,KAAO7D,IAAQqH,GAAK;AAC9B,cAAM1D,IAAI,OAAO0D,KAAQ,WAAW,MAAM;AAC1C,YAAIkB;AAEF,cAAIlB,MAAQ,KAAKA,MAAQ,OAAO,CAAC,IAC/BkB,IAAQ,OAAO5E,CAAC,WAAWA,CAAC,QAAQtG,IAAa,KAAK,CAAC,GAAGsG,CAAC,KAE3D4E,IAAQ,SAAS5E,CAAC,QAAQtG,IAAa,KAAK,IAAI,CAAC,GAAGsG,CAAC,iBACzCtG,IAAa,KAAK,IAAI,CAAC,GAAGsG,CAAC,IAKrC,IAAIsE,GAAO,iBAAiB,SAASM,GAAOvI,CAAK;AAAA,MAC3D;AACE,MAAA4I,GAAY7H,GAAK3B,GAAQ/B,CAAU;AAAA,IACrC;AAEA,aAASyJ,GAAgB9G,GAAOsI,GAAM;AACpC,UAAI,OAAOtI,KAAU;AACnB,cAAM,IAAIiI,GAAO,qBAAqBK,GAAM,UAAUtI,CAAK;AAAA,IAE/D;AAEA,aAASiH,EAAajH,GAAOc,GAAQ+H,GAAM;AACzC,YAAI,KAAK,MAAM7I,CAAK,MAAMA,KACxB8G,GAAe9G,GAAO6I,CAAI,GACpB,IAAIZ,GAAO,iBAAyB,UAAU,cAAcjI,CAAK,KAGrEc,IAAS,IACL,IAAImH,GAAO,yBAAwB,IAGrC,IAAIA,GAAO;AAAA,QAAyB;AAAA,QACR,eAA6BnH,CAAM;AAAA,QACnCd;AAAA,MAAK;AAAA,IACzC;AAKA,UAAM8I,KAAoB;AAE1B,aAASC,GAAanF,GAAK;AAMzB,UAJAA,IAAMA,EAAI,MAAM,GAAG,EAAE,CAAC,GAEtBA,IAAMA,EAAI,KAAI,EAAG,QAAQkF,IAAmB,EAAE,GAE1ClF,EAAI,SAAS,EAAG,QAAO;AAE3B,aAAOA,EAAI,SAAS,MAAM;AACxB,QAAAA,IAAMA,IAAM;AAEd,aAAOA;AAAA,IACT;AAEA,aAASX,GAAahB,GAAQ+G,GAAO;AACnC,MAAAA,IAAQA,KAAS;AACjB,UAAIrD;AACJ,YAAM7E,IAASmB,EAAO;AACtB,UAAIgH,IAAgB;AACpB,YAAM1C,IAAQ,CAAA;AAEd,eAAS3I,IAAI,GAAGA,IAAIkD,GAAQ,EAAElD,GAAG;AAI/B,YAHA+H,IAAY1D,EAAO,WAAWrE,CAAC,GAG3B+H,IAAY,SAAUA,IAAY,OAAQ;AAE5C,cAAI,CAACsD,GAAe;AAElB,gBAAItD,IAAY,OAAQ;AAEtB,eAAKqD,KAAS,KAAK,MAAIzC,EAAM,KAAK,KAAM,KAAM,GAAI;AAClD;AAAA,YACV,WAAmB3I,IAAI,MAAMkD,GAAQ;AAE3B,eAAKkI,KAAS,KAAK,MAAIzC,EAAM,KAAK,KAAM,KAAM,GAAI;AAClD;AAAA,YACV;AAGQ,YAAA0C,IAAgBtD;AAEhB;AAAA,UACR;AAGM,cAAIA,IAAY,OAAQ;AACtB,aAAKqD,KAAS,KAAK,MAAIzC,EAAM,KAAK,KAAM,KAAM,GAAI,GAClD0C,IAAgBtD;AAChB;AAAA,UACR;AAGM,UAAAA,KAAasD,IAAgB,SAAU,KAAKtD,IAAY,SAAU;AAAA,QACxE,MAAW,CAAIsD,MAEJD,KAAS,KAAK,MAAIzC,EAAM,KAAK,KAAM,KAAM,GAAI;AAMpD,YAHA0C,IAAgB,MAGZtD,IAAY,KAAM;AACpB,eAAKqD,KAAS,KAAK,EAAG;AACtB,UAAAzC,EAAM,KAAKZ,CAAS;AAAA,QAC1B,WAAeA,IAAY,MAAO;AAC5B,eAAKqD,KAAS,KAAK,EAAG;AACtB,UAAAzC,EAAM;AAAA,YACJZ,KAAa,IAAM;AAAA,YACnBA,IAAY,KAAO;AAAA,UAC3B;AAAA,QACA,WAAeA,IAAY,OAAS;AAC9B,eAAKqD,KAAS,KAAK,EAAG;AACtB,UAAAzC,EAAM;AAAA,YACJZ,KAAa,KAAM;AAAA,YACnBA,KAAa,IAAM,KAAO;AAAA,YAC1BA,IAAY,KAAO;AAAA,UAC3B;AAAA,QACA,WAAeA,IAAY,SAAU;AAC/B,eAAKqD,KAAS,KAAK,EAAG;AACtB,UAAAzC,EAAM;AAAA,YACJZ,KAAa,KAAO;AAAA,YACpBA,KAAa,KAAM,KAAO;AAAA,YAC1BA,KAAa,IAAM,KAAO;AAAA,YAC1BA,IAAY,KAAO;AAAA,UAC3B;AAAA,QACA;AACM,gBAAM,IAAI,MAAM,oBAAoB;AAAA,MAE1C;AAEE,aAAOY;AAAA,IACT;AAEA,aAASlB,EAAczB,GAAK;AAC1B,YAAMsF,IAAY,CAAA;AAClB,eAAStL,IAAI,GAAGA,IAAIgG,EAAI,QAAQ,EAAEhG;AAEhC,QAAAsL,EAAU,KAAKtF,EAAI,WAAWhG,CAAC,IAAI,GAAI;AAEzC,aAAOsL;AAAA,IACT;AAEA,aAAS1D,GAAgB5B,GAAKoF,GAAO;AACnC,UAAI/I,GAAGkH,GAAID;AACX,YAAMgC,IAAY,CAAA;AAClB,eAAStL,IAAI,GAAGA,IAAIgG,EAAI,UACjB,GAAAoF,KAAS,KAAK,IADW,EAAEpL;AAGhC,QAAAqC,IAAI2D,EAAI,WAAWhG,CAAC,GACpBuJ,IAAKlH,KAAK,GACViH,IAAKjH,IAAI,KACTiJ,EAAU,KAAKhC,CAAE,GACjBgC,EAAU,KAAK/B,CAAE;AAGnB,aAAO+B;AAAA,IACT;AAEA,aAAShG,GAAeU,GAAK;AAC3B,aAAOzD,EAAO,YAAY4I,GAAYnF,CAAG,CAAC;AAAA,IAC5C;AAEA,aAASuB,EAAYgE,GAAKC,GAAKhK,GAAQ0B,GAAQ;AAC7C,UAAIlD;AACJ,WAAKA,IAAI,GAAGA,IAAIkD,KACT,EAAAlD,IAAIwB,KAAUgK,EAAI,UAAYxL,KAAKuL,EAAI,SADtB,EAAEvL;AAExB,QAAAwL,EAAIxL,IAAIwB,CAAM,IAAI+J,EAAIvL,CAAC;AAEzB,aAAOA;AAAA,IACT;AAKA,aAAS0D,EAAYkB,GAAKqG,GAAM;AAC9B,aAAOrG,aAAeqG,KACnBrG,KAAO,QAAQA,EAAI,eAAe,QAAQA,EAAI,YAAY,QAAQ,QACjEA,EAAI,YAAY,SAASqG,EAAK;AAAA,IACpC;AACA,aAASpG,GAAaD,GAAK;AAEzB,aAAOA,MAAQA;AAAA,IACjB;AAIA,UAAM8D,MAAuB,WAAY;AACvC,YAAM+C,IAAW,oBACXC,IAAQ,IAAI,MAAM,GAAG;AAC3B,eAAS1L,IAAI,GAAGA,IAAI,IAAI,EAAEA,GAAG;AAC3B,cAAM2L,IAAM3L,IAAI;AAChB,iBAASiH,IAAI,GAAGA,IAAI,IAAI,EAAEA;AACxB,UAAAyE,EAAMC,IAAM1E,CAAC,IAAIwE,EAASzL,CAAC,IAAIyL,EAASxE,CAAC;AAAA,MAE/C;AACE,aAAOyE;AAAA,IACT,GAAC;AAGD,aAASzC,GAAoB2C,GAAI;AAC/B,aAAO,OAAO,SAAW,MAAcC,KAAyBD;AAAA,IAClE;AAEA,aAASC,KAA0B;AACjC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAAA;;;ACnjEA,MAAMC,KAAI;AACN,OAAOA,GAAE,SAAW,QACtBA,GAAE,SAASC,GAAAA;ACsEb,MAAMC,KAA4B;AAAA,EAChC,QAAQ;AAAA,EACR,eAAe,CAAA;AAAA,EAEf,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,8BAA8B;AAAA,EAC9B,4BAA4B;AAAA,EAC5B,eAAe;AAAA,EACf,oBAAoB;AAAA,EAEpB,cAAc;AAAA,EACd,aAAa;AAAA,EAEb,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,eAAe;AAAA,EAEf,eAAe;AAAA,EACf,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,mBAAmB;AACrB;AAEO,SAASC,KAAoB;AAClC,SAAOC,GAAA;AAAA,IACLC,GAAM,CAACC,OAAS;AAAA,MACd,GAAGJ;AAAA,MAEH,SAASK,GAAQ;AACf,QAAAD,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,cAAc,KAAKA,EAAE,MAAM,GAC7BA,EAAE,SAASkK;AAAA,QACb,CAAC;AAAA,MACH;AAAA,MAEA,SAAS;AACP,QAAAD,EAAI,CAACjK,MAAM;AACT,gBAAMmK,IAAOnK,EAAE,cAAc,IAAA;AAC7B,UAAImK,QAAQ,SAASA,IACjBnK,EAAE,aAAa,YACjBA,EAAE,WAAW,QACbA,EAAE,SAAS,QACXA,EAAE,UAAU,OAEdA,EAAE,cAAc;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MAEA,mBAAmBoK,GAAQC,GAASC,GAAeC,GAAeC,GAAsBC,GAAoB;AAC1G,QAAAR,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,6BAA6BoK,GAC/BpK,EAAE,8BAA8BqK,GAChCrK,EAAE,wBAAwBsK,KAAiB,MAC3CtK,EAAE,wBAAwBuK,KAAiB,MAC3CvK,EAAE,+BAA+BwK,KAAwB,MACzDxK,EAAE,6BAA6ByK,KAAsB;AAAA,QACvD,CAAC;AAAA,MACH;AAAA,MAEA,iBAAiBC,GAAQ;AACvB,QAAAT,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,gBAAgB0K;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MAEA,oBAAoBC,GAAI;AACtB,QAAAV,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,qBAAqB2K;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,MAEA,gBAAgBC,GAAM;AACpB,QAAAX,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,eAAe4K;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,MAEA,eAAeC,GAAK;AAClB,QAAAZ,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,cAAc6K;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MAEA,iBAAiBH,GAAQ;AACvB,QAAAT,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,gBAAgB0K;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MAEA,iBAAiBI,GAAM;AACrB,QAAAb,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,gBAAgB8K;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MAEA,eAAeC,GAAO;AACpB,QAAAd,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,cAAc+K;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MAEA,mBAAmBL,GAAQ;AACzB,QAAAT,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,kBAAkB0K;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,MAEA,qBAAqBM,GAAK;AACxB,QAAAf,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,oBAAoBgL;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,MAEA,UAAUC,GAAM;AACd,QAAAhB,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,SAASiL;AAAA,QACb,CAAC;AAAA,MACH;AAAA,MAEA,YAAYC,GAAQC,GAAWJ,GAAO;AACpC,QAAAd,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,WAAWkL,GACblL,EAAE,cAAcmL,KAAa,MAC7BnL,EAAE,UAAU+K,KAAS,MACjBG,MAAW,WACblL,EAAE,SAAS,QACXA,EAAE,qBAAqB,MACvBA,EAAE,kBAAkB;AAAA,QAExB,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ;AACN,QAAAiK,EAAI,OAAO,EAAE,GAAGJ,GAAA,EAAe;AAAA,MACjC;AAAA,MAEA,uBAAuB;AACrB,QAAAI,EAAI,CAACjK,MAAM;AACT,UAAAA,EAAE,6BAA6B,MAC/BA,EAAE,8BAA8B,GAChCA,EAAE,wBAAwB,MAC1BA,EAAE,wBAAwB,MAC1BA,EAAE,+BAA+B,MACjCA,EAAE,6BAA6B,MAC/BA,EAAE,gBAAgB,IAClBA,EAAE,qBAAqB,MACvBA,EAAE,WAAW,QACbA,EAAE,SAAS,QACXA,EAAE,qBAAqB,MACvBA,EAAE,kBAAkB,MACpBA,EAAE,cAAc,MAChBA,EAAE,UAAU,MACZA,EAAE,gBAAgB,MAClBA,EAAE,gBAAgB,MAClBA,EAAE,cAAc,MAChBA,EAAE,kBAAkB,MACpBA,EAAE,oBAAoB,OAEpBA,EAAE,WAAW,mBACbA,EAAE,WAAW,qBACbA,EAAE,WAAW,kBACbA,EAAE,WAAW,cACbA,EAAE,WAAW,qBACbA,EAAE,WAAW,mBAEbA,EAAE,SAAS,WACXA,EAAE,gBAAgB,CAAA;AAAA,QAEtB,CAAC;AAAA,MACH;AAAA,IAAA,EACA;AAAA,EAAA;AAEN;AAIO,MAAMoL,KAAqBC,GAAqC,IAAI;AAEpE,SAASC,EAAkBC,GAA4C;AAC5E,QAAMC,IAAQC,GAAWL,EAAkB;AAC3C,MAAI,CAACI;AACH,UAAM,IAAI,MAAM,wDAAwD;AAE1E,SAAOE,GAASF,GAAOD,CAAQ;AACjC;AC1QO,MAAMrL,IAAI;AAAA,EACf,IAAW;AAAA,EACX,SAAW;AAAA,EACX,QAAW;AAAA,EACX,SAAW;AAAA,EACX,QAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAW;AAAA,EACX,OAAW;AAAA,EACX,QAAW;AAAA,EACX,KAAW;AACb,GAEayL,KAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkIZC,KAAe,uBAEfC,IAAO,CAAChK,GAAciK,IAAQ5L,EAAE,SAAS6L,IAAS,SAA8B;AAAA,EAC3F,YAAY;AAAA,EACZ,UAAUlK;AAAA,EACV,YAAYkK;AAAA,EACZ,OAAAD;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,qBAAqB;AACvB,IAEaE,KAAc,CAACnK,GAAciK,IAAQ5L,EAAE,SAAS6L,IAAS,SAA8B;AAAA,EAClG,YAAYH;AAAA,EACZ,UAAU/J;AAAA,EACV,YAAYkK;AAAA,EACZ,OAAAD;AAAA,EACA,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,QAAQ;AACV;AAaO,SAASG,GAAgBhM,GAAeiM,IAAc,GAAW;AACtE,MAAIjM,MAAU,EAAG,QAAO;AAExB,QAAMkM,IAASlM,IAAQ,IAAI,KAAK,IAAIiM,GAAa,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,IAAIjM,CAAK,CAAC,CAAC,IAAI,CAAC,IAAIiM;AACjG,SAAOjM,EAAM,QAAQkM,CAAM;AAC7B;AAKO,MAAMC,KAAiB,IC/L9BC,KAAe,smLCAfC,KAAe,0sJCAfC,KAAe;ACQR,SAASC,KAAc;AAC5B,2BACG,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,kBAAiB,MAAK,QAAO,OAAM,8BAA6B,OAAO,EAAE,SAAS,SAAS,YAAY,KACzI,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,oHAAmH,MAAK,0BAAwB;AAAA,IACxJ,gBAAAA,EAAC,QAAA,EAAK,GAAE,wNAAuN,MAAK,oBAAkB;AAAA,IACtP,gBAAAA,EAAC,QAAA,EAAK,GAAE,gKAA+J,MAAK,oBAAkB;AAAA,IAC9L,gBAAAA,EAAC,QAAA,EAAK,GAAE,43CAA23C,MAAK,0BAAwB;AAAA,sBAC/5C,QAAA,EACC,UAAA;AAAA,MAAA,gBAAAC,EAAC,kBAAA,EAAe,IAAG,cAAa,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,eAAc,kBAAiB,mBAAkB,oDACnG,UAAA;AAAA,QAAA,gBAAAD,EAAC,QAAA,EAAK,WAAU,UAAA,CAAS;AAAA,QACzB,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,WAAS;AAAA,QACvC,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,WAAS;AAAA,QACvC,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,WAAS;AAAA,QACvC,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,WAAS;AAAA,QACvC,gBAAAA,EAAC,QAAA,EAAK,QAAO,KAAI,WAAU,UAAA,CAAS;AAAA,MAAA,GACtC;AAAA,MACA,gBAAAC,EAAC,kBAAA,EAAe,IAAG,cAAa,IAAG,WAAU,IAAG,MAAK,IAAG,WAAU,IAAG,WAAU,eAAc,kBAC3F,UAAA;AAAA,QAAA,gBAAAD,EAAC,QAAA,EAAK,WAAU,UAAA,CAAS;AAAA,QACzB,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,WAAS;AAAA,QACvC,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,WAAS;AAAA,QACvC,gBAAAA,EAAC,QAAA,EAAK,QAAO,QAAO,WAAU,WAAS;AAAA,QACvC,gBAAAA,EAAC,QAAA,EAAK,QAAO,KAAI,WAAU,UAAA,CAAS;AAAA,MAAA,EAAA,CACtC;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AA6DO,SAASE,GAAU,EAAE,MAAApE,GAAM,MAAA1G,IAAO,MAAuC;AAC9E,QAAM+K,IAAgC,EAAE,SAASP,IAAa,UAAUC,IAAc,UAAUC,GAAA,GAC1FM,IAA6B,EAAE,SAAS,WAAW,UAAU,WAAW,UAAU,UAAA,GAClFC,IAAOF,EAAMrE,CAAI;AACvB,SAAIuE,sBAEC,OAAA,EAAI,KAAKA,GAAM,KAAKvE,GAAM,OAAO;AAAA,IAChC,OAAO1G;AAAA,IAAM,QAAQA;AAAA,IAAM,cAAc;AAAA,IAAG,YAAY;AAAA,IACxD,WAAW;AAAA,IACX,WAAW;AAAA,EAAA,GACV,IAIL,gBAAA4K,EAAC,SAAI,OAAO;AAAA,IACV,OAAO5K;AAAA,IAAM,QAAQA;AAAA,IAAM,cAAc;AAAA,IAAG,YAAY;AAAA,IACxD,YAAYgL,EAAGtE,CAAI,KAAK;AAAA,IACxB,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,gBAAgB;AAAA,EAAA,GAEvD,UAAA,gBAAAkE,EAAC,QAAA,EAAK,OAAOZ,EAAK,IAAI,QAAQ,GAAG,GAAI,UAAAtD,EAAK,CAAC,EAAA,CAAE,EAAA,CAC/C;AAEJ;AChHO,SAASwE,GAAO,EAAE,UAAAC,KAAqC;AAC5D,SACE,gBAAAP,EAAC,SAAI,OAAO;AAAA,IACV,OAAO;AAAA,IAAkC,QAAQ;AAAA,IACjD,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IAAQ,eAAe;AAAA,IAChC,YAAYvM,EAAE;AAAA,EAAA,GAEb,UAAA8M,EAAA,CACH;AAEJ;AAEO,SAASC,GAAK,EAAE,UAAAD,GAAU,SAAAE,IAAU,IAAI,OAAAC,KAA2E;AACxH,SACE,gBAAAT,EAAC,SAAI,OAAO;AAAA,IACV,MAAM;AAAA,IAAG,SAAS;AAAA,IAAQ,eAAe;AAAA,IAAU,WAAW;AAAA,IAC9D,YAAYxM,EAAE;AAAA,IACd,WAAW,aAAaA,EAAE,SAAS;AAAA,IACnC,GAAGiN;AAAA,EAAA,GAEH,UAAA;AAAA,IAAA,gBAAAV,EAAC,SAAI,OAAO;AAAA,MACV,MAAM;AAAA,MAAG,SAAS;AAAA,MAAQ,eAAe;AAAA,MAAU,SAAAS;AAAA,MAAS,KAAK;AAAA,MACjE,WAAW;AAAA,MAAG,WAAW;AAAA,IAAA,GAExB,UAAAF,EAAA,CACH;AAAA,IACA,gBAAAP,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,GAAG,WAAW,aAAavM,EAAE,MAAM,IAAI,YAAY,IAAE,CAAG;AAAA,EAAA,GAChF;AAEJ;AAEO,SAASkN,KAAS;AAAE,2BAAQ,OAAA,EAAI,OAAO,EAAE,MAAM,KAAK;AAAI;AAExD,SAASC,GAAW,EAAE,MAAApC,GAAM,OAAAqC,GAAO,QAAAC,GAAQ,UAAAC,GAAU,OAAAC,GAAO,aAAAC,KAOhE;AACD,QAAMC,IAAc,CAACH,KAAYvC,KAAQ,QAAQqC,KAAS,QAAQA,IAAQ,GACpEM,IAAMD,IAAc,KAAK,MAAO1C,IAAQqC,IAAU,GAAG,IAAI,GAEzDO,IACJ,gBAAApB,EAAC,UAAA,EAAO,SAASc,GAAQ,OAAO;AAAA,IAC9B,YAAY;AAAA,IAAQ,QAAQ;AAAA,IAAQ,QAAQ;AAAA,IAAW,SAAS;AAAA,IAChE,SAAS;AAAA,IAAQ,YAAY;AAAA,IAC7B,YAAYA,IAAS,YAAY;AAAA,IACjC,OAAOrN,EAAE;AAAA,IAAW,YAAY;AAAA,EAAA,GAEhC,UAAA,gBAAAuM,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,SAAS,QAAA,GAC5E,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,4BAA2B,QAAO,gBAAe,aAAY,QAAO,eAAc,SAAQ,gBAAe,QAAA,CAAO,GAC1H,GACF;AAGF,SACE,gBAAAC,EAAC,SAAI,OAAO;AAAA,IACV,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,KAAK;AAAA,IAC5C,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAYxM,EAAE;AAAA,IACd,WAAW,aAAaA,EAAE,SAAS;AAAA,IACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,IACrC,cAAc;AAAA,EAAA,GAEb,UAAA;AAAA,IAAA2N;AAAA,IACA,CAACF,KAAeF,KACf,gBAAAf,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KACxD,UAAA;AAAA,MAAA,gBAAAD,EAAC,QAAA,EAAK,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,EAAA,GAAM,UAAAuN,EAAA,CAAM;AAAA,MACpDC,KAAe,gBAAAjB,EAACqB,IAAA,EAAQ,UAAS,SAAQ,MAAMJ,EAAA,CAAa;AAAA,IAAA,GAC/D;AAAA,IAEDC,KACC,gBAAAjB,EAAC,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,YAAY,UAAU,KAAK,MACjE,UAAA;AAAA,MAAA,gBAAAD,EAAC,SAAI,OAAO;AAAA,QACV,MAAM;AAAA,QAAG,QAAQ;AAAA,QAAG,YAAYvM,EAAE;AAAA,QAAQ,cAAc;AAAA,QAAG,UAAU;AAAA,MAAA,GAErE,UAAA,gBAAAuM,EAAC,OAAA,EAAI,OAAO;AAAA,QACV,QAAQ;AAAA,QAAQ,OAAO,GAAGmB,CAAG;AAAA,QAAK,YAAY1N,EAAE;AAAA,QAAQ,cAAc;AAAA,QACtE,YAAY;AAAA,MAAA,GACX,EAAA,CACL;AAAA,MACA,gBAAAwM,EAAC,UAAK,OAAO;AAAA,QACX,GAAGb,EAAK,IAAI3L,EAAE,SAAS;AAAA,QAAG,YAAY;AAAA,QAAG,YAAY;AAAA,QACrD,oBAAoB;AAAA,MAAA,GAEnB,UAAA;AAAA,QAAA+K;AAAA,QAAK;AAAA,QAAEqC;AAAA,MAAA,EAAA,CACV;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;AAEO,SAASS,GAAU,EAAE,OAAAC,GAAO,UAAAC,KAAkD;AACnF,SACE,gBAAAvB,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,IAAA,gBAAAD,EAAC,KAAA,EAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,GAAI,UAAA8N,EAAA,CAAM;AAAA,IAC1CC,uBAAa,KAAA,EAAE,OAAOpC,EAAK,IAAI3L,EAAE,SAAS,GAAI,UAAA+N,EAAA,CAAS;AAAA,EAAA,GAC1D;AAEJ;AAGO,SAASH,GAAQ,EAAE,MAAAI,GAAM,IAAArB,GAAI,UAAAsB,IAAW,WAAwE;AACrH,QAAMpM,IAAO8K,KAAM3M,EAAE,QACfkO,IAAUD,MAAa,SACvBE,IAAaC,GAAuB,IAAI,GACxC,CAACC,GAAQC,CAAS,IAAIC,GAA+C,IAAI,GAEzEC,IAAc,MAAM;AACxB,UAAMC,IAAKN,EAAW;AACtB,QAAI,CAACM,EAAI;AACT,UAAMC,IAAOD,EAAG,sBAAA;AAChB,IAAAH,EAAU;AAAA,MACR,KAAKJ,IAAUQ,EAAK,SAAS,IAAIA,EAAK,MAAM;AAAA,MAC5C,MAAMA,EAAK,OAAOA,EAAK,QAAQ;AAAA,IAAA,CAChC;AAAA,EACH,GAEMC,IAAQN,IAASO;AAAA,IACrB,gBAAApC,EAAC,SAAI,OAAO;AAAA,MACV,UAAU;AAAA,MACV,KAAK0B,IAAUG,EAAO,MAAM;AAAA,MAC5B,QAAQH,IAAU,SAAY,gBAAgBG,EAAO,GAAG;AAAA,MACxD,MAAMA,EAAO;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,MACP,YAAYxM;AAAA,MACZ,WAAW,aAAa7B,EAAE,SAAS;AAAA,MACnC,WAAW,+CAA+CA,EAAE,MAAM;AAAA,MAClE,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,eAAe;AAAA,IAAA,GAEf,UAAA;AAAA,MAAA,gBAAAuM,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,YAAY,IAAA,GAAQ,UAAAgO,EAAA,CAAK;AAAA,MAC/D,gBAAAzB,EAAC,SAAI,OAAO;AAAA,QACV,UAAU;AAAA,QACV,GAAI2B,IACA,EAAE,KAAK,OACP,EAAE,QAAQ,GAAA;AAAA,QACd,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QAAG,QAAQ;AAAA,QAClB,YAAYrM;AAAA,QACZ,WAAWqM,IAAU,eAAelO,EAAE,MAAM,KAAK,aAAaA,EAAE,MAAM;AAAA,MAAA,EACxE,CAAG;AAAA,IAAA,GACL;AAAA,IACA,SAAS;AAAA,EAAA,IACP;AAEJ,SACE,gBAAAwM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK2B;AAAA,MACL,cAAcK;AAAA,MACd,cAAc,MAAMF,EAAU,IAAI;AAAA,MAClC,OAAO,EAAE,UAAU,YAAY,SAAS,eAAe,YAAY,EAAA;AAAA,MAEnE,UAAA;AAAA,QAAA,gBAAA/B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cAAI,QAAQ;AAAA,cAAI,cAAc;AAAA,cACrC,YAAY1K;AAAA,cACZ,WAAW,aAAa7B,EAAE,SAAS;AAAA,cACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,cACrC,SAAS;AAAA,cAAQ,YAAY;AAAA,cAAU,gBAAgB;AAAA,cACvD,QAAQ;AAAA,cAAW,YAAY;AAAA,YAAA;AAAA,YAGjC,4BAAC,QAAA,EAAK,OAAO,EAAE,GAAG2L,EAAK,GAAG3L,EAAE,KAAK,GAAG,YAAY,GAAG,YAAY,QAAQ,YAAY,IAAA,GAAO,UAAA,IAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAE5F2O;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAGO,SAASE,GAAS,EAAE,UAAA/B,KAAqC;AAC9D,SAAO,gBAAAP,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAAM,UAAAO,EAAA,CAAS;AACrF;AAGO,SAASgC,GAAc,EAAE,MAAAC,GAAM,OAAAxB,GAAO,KAAA7F,GAAK,QAAA8C,GAAQ,UAAAwE,GAAU,SAAAC,KAOjE;AACD,QAAMtC,IAAKqC,IAAWhP,EAAE,KAAKA,EAAE,QACzBkP,IAASF,IACX,iBAAiBhP,EAAE,MAAM,oBAAoBA,EAAE,SAAS,KACxD,iBAAiBA,EAAE,SAAS,oBAAoBA,EAAE,MAAM;AAC5D,SACE,gBAAAwM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWwC,IAAW,SAAY;AAAA,MAClC,SAAAC;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,QAAQ,YAAY;AAAA,QAAU,gBAAgB;AAAA,QACvD,SAAS;AAAA,QAAI,cAAc;AAAA,QAC3B,YAAYtC;AAAA,QAAI,WAAWuC;AAAA,QAC3B,QAAQ;AAAA,QAAW,YAAY;AAAA,MAAA;AAAA,MAEjC,UAAA;AAAA,QAAA,gBAAA1C,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAA,GACvD,UAAA;AAAA,UAAAuC;AAAA,4BACA,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAxC,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAI,UAAAuN,GAAM;AAAA,YACtC,gBAAAhB,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAI,UAAA0H,EAAA,CAAI;AAAA,UAAA,EAAA,CACxC;AAAA,QAAA,GACF;AAAA,QACC8C,KACC,gBAAAgC,EAAC,OAAA,EAAI,OAAO,EAAE,WAAW,WACvB,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAI,UAAAwK,GAAO;AAAA,UACvC,gBAAA+B,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,MAAA,CAAG;AAAA,QAAA,EAAA,CACtC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAkCO,SAASmP,KAAc;AAC5B,SACE,gBAAA3C,EAAC,SAAI,OAAO;AAAA,IACV,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,KAAK;AAAA,IAC5C,SAAS;AAAA,IAAI,cAAc;AAAA,IAAI,WAAW;AAAA,IAC1C,YAAYxM,EAAE;AAAA,IACd,WAAW,aAAaA,EAAE,SAAS;AAAA,IACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,EAAA,GAErC,UAAA;AAAA,IAAA,gBAAAuM,EAAC,OAAA,EAAI,WAAU,gBAAe,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,IAAI,YAAY,KAAK;AAAA,IACjG,gBAAAC,EAAC,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,UAAU,KACjF,UAAA;AAAA,MAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gBAAe,OAAO,EAAE,OAAO,OAAO,QAAQ,GAAA,EAAG,CAAG;AAAA,MACnE,gBAAAA,EAAC,OAAA,EAAI,WAAU,gBAAe,OAAO,EAAE,OAAO,OAAO,QAAQ,KAAG,CAAG;AAAA,IAAA,EAAA,CACrE;AAAA,EAAA,GACF;AAEJ;AAGO,SAAS6C,GAAI,EAAE,OAAA7B,GAAO,SAAA0B,GAAS,UAAAI,GAAU,QAAAC,KAK7C;AACD,SAAIA,IAEA,gBAAA/C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS8C,IAAW,SAAYJ;AAAA,MAChC,UAAAI;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,QAAQ,QAAQ;AAAA,QAAI,cAAc;AAAA,QACzC,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,QAAQA,IAAW,gBAAgB;AAAA,QACnC,YAAYrP,EAAE;AAAA,QACd,GAAG2L,EAAK,IAAI,qBAAqB;AAAA,QACjC,WAAW;AAAA,QACX,SAAS0D,IAAW,MAAM;AAAA,QAC1B,YAAY;AAAA,QAA6B,YAAY;AAAA,MAAA;AAAA,MAGtD,UAAA9B;AAAA,IAAA;AAAA,EAAA,IAKL,gBAAAhB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAA0C;AAAA,MACA,UAAAI;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,QAAQ,QAAQ;AAAA,QAAI,cAAc;AAAA,QACzC,QAAQ;AAAA,QACR,WAAW,aAAarP,EAAE,SAAS;AAAA,QACnC,QAAQqP,IAAW,gBAAgB;AAAA,QACnC,YAAYrP,EAAE;AAAA,QACd,GAAG2L,EAAK,IAAI3L,EAAE,OAAO;AAAA,QACrB,WAAW,kBAAkBA,EAAE,MAAM;AAAA,QACrC,SAASqP,IAAW,MAAM;AAAA,QAC1B,YAAY;AAAA,QAAiC,YAAY;AAAA,MAAA;AAAA,MAG1D,UAAA9B;AAAA,IAAA;AAAA,EAAA;AAGP;AAEO,SAASgC,GAAc,EAAE,OAAAhC,GAAO,SAAAiC,KAAmD;AACxF,SACE,gBAAAhD,EAAC,SAAI,OAAO;AAAA,IACV,QAAQ;AAAA,IAAI,SAAS;AAAA,IAAQ,YAAY;AAAA,IACzC,SAAS;AAAA,IACT,YAAY;AAAA,IAAG,KAAK;AAAA,IACpB,YAAYxM,EAAE;AAAA,IACd,cAAc;AAAA,IACd,WAAW,aAAaA,EAAE,SAAS;AAAA,IACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,EAAA,GAErC,UAAA;AAAA,IAAA,gBAAAuM,EAAC,SAAI,OAAO;AAAA,MACV,OAAO;AAAA,MAAI,QAAQ;AAAA,MAAI,cAAc;AAAA,MAAO,YAAY;AAAA,MACxD,YAAY;AAAA,MACZ,SAAS;AAAA,MAAQ,YAAY;AAAA,MAAU,gBAAgB;AAAA,IAAA,GAEvD,UAAA,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,sBAAqB,QAAO,WAAU,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO,EAAA,CAC9G,EAAA,CACF;AAAA,IACA,gBAAAA,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,MAAM,EAAA,GAAM,UAAAuN,EAAA,CAAM;AAAA,IACtD,gBAAAhB,EAAC,UAAA,EAAO,SAASiD,GAAS,OAAO;AAAA,MAC/B,YAAY;AAAA,MAAQ,QAAQ;AAAA,MAAQ,QAAQ;AAAA,MAC5C,SAAS;AAAA,MAAG,OAAO;AAAA,MAAI,QAAQ;AAAA,MAAI,aAAa;AAAA,MAChD,SAAS;AAAA,MAAQ,YAAY;AAAA,MAAU,gBAAgB;AAAA,MACvD,cAAc;AAAA,MAAG,YAAY;AAAA,IAAA,GAE7B,4BAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,4BAAC,QAAA,EAAK,GAAE,wBAAuB,QAAQxP,EAAE,WAAW,aAAY,KAAI,eAAc,QAAA,CAAO,EAAA,CAC3F,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEO,SAASyP,KAAS;AACvB,SACE,gBAAAlD,EAAC,SAAI,OAAO;AAAA,IACV,QAAQ;AAAA,IAAI,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,gBAAgB;AAAA,IACnE,KAAK;AAAA,IAAG,YAAY;AAAA,IACpB,YAAYvM,EAAE;AAAA,IACd,WAAW,aAAaA,EAAE,SAAS;AAAA,IACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,IACrC,cAAc;AAAA,EAAA,GAEd,UAAA,gBAAAwM,EAAC,KAAA,EAAE,MAAK,mBAAkB,QAAO,UAAS,KAAI,uBAAsB,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,gBAAgB,UAC1I,UAAA;AAAA,IAAA,gBAAAD,EAAC,UAAK,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,cAAU;AAAA,sBAC7CsM,IAAA,CAAA,CAAY;AAAA,EAAA,EAAA,CACf,EAAA,CACF;AAEJ;AAcO,SAASoD,GAAY,EAAE,SAAAC,KAAwC;AACpE,SAAOA,IACH,gBAAApD,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,GAAG,GAAG,WAAW,EAAA,GAAM,aAAQ,IACzD;AACN;ACnYA,MAAM4P,KAAmB;AAEzB,SAASC,GAAU;AAAA,EACjB,MAAAd;AAAA,EACA,OAAAxB;AAAA,EACA,KAAA7F;AAAA,EACA,UAAAoI;AAAA,EACA,SAAAb;AAAA,EACA,UAAAI;AACF,GAOG;AACD,SACE,gBAAA7C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW6C,IAAW,SAAY;AAAA,MAClC,SAASA,IAAW,SAAYJ;AAAA,MAChC,OAAO;AAAA,QACL,SAAS;AAAA,QAAQ,YAAY;AAAA,QAAU,KAAK;AAAA,QAC5C,SAAS;AAAA,QAAI,cAAc;AAAA,QAAI,WAAW;AAAA,QAC1C,YAAYjP,EAAE;AAAA,QACd,WAAW,aAAaA,EAAE,SAAS;AAAA,QACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,QACrC,QAAQqP,IAAW,gBAAgB;AAAA,QACnC,SAASA,IAAW,MAAM;AAAA,QAC1B,YAAY;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAAN;AAAA,QACD,gBAAAvC,EAAC,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,UAAU,KACjF,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAI,UAAAuN,GAAM;AAAA,UACtC,gBAAAhB,EAAC,OAAE,OAAOZ,EAAK,IAAImE,KAAY9P,EAAE,SAAS,GAAI,UAAA0H,EAAA,CAAI;AAAA,QAAA,GACpD;AAAA,QACA,gBAAA6E,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,YAAY,EAAA,GAC/E,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,kBAAiB,QAAQvM,EAAE,OAAO,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO,EAAA,CAC1G;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAS+P,GAAe,EAAE,SAAAC,GAAS,UAAAC,KAAuD;AACxF,QAAMC,IAAY,GAAGF,EAAQ,MAAM,GAAG,CAAC,CAAC,MAAMA,EAAQ,MAAM,EAAE,CAAC;AAC/D,SACE,gBAAAxD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAASyD;AAAA,MACT,OAAO;AAAA,QACL,SAAS;AAAA,QAAQ,YAAY;AAAA,QAAU,gBAAgB;AAAA,QACvD,SAAS;AAAA,QAAI,cAAc;AAAA,QAAI,OAAO;AAAA,QACtC,YAAYjQ,EAAE;AAAA,QACd,WAAW,aAAaA,EAAE,SAAS;AAAA,QACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,QACrC,QAAQ;AAAA,QAAQ,QAAQ;AAAA,QAAW,YAAY;AAAA,MAAA;AAAA,MAGjD,UAAA;AAAA,QAAA,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACxD,UAAA;AAAA,UAAA,gBAAAD,EAAC,SAAI,OAAO;AAAA,YACV,OAAO;AAAA,YAAG,QAAQ;AAAA,YAAG,cAAc;AAAA,YACnC,YAAYvM,EAAE;AAAA,UAAA,GACb;AAAA,UACH,gBAAAuM,EAAC,QAAA,EAAK,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,oBAAoB,eAAA,GACxD,UAAAkQ,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QACA,gBAAA3D,EAAC,UAAK,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,SAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhD;AAEA,SAASmQ,KAAa;AACpB,SACE,gBAAA5D,EAAC,SAAI,OAAO;AAAA,IACV,YAAY;AAAA,IAAG,OAAO;AAAA,IAAI,QAAQ;AAAA,IAAI,cAAc;AAAA,IACpD,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,gBAAgB;AAAA,EAAA,GAEvD,UAAA,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,OAAO,oBAC1E,UAAA;AAAA,IAAA,gBAAAD,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,QAAO,gBAAe,aAAY,MAAA,CAAM;AAAA,IACpE,gBAAAA,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,gBAAe,aAAY,OAAM,MAAK,OAAA,CAAO;AAAA,EAAA,EAAA,CACpF,EAAA,CACF;AAEJ;AAEA,SAAS6D,KAAW;AAClB,SACE,gBAAA7D,EAAC,SAAI,OAAO;AAAA,IACV,YAAY;AAAA,IAAG,OAAO;AAAA,IAAI,QAAQ;AAAA,IAAI,cAAc;AAAA,IACpD,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,gBAAgB;AAAA,EAAA,GAEvD,UAAA,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,OAAO,aAC1E,UAAA;AAAA,IAAA,gBAAAD,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,QAAO,gBAAe,aAAY,OAAM;AAAA,sBACvF,QAAA,EAAK,GAAE,WAAU,QAAO,gBAAe,aAAY,OAAM;AAAA,IAC1D,gBAAAA,EAAC,YAAO,IAAG,MAAK,IAAG,QAAO,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,EAAA,EAAA,CACtD,EAAA,CACF;AAEJ;AAEA,SAAwB8D,KAAgB;;AACtC,QAAMC,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3CyQ,IAAiBC,GAAgB,CAAC1Q,MAAMA,EAAE,cAAc,GACxD2Q,IAAoBD,GAAgB,CAAC1Q,MAAMA,EAAE,iBAAiB,GAC9D4Q,IAA2BF,GAAgB,CAAC1Q,MAAMA,EAAE,wBAAwB,GAC5E6Q,IAAkBC,GAAe,CAAC9Q,MAAMA,EAAE,SAAS,GACnD+Q,IAAQC,GAAe,CAAChR,MAAMA,EAAE,KAAK,GACrCiR,IAAaC,GAAkB,CAAClR,MAAMA,EAAE,UAAU,GAClD,EAAE,YAAAmR,EAAA,IAAeC,GAAA,GAGjBC,KAAyB,MAAM;AACnC,QAAI;AAAE,aAAOC,KAAe;AAAA,IAAa,QAAQ;AAAE;AAAA,IAAkB;AAAA,EACvE,GAAA;AACsB,EAAAD,OAClBE,IAAAN,EAAWI,CAAqB,MAAhC,QAAAE,EAAmC;AAIvC,QAAM,EAAE,YAAAC,GAAY,cAAAC,EAAA,IAAiBC,GAAQ,MAAM;AACjD,UAAMC,wBAAmB,IAAA;AACzB,eAAWC,KAAQ,OAAO,OAAOb,CAAK;AACpC,MAAAY,EAAa,IAAIC,EAAK,SAASA,CAAI;AAErC,UAAMC,IAAM,KAAK,IAAA,IAAQ;AACzB,QAAIvE,IAAQ,GACRwE,IAAU;AACd,eAAW,CAAChH,GAAMJ,CAAM,KAAK,OAAO,QAAQ+F,CAAc,GAAG;AAC3D,UAAI/F,KAAU,EAAG;AACjB,YAAMkH,IAAOD,EAAa,IAAI7G,CAAI;AAClC,UAAI,CAAC8G,EAAM;AACX,YAAMG,IAAMrH,IAASoF;AACrB,MAAAxC,KAASyE,GACLF,KAAOD,EAAK,gBAAaE,KAAWC;AAAA,IAC1C;AACA,WAAO,EAAE,YAAYzE,GAAO,cAAcwE,EAAA;AAAA,EAC5C,GAAG,CAACrB,GAAgBM,CAAK,CAAC,GAKpBiB,IAAiBN,GAAQ,MAAM;;AACnC,QAAIO,IAAW;AACf,eAAWC,KAAOvB;AAChB,MAAIuB,EAAI,UAAU,YACbA,EAAI,0BACLX,IAAAN,EAAWiB,EAAI,oBAAoB,MAAnC,gBAAAX,EAAsC,YAAW,OACrDU,KAAYC,EAAI;AAElB,WAAOD,IAAWnC;AAAAA,EACpB,GAAG,CAACa,GAAmBM,CAAU,CAAC,GAI5BkB,IAAY7D,GAAoB,oBAAI,KAAK;AAC/C,EAAA8D,GAAU,MAAM;AACd,QAAI,OAAO,KAAKnB,CAAU,EAAE,WAAW;AACvC,iBAAWiB,KAAOvB,GAAmB;AACnC,YAAIuB,EAAI,UAAU,YAAY,CAACA,EAAI,qBAAsB;AACzD,cAAMhH,IAASmH,GAAsBH,EAAI,sBAAsBjB,CAAU;AACzE,YAAI/F,EAAO,GAAI;AACf,cAAMoH,IAAM,GAAGpH,EAAO,IAAI,IAAIgH,EAAI,oBAAoB;AACtD,QAAIC,EAAU,QAAQ,IAAIG,CAAG,MAC7BH,EAAU,QAAQ,IAAIG,CAAG,GACzB,QAAQ;AAAA,UACN,SAASpH,EAAO,IAAI,WAAWgH,EAAI,MAAM,iBAAiBA,EAAI,oBAAoB,MAAMhH,EAAO,MAAM;AAAA,QAAA;AAAA,MAEzG;AAAA,EACF,GAAG,CAACyF,GAAmBM,CAAU,CAAC;AAElC,QAAMsB,IAAYf,IAAa,GACzBgB,IAAUR,IAAiB,GAI3BS,IAAgB,OAAO,OAAOhC,CAAc,EAAE,KAAK,CAACiC,MAAMA,IAAI,CAAC,GAC/DC,IACJ/B,KAA4BD,EAAkB,WAAW,KAAK,CAAC8B,GAE3DG,IAAaL,IAEfd,IAAe,IACb,GAAGxF,GAAgBwF,CAAY,CAAC,yBAChC,GAAGxF,GAAgBuF,CAAU,CAAC,gBAHhC,mBAKEqB,IAAUL,IACZ,GAAGvG,GAAgB+F,GAAgB,CAAC,CAAC,6BACrC;AAEJ,2BACG/E,IAAA,EAAK,OAAO,EAAE,cAAc,mBAC3B,UAAA;AAAA,IAAA,gBAAAR;AAAA,MAACsB;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,UAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEX,gBAAAtB,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAA,GAC1D,UAAAkG,IACC,gBAAAjG,EAAAoG,IAAA,EACE,UAAA;AAAA,MAAA,gBAAArG,EAAC4C,IAAA,EAAY;AAAA,wBACZA,IAAA,CAAA,CAAY;AAAA,IAAA,EAAA,CACf,IAEA,gBAAA3C,EAAAoG,IAAA,EACE,UAAA;AAAA,MAAA,gBAAArG;AAAA,QAACsD;AAAA,QAAA;AAAA,UACC,wBAAOO,IAAA,EAAS;AAAA,UAChB,OAAM;AAAA,UACN,KAAKuC;AAAA,UACL,UAAU,CAACL;AAAA,UACX,SAAS,MAAMhC,EAAS,iBAAiB;AAAA,QAAA;AAAA,MAAA;AAAA,MAE3C,gBAAA/D;AAAA,QAACsD;AAAA,QAAA;AAAA,UACC,wBAAOM,IAAA,EAAW;AAAA,UAClB,OAAM;AAAA,UACN,KAAKuC;AAAA,UACL,UAAUnB,IAAe,IAAIvR,EAAE,QAAQ;AAAA,UACvC,UAAU,CAACqS;AAAA,UACX,SAAS,MAAM/B,EAAS,aAAa;AAAA,QAAA;AAAA,MAAA;AAAA,IACvC,EAAA,CACF,EAAA,CAEJ;AAAA,sBAECpD,IAAA,EAAO;AAAA,IAEPyD,KACC,gBAAApE;AAAA,MAACwD;AAAA,MAAA;AAAA,QACC,SAASY;AAAA,QACT,UAAU,MAAM;AAAE,UAAAM,EAAA,EAAa,MAAM,MAAM;AAAA,UAAC,CAAC;AAAA,QAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAClD,GAEJ;AAEJ;AC9OA,SAAS4B,GAAU,EAAE,MAAAxK,GAAM,SAAAyK,GAAS,YAAAC,GAAY,WAAAC,KAA6B;AAC3E,QAAMC,IAAeF,MAAe1K,GAC9B6K,IAAWH,KAAc,QAAQ,CAACE;AAExC,SACE,gBAAAzG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAYuG,IAA+B,SAAlB;AAAA,MACzB,SAAS,MAAM,CAACA,KAAcC,EAAU3K,CAAI;AAAA,MAC5C,OAAO;AAAA,QACL,SAAS;AAAA,QAAQ,YAAY;AAAA,QAAU,gBAAgB;AAAA,QACvD,SAAS;AAAA,QAAI,cAAc;AAAA,QAC3B,YAAYrI,EAAE;AAAA,QACd,WAAW,iBAAiBA,EAAE,SAAS,oBAAoBA,EAAE,MAAM;AAAA,QACnE,QAAQ+S,IAAa,YAAY;AAAA,QACjC,SAASG,IAAW,MAAM;AAAA,QAC1B,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA;AAAA,QAAA,gBAAA1G,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAA,GACvD,UAAA;AAAA,UAAAsG,IACC,gBAAAvG,EAAC,SAAI,KAAKuG,GAAS,KAAI,IAAG,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,WAAW,QAAA,EAAQ,CAAG,IAEjG,gBAAAvG,EAACE,IAAA,EAAU,MAAApE,GAAY,MAAM,GAAA,CAAI;AAAA,UAEnC,gBAAAkE,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAI,UAAAqI,EAAA,CAAK;AAAA,QAAA,GACvC;AAAA,QACA,gBAAAkE,EAAC,KAAA,EAAE,OAAOZ,EAAK,IAAIsH,IAAejT,EAAE,SAASA,EAAE,SAAS,GACrD,UAAAiT,IAAe,gBAAgB,WAAA,CAClC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAwBE,KAAgB;AACtC,QAAM,EAAE,SAAAC,GAAS,QAAAC,GAAQ,QAAAC,GAAQ,YAAAP,EAAA,IAAe7B,GAAA,GAC1CZ,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3CyT,IAAe3C,GAAe,CAAC9Q,MAAMA,EAAE,MAAM;AAEnD,EAAAoS,GAAU,MAAM;AACd,IAAIqB,MAAiB,eAAajD,EAAS,SAAS;AAAA,EACtD,GAAG,CAACiD,GAAcjD,CAAQ,CAAC;AAE3B,QAAMkD,IAAiBT,KAAaM,KAAA,gBAAAA,EAAQ,QAAQ,SAAQ,OAAO,MAQ7DI,IAAgB,CAAC,GAHD,MAAM;AAAA,IAC1B,IAAI,IAAIL,EAAQ,IAAI,CAACM,MAAM,CAACA,EAAE,QAAQ,MAAMA,CAAC,CAAC,CAAC,EAAE,OAAA;AAAA,EAAO,CAEnB,EAAE,KAAK,CAACjR,GAAGjB,MAAM;AACtD,UAAMmS,IAAYlR,EAAE,eAAe,cAAc,IAAI,GAC/CmR,IAAYpS,EAAE,eAAe,cAAc,IAAI;AACrD,WAAOmS,IAAYC;AAAA,EACrB,CAAC,GAEKC,IAAgB,CAACxL,MAAiB;AACtC,UAAMqL,IAAIN,EAAQ,KAAK,CAACM,MAAMA,EAAE,QAAQ,SAASrL,CAAI;AACrD,IAAIqL,KAAGJ,EAAOI,EAAE,QAAQ,IAAI;AAAA,EAC9B;AAEA,SACE,gBAAAlH,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAArG;AAAA,MAACsB;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,UAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEX,gBAAAtB,EAACsC,IAAA,EACE,UAAA4E,EAAc,IAAI,CAACC,MAClB,gBAAAnH;AAAA,MAACsG;AAAA,MAAA;AAAA,QAEC,MAAMa,EAAE,QAAQ;AAAA,QAChB,SAASA,EAAE,QAAQ;AAAA,QACnB,YAAYF;AAAA,QACZ,WAAWK;AAAA,MAAA;AAAA,MAJNH,EAAE,QAAQ;AAAA,IAAA,CAMlB,GACH;AAAA,sBACCxG,IAAA,CAAA,CAAO;AAAA,EAAA,GACV;AAEJ;AC3FA,SAAS4G,GAAW,EAAE,MAAA/E,GAAM,OAAAjB,GAAO,MAAAiG,KAAgE;AACjG,SACE,gBAAAvH,EAAC,SAAI,OAAO;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,SAAS;AAAA,EAAA,GAET,UAAA;AAAA,IAAA,gBAAAD,EAAC,SAAI,OAAO;AAAA,MACV,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,YAAYvM,EAAE;AAAA,MACd,WAAW,aAAaA,EAAE,SAAS;AAAA,MACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,MACrC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAOA,EAAE;AAAA,IAAA,GACP,UAAA+O,GAAK;AAAA,IACT,gBAAAvC,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,UAAU,EAAA,GACxE,UAAA;AAAA,MAAA,gBAAAD,EAAC,KAAA,EAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,GAAI,UAAA8N,EAAA,CAAM;AAAA,MAC3C,gBAAAvB,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAI,UAAA+T,EAAA,CAAK;AAAA,IAAA,EAAA,CACzC;AAAA,EAAA,GACF;AAEJ;AAEA,MAAMC,uBACH,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA,gBAAAzH,EAAC,QAAA,EAAK,GAAE,kCAAA,CAAiC,EAAA,CAAE,GAEtL0H,uBACH,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA,gBAAA1H,EAAC,QAAA,EAAK,GAAE,8CAAA,CAA6C,EAAA,CAAE,GAElM2H,KACJ,gBAAA1H,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA;AAAA,EAAA,gBAAAD,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAI;AAAA,EAAE,gBAAAA,EAAC,QAAA,EAAK,GAAE,cAAA,CAAa;AAAA,GAAE;AAGxM,SAAwB4H,KAAoB;AAC1C,QAAM7D,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAE3CsU,IADexD,GAAe,CAAC9Q,MAAMA,EAAE,MAAM,MACd;AAErC,SACE,gBAAA0M,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAArG,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGT,GAAY,IAAI9L,EAAE,SAAS,GAAG,GAAG,eAAe,WAAW,YAAY,OAAO,UAAA,0CAE7F;AAAA,IAEA,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,0DAEjC;AAAA,IAEA,gBAAAwM,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,YAC5C,UAAA;AAAA,MAAA,gBAAAD,EAACuH,MAAW,MAAME,IAAU,OAAM,qBAAoB,MAAK,oCAAmC;AAAA,wBAC7FF,IAAA,EAAW,MAAMG,IAAY,OAAM,iBAAgB,MAAK,wCAAuC;AAAA,wBAC/FH,IAAA,EAAW,MAAMI,IAAW,OAAM,kBAAiB,MAAK,wCAAA,CAAwC;AAAA,IAAA,GACnG;AAAA,sBAEC,OAAA,EAAI,OAAO,EAAE,WAAW,UACvB,UAAA,gBAAA3H;AAAA,MAAC6C;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,MAAMkB,EAAS8D,IAAc,oBAAoB,gBAAgB;AAAA,QAC1E,QAAM;AAAA,MAAA;AAAA,IAAA,EACR,CACF;AAAA,EAAA,GACF;AAEJ;ACnEA,MAAMxE,KAAmB;AAEzB,SAAwByE,KAAiB;AACvC,QAAM/D,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3CwU,IAAqBlJ,EAAe,CAACtL,MAAMA,EAAE,kBAAkB,GAE/D2Q,IAAoBD,GAAgB,CAAC1Q,MAAMA,EAAE,iBAAiB,GAC9DiR,IAAaC,GAAkB,CAAClR,MAAMA,EAAE,UAAU,GAElDyU,IAAiB9D,EAAkB;AAAA,IACvC,CAAChO,MAAA;;AACC,aAAAA,EAAE,UAAU,YACZ,CAAC,CAACA,EAAE,0BACJ4O,IAAAN,EAAWtO,EAAE,oBAAoB,MAAjC,gBAAA4O,EAAoC,YAAW;AAAA;AAAA,EAAA,GAK7CY,IAAY7D,GAAoB,oBAAI,KAAK;AAC/C,EAAA8D,GAAU,MAAM;AACd,eAAWF,KAAOvB,GAAmB;AACnC,UAAIuB,EAAI,UAAU,YAAY,CAACA,EAAI,qBAAsB;AACzD,YAAMhH,IAASmH,GAAsBH,EAAI,sBAAsBjB,CAAU;AACzE,UAAI/F,EAAO,GAAI;AACf,YAAMoH,IAAM,GAAGpH,EAAO,IAAI,IAAIgH,EAAI,oBAAoB;AACtD,MAAIC,EAAU,QAAQ,IAAIG,CAAG,MAC7BH,EAAU,QAAQ,IAAIG,CAAG,GACzB,QAAQ;AAAA,QACN,SAASpH,EAAO,IAAI,WAAWgH,EAAI,MAAM,iBAAiBA,EAAI,oBAAoB,MAAMhH,EAAO,MAAM;AAAA,MAAA;AAAA,IAEzG;AAAA,EACF,GAAG,CAACyF,GAAmBM,CAAU,CAAC;AAElC,QAAMyD,IAAoB,CAACtK,GAAgB6H,GAAkB3H,GAAwBC,GAAwBC,GAA+BC,MAAuC;AACjL,IAAA+J,EAAmBpK,GAAQ6H,IAAWnC,IAAkBxF,GAAeC,GAAeC,GAAsBC,CAAkB,GAC9H+F,EAAS,eAAe;AAAA,EAC1B;AAEA,SACE,gBAAA9D,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAArG;AAAA,MAACsB;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,UAAS;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEV,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,WAAW,QAAQ,WAAW,EAAA,GACnD,UAAA,gBAAAtB,EAACsC,IAAA,EACE,UAAA0F,EAAe,IAAI,CAACE,MACnB,gBAAAlI;AAAA,MAACuC;AAAA,MAAA;AAAA,QAEC,MACE,gBAAAvC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKkI,EAAQ,iBAAiBA,EAAQ;AAAA,YACtC,KAAKA,EAAQ;AAAA,YACb,SAAS,CAAClV,MAAM;AACd,oBAAMmV,IAAMnV,EAAE;AACd,cAAImV,EAAI,QAAQD,EAAQ,kBACtBC,EAAI,MAAMD,EAAQ;AAAA,YAEtB;AAAA,YACA,OAAO;AAAA,cACL,OAAO;AAAA,cAAI,QAAQ;AAAA,cAAI,cAAc;AAAA,cAAO,YAAY;AAAA,cACxD,WAAW;AAAA,cACX,WAAW;AAAA,YAAA;AAAA,UACb;AAAA,QAAA;AAAA,QAGJ,OAAM;AAAA,QACN,KAAKA,EAAQ,iBAAiB,GAAGA,EAAQ,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,QAC3D,SAASA,EAAQ,WAAW7E,IAAkB,QAAQ,CAAC;AAAA,QACvD,SAAS,MAAM4E,EAAkBC,EAAQ,QAAQA,EAAQ,UAAUA,EAAQ,eAAeA,EAAQ,eAAeA,EAAQ,sBAAsBA,EAAQ,kBAAkB;AAAA,MAAA;AAAA,MArBpKA,EAAQ;AAAA,IAAA,CAuBhB,GAWH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;ACxFA,MAAME,KAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDnB,SAAwBC,KAAe;AACrC,QAAMtE,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3C+U,IAAgBzJ,EAAe,CAACtL,MAAMA,EAAE,aAAa,GACrDgV,IAAmB1J,EAAe,CAACtL,MAAMA,EAAE,gBAAgB,GAC3DiV,IAAkB3J,EAAe,CAACtL,MAAMA,EAAE,2BAA2B,GACrEkV,IAAiB5J,EAAe,CAACtL,MAAMA,EAAE,0BAA0B,GACnEsK,IAAgBgB,EAAe,CAACtL,MAAMA,EAAE,qBAAqB,GAE7DmV,IAAYF,GACZ/P,IAAS,WAAW6P,CAAa,KAAK,GACtCK,IAAO,CAAC,MAAM,KAAK,MAAM,CAAC,GAG1BC,IAAS/G,GAAsB,IAAI;AACzC,EAAA8D,GAAU,MAAM,MAAM;AAAE,IAAIiD,EAAO,WAAW,QAAM,qBAAqBA,EAAO,OAAO;AAAA,EAAG,GAAG,CAAA,CAAE;AAE/F,QAAMC,IAAY,CAAC5C,OAAe,KAAK,MAAMA,IAAI,GAAK,IAAI,KAAO,QAAQ,CAAC,GAEpE6C,IAAe,CAACxR,MAAmB;;AACvC,IAAIsR,EAAO,WAAW,QAAM,qBAAqBA,EAAO,OAAO;AAC/D,UAAMzW,IAAQsG;AACd,QAAI,KAAK,IAAInB,IAASnF,CAAK,IAAI,KAAM;AAErC,SADgB2S,KAAA,OAAO,eAAP,gBAAAA,GAAA,aAAoB,oCAAoC,SAC3D;AAAE,MAAAyD,EAAiBM,EAAUvR,CAAM,CAAC;AAAG;AAAA,IAAQ;AAE5D,UAAMyR,IAAW,KACXC,IAAY,YAAY,IAAA,GACxBC,IAAO,CAACC,OAAc,IAAI,KAAK,IAAI,IAAIA,IAAG,CAAC;AACjD,QAAIC,KAAc;AAClB,UAAMC,KAAO,CAAChE,OAAgB;AAC5B,YAAM8D,IAAI,KAAK,IAAI,IAAI9D,KAAM4D,KAAaD,CAAQ,GAC5C9C,KAAI9T,KAASmF,IAASnF,KAAS8W,EAAKC,CAAC,GACrC3V,IAAIsV,EAAU5C,EAAC;AACrB,MAAI1S,MAAM4V,OACRA,KAAc5V,GACdgV,EAAiBhV,CAAC,IAEhB2V,IAAI,IAAGN,EAAO,UAAU,sBAAsBQ,EAAI,MAC1C,UAAU;AAAA,IACxB;AACA,IAAAR,EAAO,UAAU,sBAAsBQ,EAAI;AAAA,EAC7C,GAEMC,IAAcZ,MAAmB,cACjCa,IAAc;AAEpB,MAAIhL,IAAuB,MACvBiL,IAAyB;AAC7B,EAAIjB,KAAiB7P,KAAU,MAAG6F,IAAQ,kCACtCgK,KAAiB7P,IAASiQ,MAAWpK,IAAQ,wBAAwBoK,CAAS,SAC9E,CAACpK,KAAS+K,KAAe5Q,IAAS,KAAKA,KAAUiQ,IAAYY,MAC/DC,IAAU;AAEZ,QAAMC,IAAU,CAAC,CAAClB,KAAiB,CAAChK,KAAS7F,IAAS,GAEhDgR,IAAYf,IAAY,IAAIA,IAAY,GACxCgB,IAAc,KAAK,IAAIjR,GAAQgR,CAAS,GACxCE,IAAYjB,IAAY,IAAI,KAAK,IAAI,KAAMgB,IAAchB,IAAa,GAAG,IAAI,GAE7EkB,IAAW,KAAK,IAAI,MAAQlB,IAAY,GAAI,GAE5CmB,IAAiBrK,GAAgBkJ,CAAS,GAC1ClH,IAAW3D,IACb,GAAGA,CAAa,sBAAsBgM,CAAc,UACpD,qBAAqBA,CAAc;AAEvC,SACE,gBAAA5J,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAArG,EAAC,WAAO,UAAAoI,GAAA,CAAW;AAAA,IACnB,gBAAApI,EAACsB,IAAA,EAAU,OAAM,2DAA0D,UAAAE,EAAA,CAAoB;AAAA,IAE/F,gBAAAvB,EAAC,SAAI,OAAO;AAAA,MACV,YAAYxM,EAAE;AAAA,MACd,WAAW,aAAaA,EAAE,SAAS;AAAA,MACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,MACrC,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MAAQ,eAAe;AAAA,MAAU,KAAK;AAAA,IAAA,GAG/C,UAAA;AAAA,MAAA,gBAAAwM,EAAC,SAAI,OAAO;AAAA,QACV,SAAS;AAAA,QAAQ,YAAY;AAAA,QAAU,gBAAgB;AAAA,QACvD,YAAYxM,EAAE;AAAA,QAAI,cAAc;AAAA,QAAG,SAAS;AAAA,QAC5C,WAAW,aAAa6K,IAAQ7K,EAAE,MAAMA,EAAE,MAAM;AAAA,QAChD,WAAW6K,IACP,kBAAkB7K,EAAE,SAAS,eAAeA,EAAE,GAAG,KACjD,kBAAkBA,EAAE,SAAS;AAAA,MAAA,GAEjC,UAAA;AAAA,QAAA,gBAAAuM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAOsI;AAAA,YACP,UAAU,CAACtV,MAAMuV,EAAiBvV,EAAE,OAAO,KAAK;AAAA,YAChD,KAAK;AAAA,YACL,KAAK0V;AAAA,YACL,aAAY;AAAA,YACZ,OAAO;AAAA,cACL,YAAY;AAAA,cAAQ,QAAQ;AAAA,cAAQ,SAAS;AAAA,cAC7C,GAAGtJ,EAAK,IAAI3L,EAAE,OAAO,GAAG;AAAA,cACxB,OAAO;AAAA,cACP,oBAAoB;AAAA,YAAA;AAAA,UACtB;AAAA,QAAA;AAAA,QAEF,gBAAAuM,EAAC,UAAK,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,MAAA,CAAG;AAAA,MAAA,GACzC;AAAA,MAGA,gBAAAuM;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,KAAK;AAAA,UACL,KAAKyJ;AAAA,UACL,MAAMG;AAAA,UACN,OAAOF;AAAA,UACP,UAAU,CAAC1W,MAAM;AACf,kBAAMO,IAAIsV,EAAU,WAAW7V,EAAE,OAAO,KAAK,CAAC;AAC9C,YAAIO,MAAM+U,KAAeC,EAAiBhV,CAAC;AAAA,UAC7C;AAAA,UACA,OAAO,EAAE,oBAAoB,GAAGoW,CAAS,IAAA;AAAA,QAAI;AAAA,MAAA;AAAA,MAI/C,gBAAA3J,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAA,GACjC,UAAA2I,EAAK,IAAI,CAACmB,MACT,gBAAA7J;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,MAAM;AACb,kBAAM3I,IAASwS,MAAM,IAChBT,IAAc,KAAK,IAAI,GAAGX,IAAYY,CAAW,IAAIZ,IACtDA,IAAYoB;AAChB,YAAAhB,EAAaxR,CAAM;AAAA,UACrB;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YAAG,cAAc;AAAA,YACvB,QAAQ;AAAA,YACR,WAAW,aAAa7D,EAAE,SAAS;AAAA,YACnC,QAAQ;AAAA,YACR,YAAYA,EAAE;AAAA,YACd,GAAG2L,EAAK,IAAI3L,EAAE,SAAS;AAAA,YACvB,WAAW,kBAAkBA,EAAE,MAAM;AAAA,YACrC,SAAS;AAAA,YACT,YAAY;AAAA,UAAA;AAAA,UAGb,UAAA;AAAA,YAAAqW,IAAI;AAAA,YAAI;AAAA,UAAA;AAAA,QAAA;AAAA,QArBJA;AAAA,MAAA,CAuBR,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IAEA,gBAAA9J,EAACmD,IAAA,EAAY,SAAS7E,KAAS,GAAA,CAAI;AAAA,IAClC,CAACA,KAASiL,KAAW,gBAAAvJ,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,GAAG,GAAG,WAAW,EAAA,GAAM,UAAA8V,GAAQ;AAAA,sBAE9E5I,IAAA,EAAO;AAAA,IACR,gBAAAX;AAAA,MAAC6C;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,MAAMkB,EAAS,iBAAiB;AAAA,QACzC,UAAU,CAACyF;AAAA,QACX,QAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACR,GACF;AAEJ;ACxNA,MAAMO,KAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAcrC,SAASC,GAAS,EAAE,OAAAxW,GAAO,OAAAkN,GAAO,UAAAqI,IAAW,MAAM,SAAAkB,IAAU,MAAqB;;AACvF,QAAMC,IACJ,OAAO,SAAW,SAClBpF,IAAA,OAAO,eAAP,gBAAAA,EAAA,aAAoB,oCAAoC,UAEpDqF,IAAQ,CAAC,GAAG3W,CAAK;AACvB,MAAI4W,IAAW;AAEf,SACE,gBAAApK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,oBAAoB;AAAA,QACpB,YAAY;AAAA,QACZ,GAAGU;AAAA,MAAA;AAAA,MAGJ,UAAAyJ,EAAM,IAAI,CAACE,GAAIjZ,MAAM;AACpB,YAAI,CAAC,KAAK,KAAKiZ,CAAE;AACf,iBAAO,gBAAArK,EAAC,QAAA,EAAc,UAAAqK,EAAA,GAAJjZ,CAAO;AAE3B,cAAMkZ,IAAQJ,IAAgB,IAAIE,IAAWH;AAC7C,eAAAG,KAEE,gBAAApK;AAAA,UAACuK;AAAA,UAAA;AAAA,YAEC,OAAO,OAAOF,CAAE;AAAA,YAChB,OAAAC;AAAA,YACA,UAAUJ,IAAgB,IAAInB;AAAA,UAAA;AAAA,UAHzB3X;AAAA,QAAA;AAAA,MAMX,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAASmZ,GAAY,EAAE,OAAAC,GAAO,OAAAF,GAAO,UAAAvB,KAAgE;AACnG,QAAM,CAACzR,GAAQmT,CAAS,IAAIzI,GAAS,CAAC,GAChC0I,IAAM7I,GAAsB,IAAI;AAEtC,SAAA8D,GAAU,OACR+E,EAAI,UAAU,sBAAsB,MAAMD,EAAUD,CAAK,CAAC,GACnD,MAAM;AACX,IAAIE,EAAI,WAAW,QAAM,qBAAqBA,EAAI,OAAO;AAAA,EAC3D,IACC,CAACF,CAAK,CAAC,GAGR,gBAAAxK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAW;AAAA,MACX,OAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,MAAA;AAAA,MAGjB,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,SAAS;AAAA,YACT,eAAe;AAAA,YACf,WAAW,eAAe1I,CAAM;AAAA,YAChC,YACEyR,MAAa,IACT,SACA,aAAaA,CAAQ,qCAAqCuB,CAAK;AAAA,YACrE,YAAY;AAAA,UAAA;AAAA,UAGb,UAAAP,GAAO,IAAI,CAAC5S,wBACV,QAAA,EAAa,OAAO,EAAE,QAAQ,OAAO,YAAY,EAAA,GAC/C,UAAAA,EAAA,GADQA,CAEX,CACD;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;ACrEA,MAAMwT,KAA+C;AAAA,EACnD,CAACC,GAAiB,wBAAwB,GAAG;AAAA,EAC7C,CAACA,GAAiB,yBAAyB,GAAG;AAAA,EAC9C,CAACA,GAAiB,qBAAqB,GAAG;AAAA,EAC1C,CAACA,GAAiB,YAAY,GAAG;AAAA,EACjC,CAACA,GAAiB,iBAAiB,GAAG;AAAA,EACtC,CAACA,GAAiB,cAAc,GAAG;AAAA,EACnC,CAACA,GAAiB,sBAAsB,GAAG;AAC7C,GAGMC,KACJ;AAAA,EACE,QAAQ,EAAE,OAAO,eAAe,KAAK,KAAA;AAAA,EACrC,QAAQ,EAAE,OAAO,eAAe,KAAK,YAAA;AAAA,EACrC,QAAQ,EAAE,OAAO,eAAe,KAAK,YAAA;AAAA,EACrC,QAAQ,EAAE,OAAO,eAAe,KAAK,KAAA;AACvC,GAGIC,KAA+B,CAAC,UAAU,UAAU,UAAU,QAAQ,GAEtEC,KAAa,OAAc;AAGjC,SAASC,KAAuC;AAC9C,QAAMC,IAAO,KAAK,IAAA,IAAQ;AAC1B,SAAOH,GAAe,OAAO,CAAC5M,MACjB,OAAOgN,GAAWhN,CAAE,EAAE,kBAAkB,IACvC+M,IAAOF,EACpB;AACH;AAEA,SAAwBI,KAAiB;AACvC,QAAM,EAAE,YAAAC,EAAA,IAAeC,GAAA,GACjBtH,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3C+X,IAAqBzM,EAAe,CAACtL,MAAMA,EAAE,kBAAkB,GAC/DgY,IAAsB1M,EAAe,CAACtL,MAAMA,EAAE,mBAAmB,GACjE+U,IAAgBzJ,EAAe,CAACtL,MAAMA,EAAE,aAAa,GACrDiY,IAA+B3M,EAAe,CAACtL,MAAMA,EAAE,4BAA4B,GACnFkY,IAAUC,GAAe,CAACnY,MAAMA,EAAE,OAAO,GACzCiR,IAAaC,GAAkB,CAAClR,MAAMA,EAAE,UAAU,GAClD+Q,IAAQC,GAAe,CAAChR,MAAMA,EAAE,KAAK,GAKrC,CAACoY,GAAOC,CAAQ,IAAI5J,GAAwB,IAAI;AACtD,EAAA2D,GAAU,MAAM;AACd,IAAAkG,GAAsBT,CAAU,EAAE,KAAKQ,CAAQ,EAAE,MAAM,MAAM;AAC3D,MAAAA,EAAS,KAAK,IAAA,IAAQ,GAAI;AAAA,IAC5B,CAAC;AAAA,EACH,GAAG,CAACR,CAAU,CAAC;AAKf,QAAMU,IAAsB7G,GAAQ,MAAM;AACxC,UAAM8G,IAAef,GAAA;AACrB,WAAKQ,IACEO,EAAa;AAAA,MAAO,CAACC,MAC1B,EAAQP,EAAQ,GAAGD,CAA4B,IAAIQ,CAAK,KAAK;AAAA,IAAC,IAFtB,CAAA;AAAA,EAI5C,GAAG,CAACR,GAA8BC,CAAO,CAAC;AAI1C,EAAA9F,GAAU,MAAM;AACd,QAAImG,EAAoB,WAAW,GAAG;AACpC,MAAIR,OAAwC,IAAI;AAChD;AAAA,IACF;AACA,KAAI,CAACA,KAAsB,CAACQ,EAAoB,SAASR,CAAkB,MACzEC,EAAoBO,EAAoB,CAAC,CAAC;AAAA,EAE9C,GAAG,CAACR,GAAoBC,GAAqBO,CAAmB,CAAC;AAEjE,QAAMG,IAAe,WAAW3D,CAAa,KAAK,GAG5C4D,IAAiBP,KAAS,KAAK,IAAA,IAAQ,KAMvCQ,IAAWL,EAAoB,IAAI,CAACE,MAAU;;AAClD,UAAMI,IAAOvB,GAAamB,CAAK,KAAK;AAAA,MAClC,SAAOlH,IAAAoG,GAAWc,CAAK,MAAhB,gBAAAlH,EAAmB,mBAAkBkH;AAAA,MAC5C,KAAK;AAAA,IAAA,GAGDK,IAAWnB,GAAWc,CAAK,GAC3BvN,IAA0B+M,IAC5Bc,GAAa;AAAA,MACX,sBAAsBd;AAAA,MACtB,YAAYQ;AAAA,MACZ,WAAWC;AAAA,MACX,OAAOC;AAAA,MACP,YAAA1H;AAAA,MACA,OAAAF;AAAA,MACA,SAAAmH;AAAA,IAAA,CACD,IACD;AAAA,MACE,IAAI;AAAA,MACJ,MAAMb,GAAiB;AAAA,MACvB,QAAQ;AAAA,IAAA;AAGd,QAAI2B,IAAa;AACjB,QAAI9N,EAAO,IAAI;AACb,YAAM+N,IAAWf,EAAQ,GAAGD,CAA4B,IAAIQ,CAAK,KAAK,GAChES,IAAcC,GAAoB;AAAA,QACtC,WAAWT;AAAA,QACX,UAAAI;AAAA,QACA,OAAOH;AAAA,MAAA,CACR,GACKS,KAAMC,IAAAJ,KAAA,gBAAAA,EAAU,SAAV,QAAAI,EAAgB,SACxBC,GAAmBL,EAAS,MAAMC,CAAW,IAC7C;AACJ,MAAAF,MAAcI,KAAA,gBAAAA,EAAK,sBAAqB,KAAKF;AAAA,IAC/C;AACA,UAAMK,IAAWC,GAAgBR,CAAU,GACrCS,IAAiB,KAAK;AAAA,MAC1B;AAAA,MACA,KAAK,MAAM,OAAOX,EAAS,kBAAkB,IAAIH,KAAkB,KAAK;AAAA,IAAA;AAG1E,WAAO,EAAE,OAAAF,GAAO,GAAGI,GAAM,QAAA3N,GAAQ,YAAA8N,GAAY,UAAAO,GAAU,gBAAAE,EAAA;AAAA,EACzD,CAAC,GAKKtH,IAAY7D,GAAoB,oBAAI,KAAK;AAC/C,EAAA8D,GAAU,MAAM;AACd,QAAK6F;AACL,iBAAWyB,KAAKd,GAAU;AACxB,YAAIc,EAAE,OAAO,GAAI;AACjB,cAAMpH,IAAM,GAAGoH,EAAE,OAAO,IAAI,IAAIzB,CAA4B,IAAIyB,EAAE,KAAK;AACvE,QAAIvH,EAAU,QAAQ,IAAIG,CAAG,MAC7BH,EAAU,QAAQ,IAAIG,CAAG,GACzB,QAAQ;AAAA,UACN,SAASoH,EAAE,OAAO,IAAI,eAAezB,CAA4B,cAAcyB,EAAE,KAAK,MAAMA,EAAE,OAAO,MAAM;AAAA,QAAA;AAAA,MAE/G;AAAA,EACF,GAAG,CAACd,GAAUX,CAA4B,CAAC;AAE3C,QAAM0B,IAAMf,EAAS,KAAK,CAACc,MAAMA,EAAE,UAAU3B,CAAkB;AAE/D,SACE,gBAAArL,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAApG,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACxD,UAAA;AAAA,QAAA,gBAAAD,EAAC,KAAA,EAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,GAAG,UAAA,4BAAA,CAAyB;AAAA,QAC7D,gBAAAuM,EAACqB,IAAA,EAAQ,UAAS,SAAQ,MAAK,wJAAA,CAAwJ;AAAA,MAAA,GACzL;AAAA,MACA,gBAAArB,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,+FAAA,CAGjC;AAAA,IAAA,GACF;AAAA,IAEA,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAA,GAC1D,UAAA;AAAA,MAAAkM,EAAS,WAAW,KACnB,gBAAAlM;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,YAAYxM,EAAE;AAAA,YACd,cAAc;AAAA,YACd,SAAS;AAAA,YACT,WAAW,aAAaA,EAAE,MAAM;AAAA,YAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,UAAA;AAAA,UAG1C,UAAA;AAAA,YAAA,gBAAAuM,EAAC,KAAA,EAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,GAAG,UAAA,yBAAA,CAAsB;AAAA,YAC1D,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,2EAAA,CAGjC;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKJ,gBAAAuM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC1D,UAAAmM,EAAS,IAAI,CAACc,MAAM;AACnB,cAAME,IAAa7B,MAAuB2B,EAAE,OACtCG,IAAWH,EAAE,OAAO,KAAK,OAAOA,EAAE,OAAO,MACzCI,IAAUD,MAAa,MACvBE,IAAaD,IACf5Z,EAAE,QACF0Z,IAAa1Z,EAAE,UAAUA,EAAE;AAC/B,eACE,gBAAAwM;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAWkN,IAAa,gCAAgC;AAAA,YACxD,SAAS,MAAM5B,EAAoB0B,EAAE,KAAmB;AAAA,YACxD,OAAO;AAAA,cACL,OAAO;AAAA,cACP,WAAW;AAAA,cACX,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,SAAS;AAAA,cACT,cAAc;AAAA,cACd,QAAQ;AAAA,cACR,YAAYE,IAAa1Z,EAAE,KAAKA,EAAE;AAAA,cAClC,WAAW,aAAa0Z,IAAa1Z,EAAE,SAASA,EAAE,SAAS;AAAA,cAC3D,WAAW0Z,IACP,kBAAkB1Z,EAAE,SAAS,KAC7B,kBAAkBA,EAAE,MAAM;AAAA,cAC9B,YAAY;AAAA,cACZ,SAAS4Z,IAAU,MAAM;AAAA,YAAA;AAAA,YAG3B,UAAA;AAAA,cAAA,gBAAApN,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,gBAAA,gBAAAD,EAAC,QAAA,EAAK,OAAOZ,EAAK,IAAIkO,GAAYH,IAAa,MAAM,GAAG,GACrD,UAAAF,EAAE,MAAA,CACL;AAAA,kCACC,QAAA,EAAK,OAAO7N,EAAK,IAAI3L,EAAE,KAAK,GAC1B,UAAA;AAAA,kBAAAwZ,EAAE;AAAA,kBAAe;AAAA,kBAAEA,EAAE,mBAAmB,IAAI,QAAQ;AAAA,gBAAA,EAAA,CACvD;AAAA,cAAA,GACF;AAAA,cACCG,IACC,gBAAApN;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,GAAGZ,EAAK,IAAI3L,EAAE,KAAK;AAAA,oBACnB,SAAS;AAAA,oBACT,cAAc;AAAA,oBACd,YAAYA,EAAE;AAAA,oBACd,YAAY;AAAA,kBAAA;AAAA,kBAGb,UAAAkX,GAAcyC,CAAQ,KAAK;AAAA,gBAAA;AAAA,cAAA,IAG9B,gBAAAnN,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,YAAY,KAAK,KACnF,UAAA;AAAA,gBAAA,gBAAAD;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAO;AAAA,sBACL,GAAGZ,EAAK,IAAI3L,EAAE,OAAO,GAAG;AAAA,sBACxB,oBAAoB;AAAA,oBAAA;AAAA,oBAGrB,UAAAwZ,EAAE,WAAW,OACV,iBACA,IAAIzN,GAAgByN,EAAE,UAAU,CAAC,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEvCtN;AAAA,cACyC,EAAA,CAE5C;AAAA,YAAA;AAAA,UAAA;AAAA,UAxDGsN,EAAE;AAAA,QAAA;AAAA,MA4Db,CAAC,EAAA,CACH;AAAA,MAGCC,KACC,gBAAAjN;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,YAAYxM,EAAE;AAAA,YACd,cAAc;AAAA,YACd,SAAS;AAAA,YACT,WAAW,aAAaA,EAAE,MAAM;AAAA,YAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,YACxC,SAAS;AAAA,YACT,eAAe;AAAA,YACf,KAAK;AAAA,UAAA;AAAA,UAGP,UAAA;AAAA,YAAA,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,qBAAiB;AAAA,YACjDyZ,EAAI,OAAO,KACV,gBAAAlN,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,YAAY,KAAK,EAAA,GACzD,UAAAkN,EAAI,WAAW,OACd,gBAAAlN;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,GAAGT,GAAY,IAAI9L,EAAE,KAAK;AAAA,kBAC1B,YAAY;AAAA,kBACZ,oBAAoB;AAAA,gBAAA;AAAA,gBAEvB,UAAA;AAAA,cAAA;AAAA,YAAA,IAID,gBAAAuM;AAAA,cAACgK;AAAA,cAAA;AAAA,gBACC,OAAO,IAAIxK,GAAgB0N,EAAI,UAAU,CAAC,CAAC;AAAA,gBAC3C,OAAO,EAAE,GAAG3N,GAAY,IAAI9L,EAAE,KAAK,GAAG,YAAY,IAAA;AAAA,cAAI;AAAA,YAAA,EACxD,CAEJ,IAEA,gBAAAwM,EAAAoG,IAAA,EACE,UAAA;AAAA,cAAA,gBAAArG,EAAC,OAAE,OAAO,EAAE,GAAGT,GAAY,IAAI9L,EAAE,KAAK,GAAG,YAAY,OAClD,UAAAkX,GAAcuC,EAAI,OAAO,IAAI,KAAK,iBACrC;AAAA,cACA,gBAAAlN,EAAC,KAAA,EAAE,OAAOZ,EAAK,IAAI3L,EAAE,KAAK,GAAI,UAAAyZ,EAAI,OAAO,OAAA,CAAO;AAAA,gCAC/C,KAAA,EAAE,OAAO,EAAE,GAAG9N,EAAK,IAAI3L,EAAE,KAAK,GAAG,eAAe,UAAU,WAAW,KACnE,UAAAyZ,EAAI,OAAO,KAAA,CACd;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,GAGJ;AAAA,IAEA,gBAAAlN;AAAA,MAAC6C;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAS,MAAMkB,EAAS,cAAc;AAAA,QACtC,UAAU,CAACuH,KAAsB,EAAC4B,KAAA,QAAAA,EAAK,OAAO;AAAA,QAC9C,QAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACR,GACF;AAEJ;AClTA,SAASK,GAAe;AAAA,EACtB,OAAA/Z;AAAA,EACA,UAAAga;AACF,GAGG;AACD,QAAMC,IAAW5L,GAAuB,IAAI,GACtC6L,IAAM,GAAGC,IAAM,GACfxM,KAAQ3N,IAAQka,MAAQC,IAAMD,KAAQ,KAEtCE,IAAe,CAACC,MAA4B;AAChD,UAAM1L,IAAOsL,EAAS,QAAS,sBAAA,GACzBtX,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI0X,IAAU1L,EAAK,MAAMA,EAAK,KAAK,CAAC,GACzD2L,IAAMJ,IAAOvX,IAAIgM,EAAK,SAAUwL,IAAMD;AAC5C,WAAO,KAAK,MAAMI,IAAM,GAAG,IAAI;AAAA,EACjC,GAEMC,IAAoB,CAAC/a,MAA0B;AACnD,IAAAA,EAAE,eAAA,GACFya,EAAS,QAAS,kBAAkBza,EAAE,SAAS,GAC/Cwa,EAASI,EAAa5a,EAAE,OAAO,CAAC;AAAA,EAClC,GAEMgb,IAAoB,CAAChb,MAA0B;AACnD,IAAIA,EAAE,YAAY,KAClBwa,EAASI,EAAa5a,EAAE,OAAO,CAAC;AAAA,EAClC,GAEMib,IAAcza,IAAQ,IAAI,YAAY;AAE5C,SACE,gBAAAyM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,IAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKwN;AAAA,QACL,eAAeM;AAAA,QACf,eAAeC;AAAA,QACf,OAAO,EAAE,UAAU,YAAY,QAAQ,IAAI,SAAS,QAAQ,YAAY,UAAU,QAAQ,WAAW,YAAY,OAAA;AAAA,QAEjH,UAAA;AAAA,UAAA,gBAAAhO,EAAC,SAAI,OAAO;AAAA,YACV,UAAU;AAAA,YAAY,MAAM;AAAA,YAAG,OAAO,GAAGmB,CAAG;AAAA,YAAK,QAAQ;AAAA,YACzD,YAAY8M;AAAA,YACZ,cAAc9M,IAAM,KAAK,UAAU;AAAA,YACnC,WAAW;AAAA,YACX,WAAW;AAAA,YACX,UAAUA,IAAM,IAAI,IAAI;AAAA,UAAA,GACvB;AAAA,UACH,gBAAAnB,EAAC,SAAI,OAAO;AAAA,YACV,UAAU;AAAA,YAAY,MAAM,GAAGmB,CAAG;AAAA,YAAK,OAAO;AAAA,YAAG,QAAQ;AAAA,YACzD,YAAY1N,EAAE;AAAA,YACd,cAAc0N,IAAM,IAAI,UAAU;AAAA,YAClC,WAAW,aAAa1N,EAAE,MAAM;AAAA,YAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,UAAA,GACvC;AAAA,UACH,gBAAAuM,EAAC,SAAI,OAAO;AAAA,YACV,UAAU;AAAA,YAAY,MAAM,QAAQmB,CAAG;AAAA,YACvC,OAAO;AAAA,YAAI,QAAQ;AAAA,YAAI,cAAc;AAAA,YACrC,YAAY;AAAA,YACZ,WAAW,aAAa1N,EAAE,SAAS;AAAA,YACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,YACrC,QAAQ;AAAA,YAAG,YAAY;AAAA,UAAA,EACzB,CAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEL,gBAAAuM,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,gBAAgB,gBAAA,GAC5C,UAAA,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,EAAE,IAAI,CAACkO,MACzC,gBAAAlO,EAAC,QAAA,EAAa,OAAO;AAAA,MACnB,GAAGZ,EAAK,IAAI3L,EAAE,SAAS;AAAA,MACvB,eAAe;AAAA,MAAsB,eAAe;AAAA,MACpD,OAAO;AAAA,MAAI,WAAWya,MAAM,OAAO,SAASA,MAAM,OAAO,UAAU;AAAA,IAAA,GACjE,UAAAA,KAJOA,CAIL,CACP,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAEA,SAAwBC,KAAc;;AACpC,QAAM,EAAE,YAAA/C,EAAA,IAAeC,GAAA,GACjBvE,IAASnC,GAAA,GAKT,CAACgH,GAAOC,CAAQ,IAAI5J,GAAwB,IAAI;AACtD,EAAA2D,GAAU,MAAM;AACd,IAAAkG,GAAsBT,CAAU,EAAE,KAAKQ,CAAQ,EAAE,MAAM,MAAM;AAC3D,MAAAA,EAAS,KAAK,IAAA,IAAQ,GAAI;AAAA,IAC5B,CAAC;AAAA,EACH,GAAG,CAACR,CAAU,CAAC;AAEf,QAAMrH,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3C6a,IAAWvP,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3C8a,IAASxP,EAAe,CAACtL,MAAMA,EAAE,MAAM,GACvC+a,IAAUzP,EAAe,CAACtL,MAAMA,EAAE,OAAO,GACzCgb,IAAc1P,EAAe,CAACtL,MAAMA,EAAE,WAAW,GACjDib,IAAY3P,EAAe,CAACtL,MAAMA,EAAE,SAAS,GAC7Ckb,IAAmB5P,EAAe,CAACtL,MAAMA,EAAE,gBAAgB,GAC3Dmb,IAAe7P,EAAe,CAACtL,MAAMA,EAAE,YAAY,GACnDob,IAAkB9P,EAAe,CAACtL,MAAMA,EAAE,eAAe,GACzDqb,IAAc/P,EAAe,CAACtL,MAAMA,EAAE,WAAW,GACjDsb,IAAiBhQ,EAAe,CAACtL,MAAMA,EAAE,cAAc,GAEvD+U,IAAgBzJ,EAAe,CAACtL,MAAMA,EAAE,aAAa,GACrD+X,IAAqBzM,EAAe,CAACtL,MAAMA,EAAE,kBAAkB,GAC/Dub,IAA6BjQ,EAAe,CAACtL,MAAMA,EAAE,0BAA0B,GAC/Ewb,IAA8BlQ,EAAe,CAACtL,MAAMA,EAAE,2BAA2B,GACjFyb,IAA6BnQ,EAAe,CAACtL,MAAMA,EAAE,0BAA0B,GAE/EkY,IAAUC,GAAe,CAACnY,MAAMA,EAAE,OAAO,GACzC+Q,IAAQC,GAAe,CAAChR,MAAMA,EAAE,KAAK,GACrCiR,IAAaC,GAAkB,CAAClR,MAAMA,EAAE,UAAU,GAClD2Q,IAAoBD,GAAgB,CAAC1Q,MAAMA,EAAE,iBAAiB,GAC9D0b,IAAoBhL,GAAgB,CAAC1Q,MAAMA,EAAE,iBAAiB,GAC9D2b,IAAuBjL,GAAgB,CAAC1Q,MAAMA,EAAE,oBAAoB,GACpE4b,IAAqB9K,GAAe,CAAC9Q,MAAMA,EAAE,kBAAkB,GAE/D0Y,IAAe,WAAW3D,CAAa,KAAK,GAC5C+D,IAAWf,IAAqBJ,GAAWI,CAAkB,IAAI,MACjE8D,MAAU/C,KAAA,gBAAAA,EAAU,mBAAkB;AAI1B,EAAAA,KAD6B,EAAE,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,KAAA,EAC1CA,EAAS,KAAK;AAI3D,QAAMgD,KAAuBP,MAA+B,eACxD5K,EAAkB,KAAK,CAAChO,MAAMA,EAAE,WAAW4Y,CAA0B,IACrE,MAKEQ,KAAmBD,MAAA,gBAAAA,GAAsB,sBACzCE,IAAYD,MAAoBhE,IAClChH,EAAM,GAAGgL,EAAgB,IAAIhE,CAAkB,EAAE,KAAK,OACtD,MAGEkE,KAAclE,IACfiE,KAAaD,KACV,GAAGA,EAAgB,IAAIhE,CAAkB,QACzC,OAAO,KAAKG,CAAO,EAAE,KAAK,CAACgE,MAAMA,EAAE,SAAS,IAAInE,CAAkB,KAAK,CAAC,IAC5E,MACEkB,IAAWgD,KAAc/D,EAAQ+D,EAAW,KAAK,OAAO,MAMxDtD,KAAiBP,KAAS,KAAK,IAAA,IAAQ,KACvC+D,IAAWrD,IACbK,GAAoB;AAAA,IAClB,WAAWT;AAAA,IACX,UAAAI;AAAA,IACA,OAAOH;AAAA,EAAA,CACR,IACD,GAGEyD,KAAiB7K,KAAA0H,KAAA,gBAAAA,EAAU,SAAV,QAAA1H,GAAgB,SACnC+H,GAAmBL,EAAS,MAAMkD,CAAQ,IAC1C,MAEEE,MAAeD,KAAA,gBAAAA,EAAgB,0BAAyB,IACxDE,MAAuBF,KAAA,gBAAAA,EAAgB,gBAAe,GAKtDG,MACJH,KAAA,gBAAAA,EAAgB,sBAAqB,OACjCA,EAAe,oBAAoBD,IACnC,GAGAK,KAAahD,GAAgB+C,EAAe,GAC5CE,KAAeF,KAAkBC,IACjCE,MAAUC,KAAsB,KAAK,QAAQ,CAAC,GAG9CC,KAAWvB,IAAc,KAEzBwB,KAAYhC,MAAa,WACzBiC,KACJvB,MAA+B,gBAC9BA,MAA+B,QAC9B5K,EAAkB,KAAK,CAAChO,MAAMA,EAAE,WAAW4Y,CAA0B,GACnEwB,KACJ,CAAC,CAACxB,KACF,CAAC,CAACxD,KACF,CAAC8E,MACDR,MACAS,IAIIE,MAAoB,MAAM;AAC9B,QAAIhB,EAAW,QAAO;AACtB,UAAMiB,IAAoBhB,OACpBlE,IAAqB,OAAO,KAAKG,CAAO,EAAE,KAAK,CAACgE,OAAMA,GAAE,SAAS,IAAInE,CAAkB,KAAK,CAAC,IAAI;AACvG,QAAI,CAACkF,EAAmB,QAAO;AAE/B,UAAMje,KAAQie,EAAkB,MAAM,GAAG;AACzC,IAAAje,GAAM,IAAA;AACN,UAAMke,KAAiBle,GAAM,IAAA,GACvBme,IAAcne,GAAM,KAAK,GAAG,GAC5B4S,IAAOb,EAAM,GAAGoM,CAAW,IAAID,EAAc,EAAE;AACrD,WAAKtL,IACE;AAAA,MACL,YAAYA,EAAK;AAAA,MACjB,oBAAoBA,EAAK;AAAA,MACzB,gBAAgBA,EAAK;AAAA,MACrB,aAAAuL;AAAA,IAAA,IALgB;AAAA,EAOpB,GAAA,GAEMC,IAAapB,IACf;AAAA,IACE,YAAYA,EAAU;AAAA,IACtB,oBAAoBA,EAAU;AAAA,IAC9B,gBAAgBA,EAAU;AAAA,IAC1B,aAAaD;AAAA,EAAA,IAEfiB,IAEEK,KAAaC,GAAY,YAAY;AACzC,QAAI,CAAC/B,KAA8B,CAACxD,EAAoB;AACxD,QAAI,CAACqF,EAAY,OAAM,IAAI,MAAM,6CAA6C;AAC9E,QAAI,CAACnE,EAAU,OAAM,IAAI,MAAM,sCAAsC;AACrE,QAAI,CAACH,EAAU,OAAM,IAAI,MAAM,sBAAsB;AAIrD,UAAMyE,IAAOxE,GAAa;AAAA,MACxB,sBAAsBqE,EAAW;AAAA,MACjC,YAAYrF;AAAA,MACZ,WAAWW;AAAA,MACX,OAAON,KAAS,KAAK,IAAA,IAAQ;AAAA,MAC7B,YAAAnH;AAAA,MACA,OAAAF;AAAA,MACA,SAAAmH;AAAA,IAAA,CACD;AACD,QAAI,CAACqF,EAAK;AACR,oBAAQ;AAAA,QACN,SAASA,EAAK,IAAI,eAAeH,EAAW,WAAW,cAAcrF,CAAkB,MAAMwF,EAAK,MAAM;AAAA,MAAA,GAEpG,IAAI,MAAM,GAAGA,EAAK,MAAM,KAAKA,EAAK,IAAI,GAAG;AAGjD,IAAAvC,EAAY,SAAS,GACrBC,EAAU,YAAY;AAItB,UAAMuC,KAAa,KAAK,IAAIjB,MAAmB,IAAIK,KAAW,MAAM,CAAC,GAM/Da,KAAa,MAAMnF,GAAsBT,CAAU,EAAE;AAAA,MACzD,MAAM,KAAK,QAAQ;AAAA,IAAA,GAEf6F,IAAgBvE,GAAoB;AAAA,MACxC,WAAWT;AAAA,MACX,UAAAI;AAAA,MACA,OAAO2E;AAAA,IAAA,CACR;AAED,QAAI;AACF,UAAIlC,MAA+B,cAAc;AAE/C,cAAMoC,GAAoB;AAAA,UACxB,YAAA9F;AAAA,UACA,QAAAtE;AAAA,UACA,YAAY6J,EAAW;AAAA,UACvB,oBAAoBA,EAAW;AAAA,UAC/B,gBAAgBA,EAAW;AAAA,UAC3B,sBAAsBA,EAAW;AAAA,UACjC,WAAW1E;AAAA,QAAA,CACZ,GACDuC,EAAU,SAAS;AACnB,cAAM2C,IAAe,MAAMC,GAAc;AAAA,UACvC,YAAAhG;AAAA,UACA,QAAAtE;AAAA,UACA,cAAc0F,EAAS;AAAA,UACvB,QAAQmE,EAAW;AAAA,UACnB,iBAAiBM;AAAA,UACjB,kBAAkBF;AAAA,UAClB,gBAAgBjB;AAAA,QAAA,CACjB;AACD,QAAAtB,EAAU,UAAU,GACpBC,EAAiBsB,EAAU,GAC3BxB,EAAY,WAAW4C,EAAa,SAAS,GAC7CpN,EAAS,UAAU;AAAA,MACrB,OAAO;AAIL,cAAMsN,IAAYrC,GACZsC,KAAS,MAAMC,GAAsB;AAAA,UACzC,YAAAnG;AAAA,UACA,QAAAtE;AAAA,UACA,YAAY6J,EAAW;AAAA,UACvB,oBAAoBA,EAAW;AAAA,UAC/B,gBAAgBA,EAAW;AAAA,UAC3B,sBAAsBA,EAAW;AAAA,UACjC,oBAAoB7B;AAAA,UACpB,WAAW7C;AAAA,UACX,gBAAgBgF;AAAA,UAChB,iBAAiBlC;AAAA,UACjB,cAAcvC,EAAS;AAAA,UACvB,kBAAkBuE;AAAA,UAClB,gBAAgBjB;AAAA,UAChB,WAAAuB;AAAA,QAAA,CACD;AACD,QAAA7C,EAAU,UAAU,GACpBC,EAAiBsB,EAAU,GAC3BxB,EAAY,WAAW+C,GAAO,SAAS,GACvCvN,EAAS,UAAU;AAAA,MACrB;AAAA,IACF,SAASyN,GAAK;AACZ,MAAAjD;AAAA,QACE;AAAA,QACA;AAAA,QACAiD,aAAe,QAAQA,EAAI,UAAU;AAAA,MAAA;AAAA,IAEzC,UAAA;AACE,YAAMC,IAAQ3K,EAAO;AACrB,MAAAsE,EAAW,WAAWqG,GAAO,WAAW,EAAE,KAAKtC,CAAkB,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC,GACjFuC,GAActG,GAAYqG,CAAK,EAC5B,KAAK,CAACE,OAAS;AACd,QAAA1C,EAAkB0C,EAAI,GACtBC,GAA0BH,EAAM,SAAA,GAAYE,EAAI;AAAA,MAClD,CAAC,EACA,MAAM,MAAM;AAAA,MAAC,CAAC,GACjBE,GAAuBzG,GAAYqG,CAAK,EAAE,KAAKvC,CAAoB,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACrF;AAAA,EACF,GAAG;AAAA,IACD1C;AAAA,IACAmE;AAAA,IACApB;AAAA,IACAjL;AAAA,IACAE;AAAA,IACAiH;AAAA,IACAE;AAAA,IACA0D;AAAA,IACAP;AAAA,IACAxD;AAAA,IACA0D;AAAA,IACA5D;AAAA,IACAtE;AAAA,IACAmF;AAAA,IACAI;AAAA,IACA0C;AAAA,IACAgB;AAAA,IACAD;AAAA,IACAK;AAAA,IACA5B;AAAA,IACAC;AAAA,IACAC;AAAA,IACA1K;AAAA,IACAoL;AAAA,IACAF;AAAA,IACAC;AAAA,EAAA,CACD;AAED,SACE,gBAAAjP,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAArG,EAACsB,IAAA,EAAU,OAAM,yBAAA,CAAyB;AAAA,KAGxC,MAAM;AACN,YAAMwQ,IAA8E;AAAA,QAClF;AAAA,UACE,KAAK;AAAA,UACL,MACE,gBAAA7R,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,UAAU,KACrE,UAAA;AAAA,YAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,qBAAiB;AAAA,YAClD,gBAAAuM,EAACqB,IAAA,EAAQ,MAAK,iJAAA,CAAiJ;AAAA,UAAA,GACjK;AAAA,UAEF,OACE,gBAAArB;AAAA,YAACgK;AAAA,YAAA;AAAA,cACC,OAAO,IAAIxK,GAAgBuQ,EAAU,CAAC;AAAA,cACtC,OAAO,EAAE,GAAG3Q,EAAK,IAAI3L,EAAE,OAAO,GAAG,GAAG,YAAY,UAAU,YAAY,GAAG,oBAAoB,eAAA;AAAA,YAAe;AAAA,UAAA;AAAA,QAC9G;AAAA,QAGJ;AAAA,UACE,KAAK;AAAA,UACL,wBAAO,KAAA,EAAE,OAAO2L,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,eAAA,CAAY;AAAA,UACnD,OACE,gBAAAuM;AAAA,YAACgK;AAAA,YAAA;AAAA,cACC,OAAO,GAAGiC,CAAY;AAAA,cACtB,OAAO,EAAE,GAAG7M,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,UAAU,YAAY,GAAG,oBAAoB,eAAA;AAAA,YAAe;AAAA,UAAA;AAAA,QAC3G;AAAA,QAGJ;AAAA,UACE,KAAK;AAAA,UACL,MACE,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,UAAU,KACrE,UAAA;AAAA,YAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,sBAAuB;AAAA,YACxD,gBAAAuM,EAACqB,IAAA,EAAQ,MAAK,yGAAA,CAAyG;AAAA,UAAA,GACzH;AAAA,UAEF,OACE,gBAAArB;AAAA,YAACgK;AAAA,YAAA;AAAA,cACC,OAAO,GAAGiC,CAAY;AAAA,cACtB,OAAO,EAAE,GAAG7M,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,UAAU,YAAY,GAAG,oBAAoB,eAAA;AAAA,YAAe;AAAA,UAAA;AAAA,QAC3G;AAAA,QAGJ;AAAA,UACE,KAAK;AAAA,UACL,wBAAO,KAAA,EAAE,OAAO2L,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,cAAA,CAAW;AAAA,UAClD,OACE,gBAAAuM,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,UAAU,YAAY,EAAA,GACnE,UAAA2b,GAAA,CACH;AAAA,QAAA;AAAA,QAGJ;AAAA,UACE,KAAK;AAAA,UACL,MACE,gBAAAnP,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,UAAU,KACrE,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAE,OAAOb,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA;AAAA,cAAA;AAAA,cAAmBwc;AAAA,cAAO;AAAA,YAAA,GAAE;AAAA,YAC7D,gBAAAjQ,EAACqB,IAAA,EAAQ,MAAM,KAAK4O,EAAM,oFAAA,CAAqF;AAAA,UAAA,GACjH;AAAA,UAEF,OACE,gBAAAjQ;AAAA,YAACgK;AAAA,YAAA;AAAA,cACC,OAAO,IAAIxK,GAAgBwQ,EAAY,CAAC;AAAA,cACxC,OAAO,EAAE,GAAG5Q,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,UAAU,YAAY,GAAG,oBAAoB,eAAA;AAAA,YAAe;AAAA,UAAA;AAAA,QAC3G;AAAA,MAWE;AAGR,aACE,gBAAAuM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,KAC1D,UAAA8R,EAAK,IAAI,CAACC,IAAK3gB,OAAM;AACpB,cAAM4gB,IAAU5gB,OAAM,GAChB6gB,IAAS7gB,OAAM0gB,EAAK,SAAS,GAC7BI,KAASF,KAAWC,IACtB,IACAD,IACE,gBACAC,IACE,gBACA;AACR,eACE,gBAAAhS;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,cACL,YAAYxM,EAAE;AAAA,cACd,WAAW,aAAaA,EAAE,MAAM;AAAA,cAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,cACxC,cAAcye;AAAA,cACd,SAAS;AAAA,cACT,SAAS;AAAA,cAAQ,YAAY;AAAA,cAAU,gBAAgB;AAAA,cACvD,KAAK;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAAH,GAAI;AAAA,cACJA,GAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAZAA,GAAI;AAAA,QAAA;AAAA,MAef,CAAC,EAAA,CACH;AAAA,IAEJ,GAAA;AAAA,IAGA,gBAAA9R;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,MAAM0O,EAAgB,CAACD,CAAY;AAAA,QAC5C,OAAO;AAAA,UACL,SAAS;AAAA,UAAQ,YAAY;AAAA,UAAU,gBAAgB;AAAA,UACvD,QAAQ;AAAA,UAAW,SAAS;AAAA,UAAS,YAAY;AAAA,QAAA;AAAA,QAGnD,UAAA;AAAA,UAAA,gBAAA1O,EAAC,UAAK,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,YAAQ;AAAA,UAC5C,gBAAAuM,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,KAAI,SAAQ,YAAW,MAAK,QAAO,OAAO;AAAA,YAC/D,WAAW0O,IAAe,mBAAmB;AAAA,YAAQ,YAAY;AAAA,UAAA,GAEjE,UAAA,gBAAA1O,EAAC,QAAA,EAAK,GAAE,gBAAe,QAAQvM,EAAE,WAAW,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAO,EAAA,CAC5G;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIF,gBAAAuM,EAAC,SAAI,OAAO;AAAA,MACV,SAAS;AAAA,MACT,kBAAkB0O,IAAe,QAAQ;AAAA,MACzC,YAAY;AAAA,IAAA,GAEZ,UAAA,gBAAA1O,EAAC,OAAA,EAAI,OAAO;AAAA,MACV,UAAU;AAAA,MACV,SAAS0O,IAAe,IAAI;AAAA,MAC5B,YAAY;AAAA,IAAA,GAEZ,UAAA,gBAAA1O,EAAC,OAAA,EAAI,OAAO;AAAA,MACV,YAAYvM,EAAE;AAAA,MAAQ,cAAc;AAAA,MAAG,SAAS;AAAA,MAChD,WAAW,aAAaA,EAAE,SAAS;AAAA,MACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,MACrC,SAAS;AAAA,MAAQ,eAAe;AAAA,MAAU,KAAK;AAAA,IAAA,GAE/C,UAAA,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,gBAAgB,mBAC7C,UAAA;AAAA,QAAA,gBAAAA,EAAC,QAAA,EAAK,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACzD,UAAA;AAAA,UAAA,gBAAAD,EAAC,UAAK,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,0BAAsB;AAAA,4BACzD4N,IAAA,EAAQ,IAAI5N,EAAE,WAAW,MAAK,qMAAA,CAAqM;AAAA,QAAA,GACtO;AAAA,QACCoc,KAAuB,KACtB,gBAAA5P,EAAC,QAAA,EAAK,OAAOb,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA;AAAA,UAAA;AAAA,WAAiBoc,KAAuB,KAAK,QAAQ,CAAC;AAAA,UAAE;AAAA,QAAA,EAAA,CAAC;AAAA,MAAA,GAEjG;AAAA,MACA,gBAAA5P,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,YAAY,KAAK,EAAA,GAC1D,UAAA;AAAA,QAAA,gBAAAD,EAAC,QAAA,EAAK,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,cAAA,GAChD,UAAA0c,GAAS,QAAQ,CAAC,GACrB;AAAA,QACA,gBAAAnQ,EAAC,UAAK,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,iBAAA,CAAc;AAAA,MAAA,GACpD;AAAA,MACA,gBAAAuM,EAACuN,IAAA,EAAe,OAAO4C,IAAU,UAAU,CAAClK,MAAM4I,EAAe,KAAK,MAAM5I,IAAI,GAAG,CAAC,EAAA,CAAG;AAAA,IAAA,GACzF,EAAA,CACF,GACF,GACF;AAAA,IAGC,CAAC2J,MAAgBF,IAAW,KAC3B,gBAAAzP,EAAC,SAAI,OAAO;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MAAG,SAAS;AAAA,MAC1B,SAAS;AAAA,MAAQ,eAAe;AAAA,MAAU,KAAK;AAAA,IAAA,GAE/C,UAAA;AAAA,MAAA,gBAAAD,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,IAAA,GAAO,UAAA,yBAAA,CAAsB;AAAA,wBAC5E,KAAA,EAAE,OAAO2L,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA;AAAA,QAAA;AAAA,UACzBmZ,KAAA+C,KAAA,gBAAAA,EAAgB,uBAAhB,gBAAA/C,GAAoC,QAAQ,OAAM;AAAA,QAAI;AAAA,MAAA,EAAA,CAE9D;AAAA,IAAA,GACF;AAAA,IAIDwB,MAAa,WAAWE,KACvB,gBAAAtO,EAAC,SAAI,OAAO;AAAA,MACV,GAAGZ,EAAK,IAAI3L,EAAE,GAAG;AAAA,MACjB,YAAY,GAAGA,EAAE,GAAG;AAAA,MACpB,cAAc;AAAA,MAAG,SAAS;AAAA,IAAA,GAEzB,UAAA6a,GACH;AAAA,sBAGD3N,IAAA,EAAO;AAAA,IACR,gBAAAX;AAAA,MAAC6C;AAAA,MAAA;AAAA,QACC,OACEuN,KACI/B,MAAW,YAAY,uBACvB,kBACF,sBAAsB7O,GAAgBuQ,IAAY,CAAC,CAAC;AAAA,QAExD,SAASa;AAAA,QACT,UAAU,CAACN;AAAA,QACX,QAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACR,GACF;AAEJ;ACllBA,MAAMjN,KAAmB;AAiBzB,SAAS8O,GAAY,EAAE,UAAAzQ,GAAU,UAAA0Q,GAAU,aAAAC,KAIxC;AACD,SACE,gBAAApS,EAAC,SAAI,OAAO;AAAA,IACV,SAAS;AAAA,IAAQ,YAAY;AAAA,IAAU,KAAK;AAAA,IAC5C,SAAS;AAAA,IACT,YAAYxM,EAAE;AAAA,IACd,WAAW,aAAaA,EAAE,SAAS;AAAA,IACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,EAAA,GAErC,UAAA;AAAA,IAAA,gBAAAuM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK0B,EAAS;AAAA,QACd,KAAK,GAAGA,EAAS,aAAa;AAAA,QAC9B,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,YAAY,GAAG,WAAW,QAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,IAErF,gBAAAzB,EAAC,SAAI,OAAO,EAAE,MAAM,GAAG,UAAU,KAC/B,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAE,OAAOb,EAAK,IAAI3L,EAAE,OAAO,GAAI,UAAA;AAAA,QAAA+L,GAAgBkC,EAAS,QAAQ;AAAA,QAAE;AAAA,MAAA,GAAG;AAAA,wBACrE,KAAA,EAAE,OAAOtC,EAAK,IAAI3L,EAAE,SAAS,GAAI,UAAA;AAAA,QAAAiO,EAAS;AAAA,QAAc;AAAA,QAAIA,EAAS;AAAA,MAAA,EAAA,CAAc;AAAA,IAAA,GACtF;AAAA,IACA,gBAAAzB,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,YAAY,EAAA,GACvE,UAAA;AAAA,MAAA,gBAAAD,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAIsC,EAAS,YAAYjO,EAAE,QAAQA,EAAE,SAAS,GAAG,YAAY,YAC9E,UAAAiO,EAAS,YAAY,aAAa,GAAGA,EAAS,QAAQ,SAAA,CACzD;AAAA,MACA,gBAAA1B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS0B,EAAS,aAAa,CAAC2Q,IAAc,MAAMD,EAAS1Q,CAAQ,IAAI;AAAA,UACzE,UAAU,CAACA,EAAS,aAAa2Q;AAAA,UACjC,OAAO;AAAA,YACL,QAAQ;AAAA,YAAI,OAAO;AAAA,YAAI,cAAc;AAAA,YAAG,QAAQ;AAAA,YAChD,SAAS;AAAA,YACT,WAAW;AAAA,YACX,QAAS3Q,EAAS,YAA4B2Q,IAAc,SAAS,YAAvC;AAAA,YAC9B,YAAY5e,EAAE;AAAA,YACd,GAAG2L,EAAK,IAAI,qBAAqB;AAAA,YACjC,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,SAAUsC,EAAS,YAAkB2Q,IAAc,MAAM,IAA1B;AAAA,YAC/B,YAAY;AAAA,UAAA;AAAA,UAGb,cAAc,QAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IACzB,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEA,SAAwBC,KAAa;AACnC,QAAM,EAAE,YAAAlH,EAAA,IAAeC,GAAA,GACjBvE,IAASnC,GAAA,GACTX,IAAiBC,GAAgB,CAAC1Q,MAAMA,EAAE,cAAc,GACxDwQ,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3C+Q,IAAQC,GAAe,CAAChR,MAAMA,EAAE,KAAK,GACrCiR,IAAaC,GAAkB,CAAClR,MAAMA,EAAE,UAAU,GAElDgf,IAAgB1T,EAAe,CAACtL,MAAMA,EAAE,aAAa,GACrDif,IAAmB3T,EAAe,CAACtL,MAAMA,EAAE,gBAAgB,GAC3Dkf,IAAc5T,EAAe,CAACtL,MAAMA,EAAE,WAAW,GACjDmf,IAAiB7T,EAAe,CAACtL,MAAMA,EAAE,cAAc,GACvDof,IAAqB9T,EAAe,CAACtL,MAAMA,EAAE,kBAAkB,GAC/Dqf,IAAuB/T,EAAe,CAACtL,MAAMA,EAAE,oBAAoB,GACnE0b,IAAoBhL,GAAgB,CAAC1Q,MAAMA,EAAE,iBAAiB,GAC9D2b,IAAuBjL,GAAgB,CAAC1Q,MAAMA,EAAE,oBAAoB,GACpE4b,IAAqB9K,GAAe,CAAC9Q,MAAMA,EAAE,kBAAkB,GAE/Dsf,IAAwB5N,GAAQ,MAAM;;AAC1C,UAAMC,wBAAmB,IAAA;AACzB,eAAWC,KAAQ,OAAO,OAAOb,CAAK;AACpC,MAAAY,EAAa,IAAIC,EAAK,SAASA,CAAI;AAErC,UAAMC,IAAM,KAAK,IAAA,IAAQ,KACnBkM,IAAqB,CAAA;AAC3B,eAAW,CAACjT,GAAMJ,CAAM,KAAK,OAAO,QAAQ+F,CAAc,GAAG;AAC3D,UAAI/F,KAAU,EAAG;AACjB,YAAMkH,IAAOD,EAAa,IAAI7G,CAAI;AAClC,UAAI,CAAC8G,EAAM;AACX,YAAM2N,IAAQ3N,EAAK,aACb4N,IAAY3N,KAAO0N,GACnBE,IAAWD,IAAY,IAAI,KAAK,MAAMD,IAAQ,MAAO,KAAK,IAAA,MAAU,MAAO,KAAK,KAAK,GAAG,GACxFG,IAAYzO,EAAWW,EAAK,sBAAsB,GAClD+N,MAAgBpO,IAAAoG,GAAW/F,EAAK,eAAe,MAA/B,gBAAAL,EAAkC,mBAAkBK,EAAK;AAC/E,MAAAmM,EAAO,KAAK;AAAA,QACV,QAAQjT;AAAA,QACR,aAAa8G,EAAK;AAAA,QAClB,gBAAgBA,EAAK;AAAA,QACrB,MAAAA;AAAA,QACA,UAAUlH,IAASoF;AAAA,QACnB,kBAAkBpF;AAAA,QAClB,mBAAmB6U;AAAA,QACnB,eAAAI;AAAA,QACA,WAAAH;AAAA,QACA,UAAAC;AAAA,QACA,gBAAeC,KAAA,gBAAAA,EAAW,SAAQ9N,EAAK;AAAA,QACvC,kBAAiB8N,KAAA,gBAAAA,EAAW,iBAAgB;AAAA,MAAA,CAC7C;AAAA,IACH;AACA,WAAA3B,EAAO,KAAK,CAACpb,GAAGjB,MAAMiB,EAAE,oBAAoBjB,EAAE,iBAAiB,GACxDqc;AAAA,EACT,GAAG,CAACtN,GAAgBM,GAAOE,CAAU,CAAC,GAEhC2O,IAAetC,GAAY,OAAO,MAAgB;AACtD,IAAA6B,EAAe,IAAI,GACnBF,EAAiB,EAAE,MAAM;AACzB,QAAI;AACF,YAAM,EAAE,WAAA9T,MAAc,MAAM0U,GAAc;AAAA,QACxC,YAAAhI;AAAA,QACA,QAAAtE;AAAA,QACA,YAAY,EAAE,KAAK;AAAA,QACnB,oBAAoB,EAAE,KAAK;AAAA,QAC3B,gBAAgB,EAAE,KAAK;AAAA,QACvB,kBAAkB,EAAE;AAAA,QACpB,kBAAkB;AAAA,MAAA,CACnB;AACD,MAAA6L,EAAmB,EAAE,mBAAmBtP,EAAgB,GACxDuP,EAAqBlU,CAAS,GAC9BqF,EAAS,iBAAiB;AAAA,IAC5B,SAASyN,GAAK;AACZ,MAAAkB,EAAelB,aAAe,QAAQA,EAAI,UAAU,eAAe;AAAA,IACrE,UAAA;AACE,MAAAgB,EAAiB,IAAI;AACrB,YAAMf,IAAQ3K,EAAO;AACrB,MAAAsE,EAAW,WAAWqG,GAAO,WAAW,EACrC,KAAKtC,CAAkB,EACvB,MAAM,MAAM;AAAA,MAAC,CAAC,GACjBuC,GAActG,GAAYqG,CAAK,EAC5B,KAAK,CAACE,MAAS;AACd,QAAA1C,EAAkB0C,CAAI,GACtBC,GAA0BH,EAAM,SAAA,GAAYE,CAAI;AAAA,MAClD,CAAC,EACA,MAAM,MAAM;AAAA,MAAC,CAAC,GACjBE,GAAuBzG,GAAYqG,CAAK,EACrC,KAAKvC,CAAoB,EACzB,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACnB;AAAA,EACF,GAAG,CAAC9D,GAAYtE,GAAQ4L,GAAgBF,GAAkBG,GAAoBC,GAAsB7O,GAAUoL,GAAoBF,GAAmBC,CAAoB,CAAC;AAE1K,2BACG1O,IAAA,EAAK,SAAS,GAAG,OAAO,EAAE,WAAW,OAAA,GACpC,4BAAC,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,YACpD,UAAA;AAAA,IAAAiS,KACC,gBAAAzS,EAAC,SAAI,OAAO;AAAA,MACV,SAAS;AAAA,MACT,YAAY,GAAGvM,EAAE,GAAG;AAAA,MACpB,GAAG2L,EAAK,IAAI3L,EAAE,GAAG;AAAA,IAAA,GAEhB,UAAAgf,GACH;AAAA,IAGDI,EAAU,SAAS,IAClB,gBAAA7S,EAAC,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,WAAW,QAAQ,WAAW,KAClD,UAAA6S,EAAU,IAAI,CAAA,MACb,gBAAA7S;AAAA,MAACmS;AAAA,MAAA;AAAA,QAEC,UAAU;AAAA,QACV,UAAUgB;AAAA,QACV,aAAaZ,MAAkB,EAAE;AAAA,MAAA;AAAA,MAH5B,EAAE;AAAA,IAAA,CAKV,EAAA,CACH,IAEA,gBAAAtS,EAAC,SAAI,OAAO;AAAA,MACV,MAAM;AAAA,MAAG,SAAS;AAAA,MAAQ,eAAe;AAAA,MACzC,YAAY;AAAA,MAAU,gBAAgB;AAAA,MACtC,KAAK;AAAA,MAAG,SAAS;AAAA,MAAI,WAAW;AAAA,IAAA,GAEhC,UAAA;AAAA,MAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,UAAA,uBAAmB;AAAA,MAClD,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,4CAAA,CAAyC;AAAA,IAAA,EAAA,CAC5E;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;AChNA,SAAwB4f,KAAe;AACrC,QAAMC,IAAQzU,EAAe,CAACtL,MAAMA,EAAE,KAAK,GACrCggB,IAAc1U,EAAe,CAACtL,MAAMA,EAAE,WAAW,GACjD+U,IAAgBzJ,EAAe,CAACtL,MAAMA,EAAE,aAAa,GACrD+X,IAAqBzM,EAAe,CAACtL,MAAMA,EAAE,kBAAkB,GAC/DigB,IAAgB3U,EAAe,CAACtL,MAAMA,EAAE,aAAa,GAErD0Y,IAAe,WAAW3D,CAAa,KAAK,GAC5CyH,IAAayD,KAAiB,GAG9BnH,IAAWf,IAAqBJ,GAAWI,CAAkB,IAAI,MACjE8D,KAAU/C,KAAA,gBAAAA,EAAU,mBAAkB,gBAEtCoH,IAAaF,IACf,yBAAyBA,CAAW,KACpC;AAEJ,SACE,gBAAAtT,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAArG,EAACgD,MAAc,OAAM,yBAAwB,SAAS,MAAMsQ,KAAS;AAAA,sBAEpE9S,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAR,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,uDAAmD;AAAA,OAGlF,MAAM;AACN,cAAMqe,IAA8E;AAAA,UAClF;AAAA,YACE,KAAK;AAAA,YACL,wBAAO,KAAA,EAAE,OAAO1S,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,uBAAA,CAAoB;AAAA,YAC3D,OACE,gBAAAuM;AAAA,cAACgK;AAAA,cAAA;AAAA,gBACC,OAAO,IAAIxK,GAAgBuQ,CAAU,CAAC;AAAA,gBACtC,OAAO,EAAE,GAAG3Q,EAAK,IAAI3L,EAAE,OAAO,GAAG,GAAG,YAAY,UAAU,YAAY,GAAG,oBAAoB,eAAA;AAAA,cAAe;AAAA,YAAA;AAAA,UAC9G;AAAA,UAGJ;AAAA,YACE,KAAK;AAAA,YACL,MACE,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,UAAU,KACrE,UAAA;AAAA,cAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,eAAW;AAAA,cAC5C,gBAAAuM,EAACqB,IAAA,EAAQ,MAAK,0KAAA,CAA0K;AAAA,YAAA,GAC1L;AAAA,YAEF,OACE,gBAAArB;AAAA,cAACgK;AAAA,cAAA;AAAA,gBACC,OAAO,IAAIiC,CAAY;AAAA,gBACvB,OAAO,EAAE,GAAG7M,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,UAAU,YAAY,GAAG,oBAAoB,eAAA;AAAA,cAAe;AAAA,YAAA;AAAA,UAC3G;AAAA,UAGJ;AAAA,YACE,KAAK;AAAA,YACL,wBAAO,KAAA,EAAE,OAAO2L,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,iBAAA,CAAc;AAAA,YACrD,OACE,gBAAAuM,EAAC,KAAA,EAAE,OAAO,EAAE,GAAGZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,YAAY,UAAU,YAAY,EAAA,GACnE,UAAA2b,EAAA,CACH;AAAA,UAAA;AAAA,UAGJ;AAAA,YACE,KAAK;AAAA,YACL,wBAAO,KAAA,EAAE,OAAOhQ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,cAAA,CAAW;AAAA,YAClD,OACE,gBAAAwM;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAMwT;AAAA,gBACN,QAAO;AAAA,gBACP,KAAI;AAAA,gBACJ,OAAO,EAAE,GAAGrU,EAAK,IAAI3L,EAAE,MAAM,GAAG,gBAAgB,QAAQ,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,YAAY,EAAA;AAAA,gBACpH,UAAA;AAAA,kBAAA;AAAA,kBAEC,gBAAAuM,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,+EAA8E,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO,EAAA,CAC5K;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAEJ;AAGF,eACE,gBAAAA,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,KAC1D,UAAA8R,EAAK,IAAI,CAACC,GAAK3gB,MAAM;AACpB,gBAAM4gB,IAAU5gB,MAAM,GAChB6gB,IAAS7gB,MAAM0gB,EAAK,SAAS,GAC7BI,IAASF,KAAWC,IACtB,IACAD,IACE,gBACAC,IACE,gBACA;AACR,iBACE,gBAAAhS;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,OAAO;AAAA,gBACL,YAAYxM,EAAE;AAAA,gBACd,WAAW,aAAaA,EAAE,MAAM;AAAA,gBAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,gBACxC,cAAcye;AAAA,gBACd,SAAS;AAAA,gBACT,SAAS;AAAA,gBAAQ,YAAY;AAAA,gBAAU,gBAAgB;AAAA,gBACvD,KAAK;AAAA,cAAA;AAAA,cAGN,UAAA;AAAA,gBAAAH,EAAI;AAAA,gBACJA,EAAI;AAAA,cAAA;AAAA,YAAA;AAAA,YAZAA,EAAI;AAAA,UAAA;AAAA,QAef,CAAC,EAAA,CACH;AAAA,MAEJ,GAAA;AAAA,MAGA,gBAAA9R,EAAC,SAAI,OAAO;AAAA,QACV,YAAYxM,EAAE;AAAA,QACd,WAAW,aAAaA,EAAE,SAAS;AAAA,QACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,QACrC,cAAc;AAAA,QAAG,SAAS;AAAA,QAC1B,SAAS;AAAA,QAAQ,YAAY;AAAA,QAAc,KAAK;AAAA,MAAA,GAEhD,UAAA;AAAA,QAAA,gBAAAwM,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,YAAY,GAAG,WAAW,KAC7F,UAAA;AAAA,UAAA,gBAAAD,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,QAAQvM,EAAE,WAAW,aAAY,MAAA,CAAK;AAAA,UACpE,gBAAAuM,EAAC,QAAA,EAAK,GAAE,qBAAoB,QAAQvM,EAAE,WAAW,aAAY,OAAM,eAAc,QAAA,CAAO;AAAA,QAAA,GAC1F;AAAA,0BACC,KAAA,EAAE,OAAO2L,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA;AAAA,UAAA;AAAA,UAC+B,gBAAAuM,EAAC,UAAK,OAAO,EAAE,OAAOvM,EAAE,QAAA,GAAW,UAAA,iBAAa;AAAA,UAAO;AAAA,QAAA,EAAA,CACvH;AAAA,MAAA,GACF;AAAA,wBAECkN,IAAA,EAAO;AAAA,MAGR,gBAAAV,EAAC,SAAI,OAAO;AAAA,QACV,YAAYxM,EAAE;AAAA,QACd,WAAW,aAAaA,EAAE,SAAS;AAAA,QACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,QACrC,cAAc;AAAA,QAAG,SAAS;AAAA,QAC1B,SAAS;AAAA,QAAQ,YAAY;AAAA,QAAU,KAAK;AAAA,MAAA,GAE5C,UAAA;AAAA,QAAA,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GACpE,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,UAAA,wBAAoB;AAAA,UACnD,gBAAAwM;AAAA,YAAC;AAAA,YAAA;AAAA,cAAE,MAAK;AAAA,cAAoC,QAAO;AAAA,cAAS,KAAI;AAAA,cAC9D,OAAO,EAAE,GAAGb,EAAK,IAAI3L,EAAE,SAAS,GAAG,gBAAgB,QAAQ,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA;AAAA,cAAK,UAAA;AAAA,gBAAA;AAAA,gBAE5G,gBAAAuM,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,+EAA8E,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO,EAAA,CAC5K;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,QACA,gBAAAC,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,GAAG,YAAY,GAAG,WAAW,SAAA,GAC/D,UAAA;AAAA,UAAA,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cAAE,MAAK;AAAA,cAAqB,QAAO;AAAA,cAAS,KAAI;AAAA,cAC/C,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,YAAYvM,EAAE,WAAW,WAAW,aAAaA,EAAE,SAAS,IAAI,WAAW,kBAAkBA,EAAE,MAAM,IAAI,gBAAgB,OAAA;AAAA,cAC3O,UAAA,gBAAAuM,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAMvM,EAAE,WACtD,UAAA,gBAAAuM,EAAC,QAAA,EAAK,GAAE,0nBAAwnB,EAAA,CACloB;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cAAE,MAAK;AAAA,cAA2B,QAAO;AAAA,cAAS,KAAI;AAAA,cACrD,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,YAAYvM,EAAE,WAAW,WAAW,aAAaA,EAAE,SAAS,IAAI,WAAW,kBAAkBA,EAAE,MAAM,IAAI,gBAAgB,OAAA;AAAA,cAC3O,UAAA,gBAAAuM,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAMvM,EAAE,WACtD,UAAA,gBAAAuM,EAAC,QAAA,EAAK,GAAE,6KAA2K,EAAA,CACrL;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,GACF;AAAA,wBAEC6C,IAAA,EAAI,OAAM,qBAAoB,SAAS,MAAMyQ,IAAM,CAAG;AAAA,IAAA,EAAA,CACzD;AAAA,EAAA,GACF;AAEJ;AC7KA,SAAwBI,KAAiB;AACvC,QAAMJ,IAAQzU,EAAe,CAACtL,MAAMA,EAAE,KAAK,GACrCogB,IAAkB9U,EAAe,CAACtL,MAAMA,EAAE,eAAe,GACzDqgB,IAAoB/U,EAAe,CAACtL,MAAMA,EAAE,iBAAiB,GAE7D0K,IAAS0V,KAAmB,MAE5BF,IAAaG,IACf,yBAAyBA,CAAiB,KAC1C;AAEJ,SACE,gBAAA3T,EAAAoG,IAAA,EACE,UAAA;AAAA,IAAA,gBAAArG,EAACgD,MAAc,OAAM,oBAAmB,SAAS,MAAMsQ,KAAS;AAAA,sBAE/D9S,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAR,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,qDAAiD;AAAA,MAGlF,gBAAAwM,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,YAC5C,UAAA;AAAA,QAAA,gBAAAA,EAAC,SAAI,OAAO;AAAA,UACV,YAAYxM,EAAE;AAAA,UACd,WAAW,aAAaA,EAAE,MAAM;AAAA,UAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,UACxC,cAAc;AAAA,UACd,SAAS;AAAA,UACT,SAAS;AAAA,UAAQ,eAAe;AAAA,UAAU,KAAK;AAAA,QAAA,GAE/C,UAAA;AAAA,UAAA,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,uBAAmB;AAAA,UACpD,gBAAAuM;AAAA,YAACgK;AAAA,YAAA;AAAA,cACC,OAAO,GAAGxK,GAAgBvB,CAAM,CAAC;AAAA,cACjC,OAAO,EAAE,GAAGsB,GAAY,IAAI9L,EAAE,KAAK,GAAG,YAAY,IAAA;AAAA,YAAI;AAAA,UAAA;AAAA,QACxD,GACF;AAAA,QAEA,gBAAAwM,EAAC,SAAI,OAAO;AAAA,UACV,YAAYxM,EAAE;AAAA,UACd,WAAW,aAAaA,EAAE,MAAM;AAAA,UAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,UACxC,cAAc;AAAA,UACd,SAAS;AAAA,UACT,SAAS;AAAA,UAAQ,gBAAgB;AAAA,UAAiB,YAAY;AAAA,QAAA,GAE9D,UAAA;AAAA,UAAA,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,+BAA2B;AAAA,UAC5D,gBAAAwM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAMwT;AAAA,cACN,QAAO;AAAA,cACP,KAAI;AAAA,cACJ,OAAO,EAAE,GAAGrU,EAAK,IAAI3L,EAAE,MAAM,GAAG,gBAAgB,QAAQ,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA;AAAA,cACrG,UAAA;AAAA,gBAAA;AAAA,gBAEC,gBAAAuM,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,UAAK,GAAE,+EAA8E,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO,EAAA,CAC5K;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAGA,gBAAAC,EAAC,SAAI,OAAO;AAAA,QACV,YAAYxM,EAAE;AAAA,QACd,WAAW,aAAaA,EAAE,SAAS;AAAA,QACnC,WAAW,kBAAkBA,EAAE,MAAM;AAAA,QACrC,cAAc;AAAA,QAAG,SAAS;AAAA,QAC1B,SAAS;AAAA,QAAQ,eAAe;AAAA,QAAU,KAAK;AAAA,MAAA,GAE/C,UAAA;AAAA,QAAA,gBAAAuM,EAAC,KAAA,EAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAC1B,UAAA,gBAAAuM,EAAC,UAAA,EAAO,OAAO,EAAE,YAAY,IAAA,GAAO,6BAAe,GACrD;AAAA,QACA,gBAAAA,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,qCAEjC;AAAA,QAGA,gBAAAwM,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,MAClC,UAAA;AAAA,UAAA,gBAAAD,EAAC,SAAI,OAAO;AAAA,YACV,OAAO;AAAA,YAAI,QAAQ;AAAA,YAAI,cAAc;AAAA,YAAO,YAAY;AAAA,YACxD,YAAYvM,EAAE;AAAA,YACd,WAAW,aAAaA,EAAE,MAAM;AAAA,YAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,YACxC,SAAS;AAAA,YAAQ,YAAY;AAAA,YAAU,gBAAgB;AAAA,YACvD,GAAG2L,EAAK,IAAI3L,EAAE,SAAS;AAAA,UAAA,GACtB,UAAA,KAEH;AAAA,UACA,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,YAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,UAAA,gCAA4B;AAAA,YAC3D,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,2DAAA,CAEjC;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAwM,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,MAClC,UAAA;AAAA,UAAA,gBAAAD,EAAC,SAAI,OAAO;AAAA,YACV,OAAO;AAAA,YAAI,QAAQ;AAAA,YAAI,cAAc;AAAA,YAAO,YAAY;AAAA,YACxD,YAAYvM,EAAE;AAAA,YACd,WAAW,aAAaA,EAAE,MAAM;AAAA,YAChC,WAAW,kBAAkBA,EAAE,SAAS;AAAA,YACxC,SAAS;AAAA,YAAQ,YAAY;AAAA,YAAU,gBAAgB;AAAA,YACvD,GAAG2L,EAAK,IAAI3L,EAAE,SAAS;AAAA,UAAA,GACtB,UAAA,KAEH;AAAA,UACA,gBAAAwM,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC3D,UAAA;AAAA,YAAA,gBAAAD,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,OAAO,GAAG,UAAA,0BAAsB;AAAA,YACrD,gBAAAuM,EAAC,OAAE,OAAOZ,EAAK,IAAI3L,EAAE,SAAS,GAAG,UAAA,gDAAA,CAEjC;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,wBAECkN,IAAA,EAAO;AAAA,wBAEPkC,IAAA,EAAI,OAAM,QAAO,SAAS,MAAMyQ,IAAM,CAAG;AAAA,IAAA,EAAA,CAC5C;AAAA,EAAA,GACF;AAEJ;AC9GA,MAAMO,KAA8E;AAAA,EAClF,mBAAmB,EAAE,MAAM,GAAG,OAAO,EAAA;AAAA,EACrC,iBAAiB,EAAE,MAAM,GAAG,OAAO,EAAA;AAAA,EACnC,mBAAmB,EAAE,MAAM,GAAG,OAAO,EAAA;AAAA,EACrC,gBAAgB,EAAE,MAAM,GAAG,OAAO,EAAA;AACpC,GAEMC,KACJ;AAEF,SAASC,GAAgB,EAAE,QAAAtW,GAAQ,UAAA8C,KAAiE;AAClG,2BACGD,IAAA,EACC,UAAA;AAAA,IAAA,gBAAAN,EAACQ,IAAA,EAAK,OAAO,EAAE,cAAc,iBAAiB,WAAW,OAAA,GACvD,UAAA,gBAAAR,EAAC,OAAA,EAAiB,WAAU,eAAe,UAAAO,EAAA,GAAjC9C,CAA0C,GACtD;AAAA,sBACCyF,IAAA,CAAA,CAAO;AAAA,EAAA,GACV;AAEJ;AAEA,SAAwB8Q,KAAc;AACpC,QAAMvW,IAASoB,EAAe,CAACtL,MAAMA,EAAE,MAAM,GACvC0gB,IAASpV,EAAe,CAACtL,MAAMA,EAAE,MAAM,GACvC+f,IAAQzU,EAAe,CAACtL,MAAMA,EAAE,KAAK,GACrCwQ,IAAWlF,EAAe,CAACtL,MAAMA,EAAE,QAAQ,GAC3C6Q,IAAkBC,GAAe,CAAC9Q,MAAMA,EAAE,SAAS,GACnDyT,IAAe3C,GAAe,CAAC9Q,MAAMA,EAAE,MAAM,GAC7C2gB,IAAgBrS,GAAsB,IAAI;AA0BhD,MAxBA8D,GAAU,MAAM;AACd,UAAMwO,IAAYnN,MAAiB,aAC7BoN,IAAU3W,MAAW,yBAAyBA,MAAW;AAE/D,IAAI0W,KAAaC,IACfrQ,EAAS,SAAS,IACT,CAACoQ,KAAa,CAACC,KACxBd,EAAA;AAAA,EAEJ,GAAG,CAACtM,GAAcvJ,GAAQsG,GAAUuP,CAAK,CAAC,GAG1C3N,GAAU,MAAM;AACd,QAAI,CAACvB,GAAiB;AACpB,MAAA8P,EAAc,UAAU;AACxB;AAAA,IACF;AACA,IAAIA,EAAc,WAAWA,EAAc,YAAY9P,MACrDkP,EAAA,GACAvP,EAAS,SAAS,IAEpBmQ,EAAc,UAAU9P;AAAA,EAC1B,GAAG,CAACA,GAAiBkP,GAAOvP,CAAQ,CAAC,GAEjCtG,MAAW;AACb,6BAAQ6C,IAAA,EAAO,UAAA;AAAA,MAAA,gBAAAN,EAACqT,IAAA,EAAa;AAAA,wBAAGnQ,IAAA,CAAA,CAAO;AAAA,IAAA,GAAE;AAG3C,MAAIzF,MAAW;AACb,6BAAQ6C,IAAA,EAAO,UAAA;AAAA,MAAA,gBAAAN,EAAC0T,IAAA,EAAe;AAAA,wBAAGxQ,IAAA,CAAA,CAAO;AAAA,IAAA,GAAE;AAG7C,MAAIzF,MAAW;AACb,6BAAQ6C,IAAA,EAAO,UAAA;AAAA,MAAA,gBAAAN,EAAC8D,IAAA,EAAc;AAAA,wBAAGZ,IAAA,CAAA,CAAO;AAAA,IAAA,GAAE;AAG5C,MAAIzF,MAAW;AACb,WAAO,gBAAAuC,EAAC+T,IAAA,EAAgB,QAAAtW,GAAgB,UAAA,gBAAAuC,EAAC4H,MAAkB,GAAE;AAG/D,MAAInK,MAAW;AACb,WAAO,gBAAAuC,EAAC+T,IAAA,EAAgB,QAAAtW,GAAgB,UAAA,gBAAAuC,EAAC4G,MAAc,GAAE;AAG3D,MAAInJ,MAAW;AACb,6BACG6C,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAN,EAACY,IAAA,EAAW,UAAQ,IAAC,OAAM,kBAAiB,aAAakT,IAAgB,QAAQG,EAAA,CAAQ;AAAA,wBACxF3B,IAAA,EAAW;AAAA,wBACXpP,IAAA,CAAA,CAAO;AAAA,IAAA,GACV;AAIJ,QAAMmR,IAASR,GAAYpW,CAAM;AAEjC,2BACG6C,IAAA,EACC,UAAA;AAAA,IAAA,gBAAAN;AAAA,MAACY;AAAA,MAAA;AAAA,QACC,MAAMyT,KAAA,gBAAAA,EAAQ;AAAA,QACd,OAAOA,KAAA,gBAAAA,EAAQ;AAAA,QACf,UAAU,EAACA,KAAA,QAAAA,EAAQ;AAAA,QACnB,QAAQJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEV,gBAAAjU,EAACQ,IAAA,EACC,UAAA,gBAAAP,EAAC,OAAA,EAAiB,WAAU,eACzB,UAAA;AAAA,MAAAxC,MAAW,uCAAsBqK,IAAA,CAAA,CAAe;AAAA,MAChDrK,MAAW,mBAAmB,gBAAAuC,EAACqI,IAAA,CAAA,CAAa;AAAA,MAC5C5K,MAAW,qBAAqB,gBAAAuC,EAACmL,IAAA,CAAA,CAAe;AAAA,MAChD1N,MAAW,kBAAkB,gBAAAuC,EAACmO,IAAA,CAAA,CAAY;AAAA,IAAA,EAAA,GAJnC1Q,CAKV,GACF;AAAA,sBACCyF,IAAA,CAAA,CAAO;AAAA,EAAA,GACV;AAEJ;AC9GA,SAAwBoR,KAAsB;AAC5C,QAAMC,IAAYlQ,GAAe,CAAC9Q,MAAMA,EAAE,SAAS,GAC7CihB,IAAuB3V,EAAe,CAACtL,MAAMA,EAAE,oBAAoB,GACnEmK,IAAOmE,GAAsB,IAAI;AAEvC,SAAA8D,GAAU,MAAM;AACd,UAAM8O,IAAUF,IAAY,OAAOA,CAAS,IAAI;AAChD,IAAI7W,EAAK,YAAY,QAAQA,EAAK,YAAY+W,KAC5CD,EAAA,GAEF9W,EAAK,UAAU+W;AAAA,EACjB,GAAG,CAACF,GAAWC,CAAoB,CAAC,GAE7B;AACT;ACVA,MAAME,KAA4B;AAoBlC,SAAwBC,GAAU;AAAA,EAChC,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAApE;AAAA,EACA,OAAAqE,IAAQ;AAAA,EACR,SAAA9R;AACF,GAAmB;AACjB,QAAM+R,IAAgBnT,GAAO,EAAK;AAClC,EAAKmT,EAAc,YACjBC,GAAgB,EAAE,QAAAL,GAAQ,aAAAC,GAAa,iBAAAC,GAAiB,aAAApE,GAAa,GACrEsE,EAAc,UAAU;AAG1B,QAAMnO,IAAU5B;AAAA,IACd,MAAM;AAAA,MACJ,IAAIiQ,GAAA;AAAA,MACJ,IAAIC,GAAA;AAAA,MACJ,IAAIC,GAAA;AAAA,MACJ,IAAIC,GAAA;AAAA,MACJ,IAAIC,GAA2B;AAAA,QAC7B,SAASC,GAAqB;AAAA,QAC9B,SAAS;AAAA,UACP,WAAWb;AAAA,UACX,UAAU;AAAA,YACR,MAAM;AAAA,YACN,aAAa;AAAA,YACb,KAAK;AAAA,YACL,OAAO,CAAC,yBAAyB;AAAA,UAAA;AAAA,QACnC;AAAA,MACF,CACD;AAAA,IAAA;AAAA,IAEH,CAAA;AAAA,EAAC,GAGGc,IAAiB3T,GAA6C,MAAS;AAC7E,SAAK2T,EAAe,YAClBA,EAAe,UAAUnY,GAAA,IAIzB,gBAAA4C,EAAC,OAAA,EAAI,cAAY8U,GACf,UAAA;AAAA,IAAA,gBAAA/U,EAAC,WAAO,UAAAd,GAAA,CAAU;AAAA,IAClB,gBAAAc,EAACyV,IAAA,EAAmB,UAAUb,GAC5B,UAAA,gBAAA5U,EAAC0V,MAAe,SAAA7O,GAAkB,aAAW,IAC3C,UAAA,gBAAA5G,EAAC0V,IAAA,EACC,UAAA;AAAA,MAAA,gBAAA3V,EAAC4V,IAAA,EAAa;AAAA,wBACbC,IAAA,EAAc;AAAA,wBACdC,IAAA,EAAgB;AAAA,wBAChBC,IAAA,EAAa;AAAA,wBACbC,IAAA,EAAa;AAAA,wBACbC,IAAA,EAAU;AAAA,wBACVtX,GAAmB,UAAnB,EAA4B,OAAO6W,EAAe,SACjD,UAAA;AAAA,QAAA,gBAAAxV,EAACsU,IAAA,EAAoB;AAAA,0BACpBN,IAAA,CAAA,CAAY;AAAA,MAAA,EAAA,CACf;AAAA,IAAA,EAAA,CACF,GACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;","x_google_ignoreList":[0,1,2]}
|