coinley-checkout 0.4.5 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"coinley-checkout.es.js","sources":["../node_modules/ethers/lib.esm/_version.js","../node_modules/ethers/lib.esm/utils/properties.js","../node_modules/ethers/lib.esm/utils/errors.js","../node_modules/ethers/lib.esm/utils/data.js","../node_modules/ethers/lib.esm/utils/maths.js","../node_modules/ethers/lib.esm/utils/events.js","../node_modules/ethers/lib.esm/utils/utf8.js","../node_modules/ethers/lib.esm/utils/fixednumber.js","../node_modules/ethers/lib.esm/utils/units.js","../node_modules/ethers/lib.esm/abi/coders/abstract-coder.js","../node_modules/ethers/node_modules/@noble/hashes/esm/_assert.js","../node_modules/ethers/node_modules/@noble/hashes/esm/utils.js","../node_modules/ethers/node_modules/@noble/hashes/esm/_u64.js","../node_modules/ethers/node_modules/@noble/hashes/esm/sha3.js","../node_modules/ethers/lib.esm/crypto/keccak.js","../node_modules/ethers/lib.esm/address/address.js","../node_modules/ethers/lib.esm/address/checks.js","../node_modules/ethers/lib.esm/abi/typed.js","../node_modules/ethers/lib.esm/abi/coders/address.js","../node_modules/ethers/lib.esm/abi/coders/anonymous.js","../node_modules/ethers/lib.esm/abi/coders/array.js","../node_modules/ethers/lib.esm/abi/coders/boolean.js","../node_modules/ethers/lib.esm/abi/coders/bytes.js","../node_modules/ethers/lib.esm/abi/coders/fixed-bytes.js","../node_modules/ethers/lib.esm/abi/coders/null.js","../node_modules/ethers/lib.esm/abi/coders/number.js","../node_modules/ethers/lib.esm/abi/coders/string.js","../node_modules/ethers/lib.esm/abi/coders/tuple.js","../node_modules/ethers/lib.esm/transaction/accesslist.js","../node_modules/ethers/lib.esm/hash/id.js","../node_modules/ethers/lib.esm/abi/fragments.js","../node_modules/ethers/lib.esm/abi/abi-coder.js","../node_modules/ethers/lib.esm/abi/interface.js","../node_modules/ethers/lib.esm/providers/provider.js","../node_modules/ethers/lib.esm/contract/wrappers.js","../node_modules/ethers/lib.esm/contract/contract.js","../src/services/walletService.js","../src/services/api.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/context/ThemeContext.jsx","../src/context/CoinleyContext.jsx","../node_modules/qrcode.react/lib/esm/index.js","../src/components/QRCode.jsx","../src/components/PaymentStatus.jsx","../src/components/PaymentMethods.jsx","../src/assets/Logo.png","../src/components/CoinleyModal.jsx","../src/components/CoinleyCheckout.jsx","../src/index.js"],"sourcesContent":["/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n/**\n * The current version of Ethers.\n */\nexport const version = \"6.14.3\";\n//# sourceMappingURL=_version.js.map","/**\n * Property helper functions.\n *\n * @_subsection api/utils:Properties [about-properties]\n */\nfunction checkType(value, type, name) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n const error = new Error(`invalid value for type ${type}`);\n error.code = \"INVALID_ARGUMENT\";\n error.argument = `value.${name}`;\n error.value = value;\n throw error;\n}\n/**\n * Resolves to a new object that is a copy of %%value%%, but with all\n * values resolved.\n */\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\n/**\n * Assigns the %%values%% to %%target%% as read-only values.\n *\n * It %%types%% is specified, the values are checked.\n */\nexport function defineProperties(target, values, types) {\n for (let key in values) {\n let value = values[key];\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type, key);\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","/**\n * All errors in ethers include properties to ensure they are both\n * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n * The [[isError]] function can be used to check the error ``code`` and\n * provide a type guard for the properties present on that error interface.\n *\n * @_section: api/utils/errors:Errors [about-errors]\n */\nimport { version } from \"../_version.js\";\nimport { defineProperties } from \"./properties.js\";\nfunction stringify(value, seen) {\n if (value == null) {\n return \"null\";\n }\n if (seen == null) {\n seen = new Set();\n }\n if (typeof (value) === \"object\") {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n seen.add(value);\n }\n if (Array.isArray(value)) {\n return \"[ \" + (value.map((v) => stringify(v, seen))).join(\", \") + \" ]\";\n }\n if (value instanceof Uint8Array) {\n const HEX = \"0123456789abcdef\";\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n result += HEX[value[i] >> 4];\n result += HEX[value[i] & 0xf];\n }\n return result;\n }\n if (typeof (value) === \"object\" && typeof (value.toJSON) === \"function\") {\n return stringify(value.toJSON(), seen);\n }\n switch (typeof (value)) {\n case \"boolean\":\n case \"number\":\n case \"symbol\":\n return value.toString();\n case \"bigint\":\n return BigInt(value).toString();\n case \"string\":\n return JSON.stringify(value);\n case \"object\": {\n const keys = Object.keys(value);\n keys.sort();\n return \"{ \" + keys.map((k) => `${stringify(k, seen)}: ${stringify(value[k], seen)}`).join(\", \") + \" }\";\n }\n }\n return `[ COULD NOT SERIALIZE ]`;\n}\n/**\n * Returns true if the %%error%% matches an error thrown by ethers\n * that matches the error %%code%%.\n *\n * In TypeScript environments, this can be used to check that %%error%%\n * matches an EthersError type, which means the expected properties will\n * be set.\n *\n * @See [ErrorCodes](api:ErrorCode)\n * @example\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, \"CALL_EXCEPTION\")) {\n * // The Type Guard has validated this object\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\n/**\n * Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/**\n * Returns a new Error configured to the format ethers emits errors, with\n * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n * for the corresponding EthersError.\n *\n * Each error in ethers includes the version of ethers, a\n * machine-readable [[ErrorCode]], and depending on %%code%%, additional\n * required properties. The error message will also include the %%message%%,\n * ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError(message, code, info) {\n let shortMessage = message;\n {\n const details = [];\n if (info) {\n if (\"message\" in info || \"code\" in info || \"name\" in info) {\n throw new Error(`value will overwrite populated values: ${stringify(info)}`);\n }\n for (const key in info) {\n if (key === \"shortMessage\") {\n continue;\n }\n const value = (info[key]);\n // try {\n details.push(key + \"=\" + stringify(value));\n // } catch (error: any) {\n // console.log(\"MMM\", error.message);\n // details.push(key + \"=[could not serialize object]\");\n // }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n let error;\n switch (code) {\n case \"INVALID_ARGUMENT\":\n error = new TypeError(message);\n break;\n case \"NUMERIC_FAULT\":\n case \"BUFFER_OVERRUN\":\n error = new RangeError(message);\n break;\n default:\n error = new Error(message);\n }\n defineProperties(error, { code });\n if (info) {\n Object.assign(error, info);\n }\n if (error.shortMessage == null) {\n defineProperties(error, { shortMessage });\n }\n return error;\n}\n/**\n * Throws an EthersError with %%message%%, %%code%% and additional error\n * %%info%% when %%check%% is falsish..\n *\n * @see [[api:makeError]]\n */\nexport function assert(check, message, code, info) {\n if (!check) {\n throw makeError(message, code, info);\n }\n}\n/**\n * A simple helper to simply ensuring provided arguments match expected\n * constraints, throwing if not.\n *\n * In TypeScript environments, the %%check%% has been asserted true, so\n * any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check, message, name, value) {\n assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\nexport function assertArgumentCount(count, expectedCount, message) {\n if (message == null) {\n message = \"\";\n }\n if (message) {\n message = \": \" + message;\n }\n assert(count >= expectedCount, \"missing argument\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n}\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\n/**\n * Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form) {\n assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n}\n/**\n * Many classes use file-scoped values to guard the constructor,\n * making it effectively private. This facilitates that pattern\n * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n * throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard, guard, className) {\n if (className == null) {\n className = \"\";\n }\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n assert(false, `private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n}\n//# sourceMappingURL=errors.js.map","/**\n * Some data helpers.\n *\n *\n * @_subsection api/utils:Data Helpers [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\nfunction _getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n/**\n * Get a typed Uint8Array for %%value%%. If already a Uint8Array\n * the original %%value%% is returned; if a copy is required use\n * [[getBytesCopy]].\n *\n * @see: getBytesCopy\n */\nexport function getBytes(value, name) {\n return _getBytes(value, name, false);\n}\n/**\n * Get a typed Uint8Array for %%value%%, creating a copy if necessary\n * to prevent any modifications of the returned value from being\n * reflected elsewhere.\n *\n * @see: getBytes\n */\nexport function getBytesCopy(value, name) {\n return _getBytes(value, name, true);\n}\n/**\n * Returns true if %%value%% is a valid [[HexString]].\n *\n * If %%length%% is ``true`` or a //number//, it also checks that\n * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n * bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/**\n * Returns true if %%value%% is a valid representation of arbitrary\n * data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\nconst HexCharacters = \"0123456789abcdef\";\n/**\n * Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data) {\n const bytes = getBytes(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\n/**\n * Returns a [[DataHexString]] by concatenating all values\n * within %%data%%.\n */\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n/**\n * Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return getBytes(data).length;\n}\n/**\n * Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n * offset to the %%end%% offset.\n *\n * By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data, start, end) {\n const bytes = getBytes(data);\n if (end != null && end > bytes.length) {\n assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\n/**\n * Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.startsWith(\"00\")) {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\nfunction zeroPad(data, length, left) {\n const bytes = getBytes(data);\n assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **left**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **values** are in Solidity\n * (e.g. ``uint128``).\n */\nexport function zeroPadValue(data, length) {\n return zeroPad(data, length, true);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **right**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **bytes** are in Solidity\n * (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=data.js.map","/**\n * Some mathematic operations.\n *\n * @_subsection: api/utils:Math Helpers [about-maths]\n */\nimport { hexlify, isBytesLike } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1;\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n/**\n * Convert %%value%% from a twos-compliment representation of %%width%%\n * bits to its value.\n *\n * If the highest bit is ``1``, the result will be negative.\n */\nexport function fromTwos(_value, _width) {\n const value = getUint(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n assert((value >> width) === BN_0, \"overflow\", \"NUMERIC_FAULT\", {\n operation: \"fromTwos\", fault: \"overflow\", value: _value\n });\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n/**\n * Convert %%value%% to a twos-compliment representation of\n * %%width%% bits.\n *\n * The result will always be positive.\n */\nexport function toTwos(_value, _width) {\n let value = getBigInt(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n const limit = (BN_1 << (width - BN_1));\n if (value < BN_0) {\n value = -value;\n assert(value <= limit, \"too low\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n const mask = (BN_1 << width) - BN_1;\n return ((~value) & mask) + BN_1;\n }\n else {\n assert(value < limit, \"too high\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n }\n return value;\n}\n/**\n * Mask %%value%% with a bitmask of %%bits%% ones.\n */\nexport function mask(_value, _bits) {\n const value = getUint(_value, \"value\");\n const bits = BigInt(getNumber(_bits, \"bits\"));\n return value & ((BN_1 << bits) - BN_1);\n}\n/**\n * Gets a BigInt from %%value%%. If it is an invalid value for\n * a BigInt, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return BigInt(value);\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n if (value[0] === \"-\" && value[1] !== \"-\") {\n return -BigInt(value.substring(1));\n }\n return BigInt(value);\n }\n catch (e) {\n assertArgument(false, `invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid BigNumberish value\", name || \"value\", value);\n}\n/**\n * Returns %%value%% as a bigint, validating it is valid as a bigint\n * value and that it is positive.\n */\nexport function getUint(value, name) {\n const result = getBigInt(value, name);\n assert(result >= BN_0, \"unsigned value cannot be negative\", \"NUMERIC_FAULT\", {\n fault: \"overflow\", operation: \"getUint\", value\n });\n return result;\n}\nconst Nibbles = \"0123456789abcdef\";\n/*\n * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data.\n */\nexport function toBigInt(value) {\n if (value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of value) {\n result += Nibbles[v >> 4];\n result += Nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return getBigInt(value);\n}\n/**\n * Gets a //number// from %%value%%. If it is an invalid value for\n * a //number//, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return Number(value);\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return value;\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n return getNumber(BigInt(value), name);\n }\n catch (e) {\n assertArgument(false, `invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid numeric value\", name || \"value\", value);\n}\n/**\n * Converts %%value%% to a number. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data. Throws if the value is not safe.\n */\nexport function toNumber(value) {\n return getNumber(toBigInt(value));\n}\n/**\n * Converts %%value%% to a Big Endian hexstring, optionally padded to\n * %%width%% bytes.\n */\nexport function toBeHex(_value, _width) {\n const value = getUint(_value, \"value\");\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = getNumber(_width, \"width\");\n assert(width * 2 >= result.length, `value exceeds width (${width} bytes)`, \"NUMERIC_FAULT\", {\n operation: \"toBeHex\",\n fault: \"overflow\",\n value: _value\n });\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\n/**\n * Converts %%value%% to a Big Endian Uint8Array.\n */\nexport function toBeArray(_value) {\n const value = getUint(_value, \"value\");\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n/**\n * Returns a [[HexString]] for %%value%% safe to use as a //Quantity//.\n *\n * A //Quantity// does not have and leading 0 values unless the value is\n * the literal value `0x0`. This is most commonly used for JSSON-RPC\n * numeric values.\n */\nexport function toQuantity(value) {\n let result = hexlify(isBytesLike(value) ? value : toBeArray(value)).substring(2);\n while (result.startsWith(\"0\")) {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=maths.js.map","/**\n * Events allow for applications to use the observer pattern, which\n * allows subscribing and publishing events, outside the normal\n * execution paths.\n *\n * @_section api/utils/events:Events [about-events]\n */\nimport { defineProperties } from \"./properties.js\";\n/**\n * When an [[EventEmitterable]] triggers a [[Listener]], the\n * callback always ahas one additional argument passed, which is\n * an **EventPayload**.\n */\nexport class EventPayload {\n /**\n * The event filter.\n */\n filter;\n /**\n * The **EventEmitterable**.\n */\n emitter;\n #listener;\n /**\n * Create a new **EventPayload** for %%emitter%% with\n * the %%listener%% and for %%filter%%.\n */\n constructor(emitter, listener, filter) {\n this.#listener = listener;\n defineProperties(this, { emitter, filter });\n }\n /**\n * Unregister the triggered listener for future events.\n */\n async removeListener() {\n if (this.#listener == null) {\n return;\n }\n await this.emitter.off(this.filter, this.#listener);\n }\n}\n//# sourceMappingURL=events.js.map","/**\n * Using strings in Ethereum (or any security-basd system) requires\n * additional care. These utilities attempt to mitigate some of the\n * safety issues as well as provide the ability to recover and analyse\n * strings.\n *\n * @_subsection api/utils:Strings and UTF-8 [about-strings]\n */\nimport { getBytes } from \"./data.js\";\nimport { assertArgument, assertNormalize } from \"./errors.js\";\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n assertArgument(false, `invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === \"BAD_PREFIX\" || reason === \"UNEXPECTED_CONTINUE\") {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === \"OVERRUN\") {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === \"OVERLONG\") {\n assertArgument(typeof (badCodepoint) === \"number\", \"invalid bad code point for replacement\", \"badCodepoint\", badCodepoint);\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n/**\n * A handful of popular, built-in UTF-8 error handling strategies.\n *\n * **``\"error\"``** - throws on ANY illegal UTF-8 sequence or\n * non-canonical (overlong) codepoints (this is the default)\n *\n * **``\"ignore\"``** - silently drops any illegal UTF-8 sequence\n * and accepts non-canonical (overlong) codepoints\n *\n * **``\"replace\"``** - replace any illegal UTF-8 sequence with the\n * UTF-8 replacement character (i.e. ``\"\\\\ufffd\"``) and accepts\n * non-canonical (overlong) codepoints\n *\n * @returns: Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>\n */\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(\"UNEXPECTED_CONTINUE\", i - 1, bytes, result);\n }\n else {\n i += onError(\"BAD_PREFIX\", i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(\"OVERRUN\", i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(\"MISSING_CONTINUE\", i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(\"OUT_OF_RANGE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(\"UTF16_SURROGATE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(\"OVERLONG\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n/**\n * Returns the UTF-8 byte representation of %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8Bytes(str, form) {\n assertArgument(typeof (str) === \"string\", \"invalid string value\", \"str\", str);\n if (form != null) {\n assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00), \"invalid surrogate pair\", \"str\", str);\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\n//export \nfunction _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\n/**\n * Returns the string represented by the UTF-8 data %%bytes%%.\n *\n * When %%onError%% function is specified, it is called on UTF-8\n * errors allowing recovery using the [[Utf8ErrorFunc]] API.\n * (default: [error](Utf8ErrorFuncs))\n */\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n/**\n * Returns the UTF-8 code-points for %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8CodePoints(str, form) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","/**\n * The **FixedNumber** class permits using values with decimal places,\n * using fixed-pont math.\n *\n * Fixed-point math is still based on integers under-the-hood, but uses an\n * internal offset to store fractional components below, and each operation\n * corrects for this after each operation.\n *\n * @_section: api/utils/fixed-point-math:Fixed-Point Maths [about-fixed-point-math]\n */\nimport { getBytes } from \"./data.js\";\nimport { assert, assertArgument, assertPrivate } from \"./errors.js\";\nimport { getBigInt, getNumber, fromTwos, mask, toBigInt } from \"./maths.js\";\nimport { defineProperties } from \"./properties.js\";\nconst BN_N1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_5 = BigInt(5);\nconst _guard = {};\n// Constant to pull zeros from for multipliers\nlet Zeros = \"0000\";\nwhile (Zeros.length < 80) {\n Zeros += Zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getTens(decimals) {\n let result = Zeros;\n while (result.length < decimals) {\n result += result;\n }\n return BigInt(\"1\" + result.substring(0, decimals));\n}\nfunction checkValue(val, format, safeOp) {\n const width = BigInt(format.width);\n if (format.signed) {\n const limit = (BN_1 << (width - BN_1));\n assert(safeOp == null || (val >= -limit && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n operation: safeOp, fault: \"overflow\", value: val\n });\n if (val > BN_0) {\n val = fromTwos(mask(val, width), width);\n }\n else {\n val = -fromTwos(mask(-val, width), width);\n }\n }\n else {\n const limit = (BN_1 << width);\n assert(safeOp == null || (val >= 0 && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n operation: safeOp, fault: \"overflow\", value: val\n });\n val = (((val % limit) + limit) % limit) & (limit - BN_1);\n }\n return val;\n}\nfunction getFormat(value) {\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n // Parse the format string\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n assertArgument(match, \"invalid fixed format\", \"format\", value);\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n // Extract the values from the object\n const v = value;\n const check = (key, type, defaultValue) => {\n if (v[key] == null) {\n return defaultValue;\n }\n assertArgument(typeof (v[key]) === type, \"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, v[key]);\n return v[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n assertArgument((width % 8) === 0, \"invalid FixedNumber width (not byte aligned)\", \"format.width\", width);\n assertArgument(decimals <= 80, \"invalid FixedNumber decimals (too large)\", \"format.decimals\", decimals);\n const name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n return { signed, width, decimals, name };\n}\nfunction toString(val, decimals) {\n let negative = \"\";\n if (val < BN_0) {\n negative = \"-\";\n val *= BN_N1;\n }\n let str = val.toString();\n // No decimal point for whole values\n if (decimals === 0) {\n return (negative + str);\n }\n // Pad out to the whole component (including a whole digit)\n while (str.length <= decimals) {\n str = Zeros + str;\n }\n // Insert the decimal point\n const index = str.length - decimals;\n str = str.substring(0, index) + \".\" + str.substring(index);\n // Trim the whole component (leaving at least one 0)\n while (str[0] === \"0\" && str[1] !== \".\") {\n str = str.substring(1);\n }\n // Trim the decimal component (leaving at least one 0)\n while (str[str.length - 1] === \"0\" && str[str.length - 2] !== \".\") {\n str = str.substring(0, str.length - 1);\n }\n return (negative + str);\n}\n/**\n * A FixedNumber represents a value over its [[FixedFormat]]\n * arithmetic field.\n *\n * A FixedNumber can be used to perform math, losslessly, on\n * values which have decmial places.\n *\n * A FixedNumber has a fixed bit-width to store values in, and stores all\n * values internally by multiplying the value by 10 raised to the power of\n * %%decimals%%.\n *\n * If operations are performed that cause a value to grow too high (close to\n * positive infinity) or too low (close to negative infinity), the value\n * is said to //overflow//.\n *\n * For example, an 8-bit signed value, with 0 decimals may only be within\n * the range ``-128`` to ``127``; so ``-128 - 1`` will overflow and become\n * ``127``. Likewise, ``127 + 1`` will overflow and become ``-127``.\n *\n * Many operation have a normal and //unsafe// variant. The normal variant\n * will throw a [[NumericFaultError]] on any overflow, while the //unsafe//\n * variant will silently allow overflow, corrupting its value value.\n *\n * If operations are performed that cause a value to become too small\n * (close to zero), the value loses precison and is said to //underflow//.\n *\n * For example, a value with 1 decimal place may store a number as small\n * as ``0.1``, but the value of ``0.1 / 2`` is ``0.05``, which cannot fit\n * into 1 decimal place, so underflow occurs which means precision is lost\n * and the value becomes ``0``.\n *\n * Some operations have a normal and //signalling// variant. The normal\n * variant will silently ignore underflow, while the //signalling// variant\n * will thow a [[NumericFaultError]] on underflow.\n */\nexport class FixedNumber {\n /**\n * The specific fixed-point arithmetic field for this value.\n */\n format;\n #format;\n // The actual value (accounting for decimals)\n #val;\n // A base-10 value to multiple values by to maintain the magnitude\n #tens;\n /**\n * This is a property so console.log shows a human-meaningful value.\n *\n * @private\n */\n _value;\n // Use this when changing this file to get some typing info,\n // but then switch to any to mask the internal type\n //constructor(guard: any, value: bigint, format: _FixedFormat) {\n /**\n * @private\n */\n constructor(guard, value, format) {\n assertPrivate(guard, _guard, \"FixedNumber\");\n this.#val = value;\n this.#format = format;\n const _value = toString(value, format.decimals);\n defineProperties(this, { format: format.name, _value });\n this.#tens = getTens(format.decimals);\n }\n /**\n * If true, negative values are permitted, otherwise only\n * positive values and zero are allowed.\n */\n get signed() { return this.#format.signed; }\n /**\n * The number of bits available to store the value.\n */\n get width() { return this.#format.width; }\n /**\n * The number of decimal places in the fixed-point arithment field.\n */\n get decimals() { return this.#format.decimals; }\n /**\n * The value as an integer, based on the smallest unit the\n * [[decimals]] allow.\n */\n get value() { return this.#val; }\n #checkFormat(other) {\n assertArgument(this.format === other.format, \"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n #checkValue(val, safeOp) {\n /*\n const width = BigInt(this.width);\n if (this.signed) {\n const limit = (BN_1 << (width - BN_1));\n assert(safeOp == null || (val >= -limit && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n operation: <string>safeOp, fault: \"overflow\", value: val\n });\n \n if (val > BN_0) {\n val = fromTwos(mask(val, width), width);\n } else {\n val = -fromTwos(mask(-val, width), width);\n }\n \n } else {\n const masked = mask(val, width);\n assert(safeOp == null || (val >= 0 && val === masked), \"overflow\", \"NUMERIC_FAULT\", {\n operation: <string>safeOp, fault: \"overflow\", value: val\n });\n val = masked;\n }\n */\n val = checkValue(val, this.#format, safeOp);\n return new FixedNumber(_guard, val, this.#format);\n }\n #add(o, safeOp) {\n this.#checkFormat(o);\n return this.#checkValue(this.#val + o.#val, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% added\n * to %%other%%, ignoring overflow.\n */\n addUnsafe(other) { return this.#add(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% added\n * to %%other%%. A [[NumericFaultError]] is thrown if overflow\n * occurs.\n */\n add(other) { return this.#add(other, \"add\"); }\n #sub(o, safeOp) {\n this.#checkFormat(o);\n return this.#checkValue(this.#val - o.#val, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n * from %%this%%, ignoring overflow.\n */\n subUnsafe(other) { return this.#sub(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n * from %%this%%. A [[NumericFaultError]] is thrown if overflow\n * occurs.\n */\n sub(other) { return this.#sub(other, \"sub\"); }\n #mul(o, safeOp) {\n this.#checkFormat(o);\n return this.#checkValue((this.#val * o.#val) / this.#tens, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n * by %%other%%, ignoring overflow and underflow (precision loss).\n */\n mulUnsafe(other) { return this.#mul(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n * by %%other%%. A [[NumericFaultError]] is thrown if overflow\n * occurs.\n */\n mul(other) { return this.#mul(other, \"mul\"); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n * by %%other%%. A [[NumericFaultError]] is thrown if overflow\n * occurs or if underflow (precision loss) occurs.\n */\n mulSignal(other) {\n this.#checkFormat(other);\n const value = this.#val * other.#val;\n assert((value % this.#tens) === BN_0, \"precision lost during signalling mul\", \"NUMERIC_FAULT\", {\n operation: \"mulSignal\", fault: \"underflow\", value: this\n });\n return this.#checkValue(value / this.#tens, \"mulSignal\");\n }\n #div(o, safeOp) {\n assert(o.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n operation: \"div\", fault: \"divide-by-zero\", value: this\n });\n this.#checkFormat(o);\n return this.#checkValue((this.#val * this.#tens) / o.#val, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% divided\n * by %%other%%, ignoring underflow (precision loss). A\n * [[NumericFaultError]] is thrown if overflow occurs.\n */\n divUnsafe(other) { return this.#div(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% divided\n * by %%other%%, ignoring underflow (precision loss). A\n * [[NumericFaultError]] is thrown if overflow occurs.\n */\n div(other) { return this.#div(other, \"div\"); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% divided\n * by %%other%%. A [[NumericFaultError]] is thrown if underflow\n * (precision loss) occurs.\n */\n divSignal(other) {\n assert(other.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n operation: \"div\", fault: \"divide-by-zero\", value: this\n });\n this.#checkFormat(other);\n const value = (this.#val * this.#tens);\n assert((value % other.#val) === BN_0, \"precision lost during signalling div\", \"NUMERIC_FAULT\", {\n operation: \"divSignal\", fault: \"underflow\", value: this\n });\n return this.#checkValue(value / other.#val, \"divSignal\");\n }\n /**\n * Returns a comparison result between %%this%% and %%other%%.\n *\n * This is suitable for use in sorting, where ``-1`` implies %%this%%\n * is smaller, ``1`` implies %%this%% is larger and ``0`` implies\n * both are equal.\n */\n cmp(other) {\n let a = this.value, b = other.value;\n // Coerce a and b to the same magnitude\n const delta = this.decimals - other.decimals;\n if (delta > 0) {\n b *= getTens(delta);\n }\n else if (delta < 0) {\n a *= getTens(-delta);\n }\n // Comnpare\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n }\n /**\n * Returns true if %%other%% is equal to %%this%%.\n */\n eq(other) { return this.cmp(other) === 0; }\n /**\n * Returns true if %%other%% is less than to %%this%%.\n */\n lt(other) { return this.cmp(other) < 0; }\n /**\n * Returns true if %%other%% is less than or equal to %%this%%.\n */\n lte(other) { return this.cmp(other) <= 0; }\n /**\n * Returns true if %%other%% is greater than to %%this%%.\n */\n gt(other) { return this.cmp(other) > 0; }\n /**\n * Returns true if %%other%% is greater than or equal to %%this%%.\n */\n gte(other) { return this.cmp(other) >= 0; }\n /**\n * Returns a new [[FixedNumber]] which is the largest **integer**\n * that is less than or equal to %%this%%.\n *\n * The decimal component of the result will always be ``0``.\n */\n floor() {\n let val = this.#val;\n if (this.#val < BN_0) {\n val -= this.#tens - BN_1;\n }\n val = (this.#val / this.#tens) * this.#tens;\n return this.#checkValue(val, \"floor\");\n }\n /**\n * Returns a new [[FixedNumber]] which is the smallest **integer**\n * that is greater than or equal to %%this%%.\n *\n * The decimal component of the result will always be ``0``.\n */\n ceiling() {\n let val = this.#val;\n if (this.#val > BN_0) {\n val += this.#tens - BN_1;\n }\n val = (this.#val / this.#tens) * this.#tens;\n return this.#checkValue(val, \"ceiling\");\n }\n /**\n * Returns a new [[FixedNumber]] with the decimal component\n * rounded up on ties at %%decimals%% places.\n */\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // Not enough precision to not already be rounded\n if (decimals >= this.decimals) {\n return this;\n }\n const delta = this.decimals - decimals;\n const bump = BN_5 * getTens(delta - 1);\n let value = this.value + bump;\n const tens = getTens(delta);\n value = (value / tens) * tens;\n checkValue(value, this.#format, \"round\");\n return new FixedNumber(_guard, value, this.#format);\n }\n /**\n * Returns true if %%this%% is equal to ``0``.\n */\n isZero() { return (this.#val === BN_0); }\n /**\n * Returns true if %%this%% is less than ``0``.\n */\n isNegative() { return (this.#val < BN_0); }\n /**\n * Returns the string representation of %%this%%.\n */\n toString() { return this._value; }\n /**\n * Returns a float approximation.\n *\n * Due to IEEE 754 precission (or lack thereof), this function\n * can only return an approximation and most values will contain\n * rounding errors.\n */\n toUnsafeFloat() { return parseFloat(this.toString()); }\n /**\n * Return a new [[FixedNumber]] with the same value but has had\n * its field set to %%format%%.\n *\n * This will throw if the value cannot fit into %%format%%.\n */\n toFormat(format) {\n return FixedNumber.fromString(this.toString(), format);\n }\n /**\n * Creates a new [[FixedNumber]] for %%value%% divided by\n * %%decimal%% places with %%format%%.\n *\n * This will throw a [[NumericFaultError]] if %%value%% (once adjusted\n * for %%decimals%%) cannot fit in %%format%%, either due to overflow\n * or underflow (precision loss).\n */\n static fromValue(_value, _decimals, _format) {\n const decimals = (_decimals == null) ? 0 : getNumber(_decimals);\n const format = getFormat(_format);\n let value = getBigInt(_value, \"value\");\n const delta = decimals - format.decimals;\n if (delta > 0) {\n const tens = getTens(delta);\n assert((value % tens) === BN_0, \"value loses precision for format\", \"NUMERIC_FAULT\", {\n operation: \"fromValue\", fault: \"underflow\", value: _value\n });\n value /= tens;\n }\n else if (delta < 0) {\n value *= getTens(-delta);\n }\n checkValue(value, format, \"fromValue\");\n return new FixedNumber(_guard, value, format);\n }\n /**\n * Creates a new [[FixedNumber]] for %%value%% with %%format%%.\n *\n * This will throw a [[NumericFaultError]] if %%value%% cannot fit\n * in %%format%%, either due to overflow or underflow (precision loss).\n */\n static fromString(_value, _format) {\n const match = _value.match(/^(-?)([0-9]*)\\.?([0-9]*)$/);\n assertArgument(match && (match[2].length + match[3].length) > 0, \"invalid FixedNumber string value\", \"value\", _value);\n const format = getFormat(_format);\n let whole = (match[2] || \"0\"), decimal = (match[3] || \"\");\n // Pad out the decimals\n while (decimal.length < format.decimals) {\n decimal += Zeros;\n }\n // Check precision is safe\n assert(decimal.substring(format.decimals).match(/^0*$/), \"too many decimals for format\", \"NUMERIC_FAULT\", {\n operation: \"fromString\", fault: \"underflow\", value: _value\n });\n // Remove extra padding\n decimal = decimal.substring(0, format.decimals);\n const value = BigInt(match[1] + whole + decimal);\n checkValue(value, format, \"fromString\");\n return new FixedNumber(_guard, value, format);\n }\n /**\n * Creates a new [[FixedNumber]] with the big-endian representation\n * %%value%% with %%format%%.\n *\n * This will throw a [[NumericFaultError]] if %%value%% cannot fit\n * in %%format%% due to overflow.\n */\n static fromBytes(_value, _format) {\n let value = toBigInt(getBytes(_value, \"value\"));\n const format = getFormat(_format);\n if (format.signed) {\n value = fromTwos(value, format.width);\n }\n checkValue(value, format, \"fromBytes\");\n return new FixedNumber(_guard, value, format);\n }\n}\n//const f1 = FixedNumber.fromString(\"12.56\", \"fixed16x2\");\n//const f2 = FixedNumber.fromString(\"0.3\", \"fixed16x2\");\n//console.log(f1.divSignal(f2));\n//const BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","/**\n * Most interactions with Ethereum requires integer values, which use\n * the smallest magnitude unit.\n *\n * For example, imagine dealing with dollars and cents. Since dollars\n * are divisible, non-integer values are possible, such as ``$10.77``.\n * By using the smallest indivisible unit (i.e. cents), the value can\n * be kept as the integer ``1077``.\n *\n * When receiving decimal input from the user (as a decimal string),\n * the value should be converted to an integer and when showing a user\n * a value, the integer value should be converted to a decimal string.\n *\n * This creates a clear distinction, between values to be used by code\n * (integers) and values used for display logic to users (decimals).\n *\n * The native unit in Ethereum, //ether// is divisible to 18 decimal places,\n * where each individual unit is called a //wei//.\n *\n * @_subsection api/utils:Unit Conversion [about-units]\n */\nimport { assertArgument } from \"./errors.js\";\nimport { FixedNumber } from \"./fixednumber.js\";\nimport { getNumber } from \"./maths.js\";\nconst names = [\n \"wei\",\n \"kwei\",\n \"mwei\",\n \"gwei\",\n \"szabo\",\n \"finney\",\n \"ether\",\n];\n/**\n * Converts %%value%% into a //decimal string//, assuming %%unit%% decimal\n * places. The %%unit%% may be the number of decimal places or the name of\n * a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n *\n */\nexport function formatUnits(value, unit) {\n let decimals = 18;\n if (typeof (unit) === \"string\") {\n const index = names.indexOf(unit);\n assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n decimals = 3 * index;\n }\n else if (unit != null) {\n decimals = getNumber(unit, \"unit\");\n }\n return FixedNumber.fromValue(value, decimals, { decimals, width: 512 }).toString();\n}\n/**\n * Converts the //decimal string// %%value%% to a BigInt, assuming\n * %%unit%% decimal places. The %%unit%% may the number of decimal places\n * or the name of a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n */\nexport function parseUnits(value, unit) {\n assertArgument(typeof (value) === \"string\", \"value must be a string\", \"value\", value);\n let decimals = 18;\n if (typeof (unit) === \"string\") {\n const index = names.indexOf(unit);\n assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n decimals = 3 * index;\n }\n else if (unit != null) {\n decimals = getNumber(unit, \"unit\");\n }\n return FixedNumber.fromString(value, { decimals, width: 512 }).value;\n}\n/**\n * Converts %%value%% into a //decimal string// using 18 decimal places.\n */\nexport function formatEther(wei) {\n return formatUnits(wei, 18);\n}\n/**\n * Converts the //decimal string// %%ether%% to a BigInt, using 18\n * decimal places.\n */\nexport function parseEther(ether) {\n return parseUnits(ether, 18);\n}\n//# sourceMappingURL=units.js.map","import { defineProperties, concat, getBytesCopy, getNumber, hexlify, toBeArray, toBigInt, toNumber, assert, assertArgument\n/*, isError*/\n } from \"../../utils/index.js\";\n/**\n * @_ignore:\n */\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nconst resultNames = new WeakMap();\nfunction getNames(result) {\n return resultNames.get(result);\n}\nfunction setNames(result, names) {\n resultNames.set(result, names);\n}\nfunction throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n}\nfunction toObject(names, items, deep) {\n if (names.indexOf(null) >= 0) {\n return items.map((item, index) => {\n if (item instanceof Result) {\n return toObject(getNames(item), item, deep);\n }\n return item;\n });\n }\n return names.reduce((accum, name, index) => {\n let item = items.getValue(name);\n if (!(name in accum)) {\n if (deep && item instanceof Result) {\n item = toObject(getNames(item), item, deep);\n }\n accum[name] = item;\n }\n return accum;\n }, {});\n}\n/**\n * A [[Result]] is a sub-class of Array, which allows accessing any\n * of its values either positionally by its index or, if keys are\n * provided by its name.\n *\n * @_docloc: api/abi\n */\nexport class Result extends Array {\n // No longer used; but cannot be removed as it will remove the\n // #private field from the .d.ts which may break backwards\n // compatibility\n #names;\n /**\n * @private\n */\n constructor(...args) {\n // To properly sub-class Array so the other built-in\n // functions work, the constructor has to behave fairly\n // well. So, in the event we are created via fromItems()\n // we build the read-only Result object we want, but on\n // any other input, we use the default constructor\n // constructor(guard: any, items: Array<any>, keys?: Array<null | string>);\n const guard = args[0];\n let items = args[1];\n let names = (args[2] || []).slice();\n let wrap = true;\n if (guard !== _guard) {\n items = args;\n names = [];\n wrap = false;\n }\n // Can't just pass in ...items since an array of length 1\n // is a special case in the super.\n super(items.length);\n items.forEach((item, index) => { this[index] = item; });\n // Find all unique keys\n const nameCounts = names.reduce((accum, name) => {\n if (typeof (name) === \"string\") {\n accum.set(name, (accum.get(name) || 0) + 1);\n }\n return accum;\n }, (new Map()));\n // Remove any key thats not unique\n setNames(this, Object.freeze(items.map((item, index) => {\n const name = names[index];\n if (name != null && nameCounts.get(name) === 1) {\n return name;\n }\n return null;\n })));\n // Dummy operations to prevent TypeScript from complaining\n this.#names = [];\n if (this.#names == null) {\n void (this.#names);\n }\n if (!wrap) {\n return;\n }\n // A wrapped Result is immutable\n Object.freeze(this);\n // Proxy indices and names so we can trap deferred errors\n const proxy = new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n // Index accessor\n if (prop.match(/^[0-9]+$/)) {\n const index = getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n throwError(`index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n const value = target[prop];\n if (value instanceof Function) {\n // Make sure functions work with private variables\n // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#no_private_property_forwarding\n return function (...args) {\n return value.apply((this === receiver) ? target : this, args);\n };\n }\n else if (!(prop in target)) {\n // Possible name accessor\n return target.getValue.apply((this === receiver) ? target : this, [prop]);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n setNames(proxy, getNames(this));\n return proxy;\n }\n /**\n * Returns the Result as a normal Array. If %%deep%%, any children\n * which are Result objects are also converted to a normal Array.\n *\n * This will throw if there are any outstanding deferred\n * errors.\n */\n toArray(deep) {\n const result = [];\n this.forEach((item, index) => {\n if (item instanceof Error) {\n throwError(`index ${index}`, item);\n }\n if (deep && item instanceof Result) {\n item = item.toArray(deep);\n }\n result.push(item);\n });\n return result;\n }\n /**\n * Returns the Result as an Object with each name-value pair. If\n * %%deep%%, any children which are Result objects are also\n * converted to an Object.\n *\n * This will throw if any value is unnamed, or if there are\n * any outstanding deferred errors.\n */\n toObject(deep) {\n const names = getNames(this);\n return names.reduce((accum, name, index) => {\n assert(name != null, `value at index ${index} unnamed`, \"UNSUPPORTED_OPERATION\", {\n operation: \"toObject()\"\n });\n return toObject(names, this, deep);\n }, {});\n }\n /**\n * @_ignore\n */\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (start < 0) {\n start += this.length;\n if (start < 0) {\n start = 0;\n }\n }\n if (end == null) {\n end = this.length;\n }\n if (end < 0) {\n end += this.length;\n if (end < 0) {\n end = 0;\n }\n }\n if (end > this.length) {\n end = this.length;\n }\n const _names = getNames(this);\n const result = [], names = [];\n for (let i = start; i < end; i++) {\n result.push(this[i]);\n names.push(_names[i]);\n }\n return new Result(_guard, result, names);\n }\n /**\n * @_ignore\n */\n filter(callback, thisArg) {\n const _names = getNames(this);\n const result = [], names = [];\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n if (item instanceof Error) {\n throwError(`index ${i}`, item);\n }\n if (callback.call(thisArg, item, i, this)) {\n result.push(item);\n names.push(_names[i]);\n }\n }\n return new Result(_guard, result, names);\n }\n /**\n * @_ignore\n */\n map(callback, thisArg) {\n const result = [];\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n if (item instanceof Error) {\n throwError(`index ${i}`, item);\n }\n result.push(callback.call(thisArg, item, i, this));\n }\n return result;\n }\n /**\n * Returns the value for %%name%%.\n *\n * Since it is possible to have a key whose name conflicts with\n * a method on a [[Result]] or its superclass Array, or any\n * JavaScript keyword, this ensures all named values are still\n * accessible by name.\n */\n getValue(name) {\n const index = getNames(this).indexOf(name);\n if (index === -1) {\n return undefined;\n }\n const value = this[index];\n if (value instanceof Error) {\n throwError(`property ${JSON.stringify(name)}`, value.error);\n }\n return value;\n }\n /**\n * Creates a new [[Result]] for %%items%% with each entry\n * also accessible by its corresponding name in %%keys%%.\n */\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n/**\n * Returns all errors found in a [[Result]].\n *\n * Since certain errors encountered when creating a [[Result]] do\n * not impact the ability to continue parsing data, they are\n * deferred until they are actually accessed. Hence a faulty string\n * in an Event that is never used does not impact the program flow.\n *\n * However, sometimes it may be useful to access, identify or\n * validate correctness of a [[Result]].\n *\n * @_docloc api/abi\n */\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toBeArray(value);\n assert(bytes.length <= WordSize, \"value out-of-bounds\", \"BUFFER_OVERRUN\", { buffer: bytes, length: WordSize, offset: bytes.length });\n if (bytes.length !== WordSize) {\n bytes = getBytesCopy(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\n/**\n * @_ignore\n */\nexport class Coder {\n // The coder name:\n // - address, uint256, tuple, array, etc.\n name;\n // The fully expanded type, including composite types:\n // - address, uint256, tuple(address,bytes), uint256[3][4][], etc.\n type;\n // The localName bound in the signature, in this example it is \"baz\":\n // - tuple(address foo, uint bar) baz\n localName;\n // Whether this type is dynamic:\n // - Dynamic: bytes, string, address[], tuple(boolean[]), etc.\n // - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8)\n dynamic;\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n assertArgument(false, message, this.localName, value);\n }\n}\n/**\n * @_ignore\n */\nexport class Writer {\n // An array of WordSize lengthed objects to concatenation\n #data;\n #dataLength;\n constructor() {\n this.#data = [];\n this.#dataLength = 0;\n }\n get data() {\n return concat(this.#data);\n }\n get length() { return this.#dataLength; }\n #writeData(data) {\n this.#data.push(data);\n this.#dataLength += data.length;\n return data.length;\n }\n appendWriter(writer) {\n return this.#writeData(getBytesCopy(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = getBytesCopy(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = getBytesCopy(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return this.#writeData(bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return this.#writeData(getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = this.#data.length;\n this.#data.push(Padding);\n this.#dataLength += WordSize;\n return (value) => {\n this.#data[offset] = getValue(value);\n };\n }\n}\n/**\n * @_ignore\n */\nexport class Reader {\n // Allows incomplete unpadded data to be read; otherwise an error\n // is raised if attempting to overrun the buffer. This is required\n // to deal with an old Solidity bug, in which event data for\n // external (not public thoguh) was tightly packed.\n allowLoose;\n #data;\n #offset;\n #bytesRead;\n #parent;\n #maxInflation;\n constructor(data, allowLoose, maxInflation) {\n defineProperties(this, { allowLoose: !!allowLoose });\n this.#data = getBytesCopy(data);\n this.#bytesRead = 0;\n this.#parent = null;\n this.#maxInflation = (maxInflation != null) ? maxInflation : 1024;\n this.#offset = 0;\n }\n get data() { return hexlify(this.#data); }\n get dataLength() { return this.#data.length; }\n get consumed() { return this.#offset; }\n get bytes() { return new Uint8Array(this.#data); }\n #incrementBytesRead(count) {\n if (this.#parent) {\n return this.#parent.#incrementBytesRead(count);\n }\n this.#bytesRead += count;\n // Check for excessive inflation (see: #4537)\n assert(this.#maxInflation < 1 || this.#bytesRead <= this.#maxInflation * this.dataLength, `compressed ABI data exceeds inflation ratio of ${this.#maxInflation} ( see: https:/\\/github.com/ethers-io/ethers.js/issues/4537 )`, \"BUFFER_OVERRUN\", {\n buffer: getBytesCopy(this.#data), offset: this.#offset,\n length: count, info: {\n bytesRead: this.#bytesRead,\n dataLength: this.dataLength\n }\n });\n }\n #peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (this.#offset + alignedLength > this.#data.length) {\n if (this.allowLoose && loose && this.#offset + length <= this.#data.length) {\n alignedLength = length;\n }\n else {\n assert(false, \"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: getBytesCopy(this.#data),\n length: this.#data.length,\n offset: this.#offset + alignedLength\n });\n }\n }\n return this.#data.slice(this.#offset, this.#offset + alignedLength);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n const reader = new Reader(this.#data.slice(this.#offset + offset), this.allowLoose, this.#maxInflation);\n reader.#parent = this;\n return reader;\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = this.#peekBytes(0, length, !!loose);\n this.#incrementBytesRead(length);\n this.#offset += bytes.length;\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n//# sourceMappingURL=abstract-coder.js.map","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nfunction bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!u8a(data))\n throw new Error(`expected Uint8Array, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapXOFConstructorWithOpts, } from './utils.js';\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n number(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n exists(this);\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n exists(this, false);\n bytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n number(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n output(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","/**\n * Cryptographic hashing functions\n *\n * @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\n/**\n * Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n * The %%data%% **must** be a data representation, to compute the\n * hash of UTF-8 data use the [[id]] function.\n *\n * @returns DataHexstring\n * @example:\n * keccak256(\"0x\")\n * //_result:\n *\n * keccak256(\"0x1337\")\n * //_result:\n *\n * keccak256(new Uint8Array([ 0x13, 0x37 ]))\n * //_result:\n *\n * // Strings are assumed to be DataHexString, otherwise it will\n * // throw. To hash UTF-8 data, see the note above.\n * keccak256(\"Hello World\")\n * //_error:\n */\nexport function keccak256(_data) {\n const data = getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = getBytes(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\n/**\n * Returns a normalized and checksumed address for %%address%%.\n * This accepts non-checksum addresses, checksum addresses and\n * [[getIcapAddress]] formats.\n *\n * The checksum in Ethereum uses the capitalization (upper-case\n * vs lower-case) of the characters within an address to encode\n * its checksum, which offers, on average, a checksum of 15-bits.\n *\n * If %%address%% contains both upper-case and lower-case, it is\n * assumed to already be a checksum address and its checksum is\n * validated, and if the address fails its expected checksum an\n * error is thrown.\n *\n * If you wish the checksum of %%address%% to be ignore, it should\n * be converted to lower-case (i.e. ``.toLowercase()``) before\n * being passed in. This should be a very rare situation though,\n * that you wish to bypass the safegaurds in place to protect\n * against an address that has been incorrectly copied from another\n * source.\n *\n * @example:\n * // Adds the checksum (via upper-casing specific letters)\n * getAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\")\n * //_result:\n *\n * // Converts ICAP address and adds checksum\n * getAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if an address contains mixed case,\n * // but the checksum fails\n * getAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_error:\n */\nexport function getAddress(address) {\n assertArgument(typeof (address) === \"string\", \"invalid address\", \"address\", address);\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (!address.startsWith(\"0x\")) {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address, \"bad address checksum\", \"address\", address);\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n assertArgument(address.substring(2, 4) === ibanChecksum(address), \"bad icap checksum\", \"address\", address);\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n assertArgument(false, \"invalid address\", \"address\", address);\n}\n/**\n * The [ICAP Address format](link-icap) format is an early checksum\n * format which attempts to be compatible with the banking\n * industry [IBAN format](link-wiki-iban) for bank accounts.\n *\n * It is no longer common or a recommended format.\n *\n * @example:\n * getIcapAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\");\n * //_result:\n *\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if the ICAP checksum is wrong\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37\");\n * //_error:\n */\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","import { assert, assertArgument } from \"../utils/index.js\";\nimport { getAddress } from \"./address.js\";\n/**\n * Returns true if %%value%% is an object which implements the\n * [[Addressable]] interface.\n *\n * @example:\n * // Wallets and AbstractSigner sub-classes\n * isAddressable(Wallet.createRandom())\n * //_result:\n *\n * // Contracts\n * contract = new Contract(\"dai.tokens.ethers.eth\", [ ], provider)\n * isAddressable(contract)\n * //_result:\n */\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\n/**\n * Returns true if %%value%% is a valid address.\n *\n * @example:\n * // Valid address\n * isAddress(\"0x8ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_result:\n *\n * // Valid ICAP address\n * isAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\")\n * //_result:\n *\n * // Invalid checksum\n * isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBa72\")\n * //_result:\n *\n * // Invalid ICAP checksum\n * isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_result:\n *\n * // Not an address (an ENS name requires a provided and an\n * // asynchronous API to access)\n * isAddress(\"ricmoo.eth\")\n * //_result:\n */\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\nasync function checkAddress(target, promise) {\n const result = await promise;\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n assert(typeof (target) !== \"string\", \"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n assertArgument(false, \"invalid AddressLike value; did not resolve to a value address\", \"target\", target);\n }\n return getAddress(result);\n}\n/**\n * Resolves to an address for the %%target%%, which may be any\n * supported address type, an [[Addressable]] or a Promise which\n * resolves to an address.\n *\n * If an ENS name is provided, but that name has not been correctly\n * configured a [[UnconfiguredNameError]] is thrown.\n *\n * @example:\n * addr = \"0x6B175474E89094C44Da98b954EedeAC495271d0F\"\n *\n * // Addresses are return synchronously\n * resolveAddress(addr, provider)\n * //_result:\n *\n * // Address promises are resolved asynchronously\n * resolveAddress(Promise.resolve(addr))\n * //_result:\n *\n * // ENS names are resolved asynchronously\n * resolveAddress(\"dai.tokens.ethers.eth\", provider)\n * //_result:\n *\n * // Addressable objects are resolved asynchronously\n * contract = new Contract(addr, [ ])\n * resolveAddress(contract, provider)\n * //_result:\n *\n * // Unconfigured ENS names reject\n * resolveAddress(\"nothing-here.ricmoo.eth\", provider)\n * //_error:\n *\n * // ENS names require a NameResolver object passed in\n * // (notice the provider was omitted)\n * resolveAddress(\"nothing-here.ricmoo.eth\")\n * //_error:\n */\nexport function resolveAddress(target, resolver) {\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n assert(resolver != null, \"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", { operation: \"resolveName\" });\n return checkAddress(target, resolver.resolveName(target));\n }\n else if (isAddressable(target)) {\n return checkAddress(target, target.getAddress());\n }\n else if (target && typeof (target.then) === \"function\") {\n return checkAddress(target, target);\n }\n assertArgument(false, \"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","/**\n * A Typed object allows a value to have its type explicitly\n * specified.\n *\n * For example, in Solidity, the value ``45`` could represent a\n * ``uint8`` or a ``uint256``. The value ``0x1234`` could represent\n * a ``bytes2`` or ``bytes``.\n *\n * Since JavaScript has no meaningful way to explicitly inform any\n * APIs which what the type is, this allows transparent interoperation\n * with Soldity.\n *\n * @_subsection: api/abi:Typed Values\n */\nimport { assertPrivate, defineProperties } from \"../utils/index.js\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\n/**\n * The **Typed** class to wrap values providing explicit type information.\n */\nexport class Typed {\n /**\n * The type, as a Solidity-compatible type.\n */\n type;\n /**\n * The actual value.\n */\n value;\n #options;\n /**\n * @_ignore:\n */\n _typedSymbol;\n /**\n * @_ignore:\n */\n constructor(gaurd, type, value, options) {\n if (options == null) {\n options = null;\n }\n assertPrivate(_gaurd, gaurd, \"Typed\");\n defineProperties(this, { _typedSymbol, type, value });\n this.#options = options;\n // Check the value is valid\n this.format();\n }\n /**\n * Format the type as a Human-Readable type.\n */\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n /**\n * The default value returned by this type.\n */\n defaultValue() {\n return 0;\n }\n /**\n * The minimum value for numeric types.\n */\n minValue() {\n return 0;\n }\n /**\n * The maximum value for numeric types.\n */\n maxValue() {\n return 0;\n }\n /**\n * Returns ``true`` and provides a type guard is this is a [[TypedBigInt]].\n */\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n /**\n * Returns ``true`` and provides a type guard is this is a [[TypedData]].\n */\n isData() {\n return this.type.startsWith(\"bytes\");\n }\n /**\n * Returns ``true`` and provides a type guard is this is a [[TypedString]].\n */\n isString() {\n return (this.type === \"string\");\n }\n /**\n * Returns the tuple name, if this is a tuple. Throws otherwise.\n */\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return this.#options;\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n /**\n * Returns the length of the array type or ``-1`` if it is dynamic.\n *\n * Throws if the type is not an array.\n */\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (this.#options === true) {\n return -1;\n }\n if (this.#options === false) {\n return (this.value).length;\n }\n return null;\n }\n /**\n * Returns a new **Typed** of %%type%% with the %%value%%.\n */\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n /**\n * Return a new ``uint8`` type for %%v%%.\n */\n static uint8(v) { return n(v, 8); }\n /**\n * Return a new ``uint16`` type for %%v%%.\n */\n static uint16(v) { return n(v, 16); }\n /**\n * Return a new ``uint24`` type for %%v%%.\n */\n static uint24(v) { return n(v, 24); }\n /**\n * Return a new ``uint32`` type for %%v%%.\n */\n static uint32(v) { return n(v, 32); }\n /**\n * Return a new ``uint40`` type for %%v%%.\n */\n static uint40(v) { return n(v, 40); }\n /**\n * Return a new ``uint48`` type for %%v%%.\n */\n static uint48(v) { return n(v, 48); }\n /**\n * Return a new ``uint56`` type for %%v%%.\n */\n static uint56(v) { return n(v, 56); }\n /**\n * Return a new ``uint64`` type for %%v%%.\n */\n static uint64(v) { return n(v, 64); }\n /**\n * Return a new ``uint72`` type for %%v%%.\n */\n static uint72(v) { return n(v, 72); }\n /**\n * Return a new ``uint80`` type for %%v%%.\n */\n static uint80(v) { return n(v, 80); }\n /**\n * Return a new ``uint88`` type for %%v%%.\n */\n static uint88(v) { return n(v, 88); }\n /**\n * Return a new ``uint96`` type for %%v%%.\n */\n static uint96(v) { return n(v, 96); }\n /**\n * Return a new ``uint104`` type for %%v%%.\n */\n static uint104(v) { return n(v, 104); }\n /**\n * Return a new ``uint112`` type for %%v%%.\n */\n static uint112(v) { return n(v, 112); }\n /**\n * Return a new ``uint120`` type for %%v%%.\n */\n static uint120(v) { return n(v, 120); }\n /**\n * Return a new ``uint128`` type for %%v%%.\n */\n static uint128(v) { return n(v, 128); }\n /**\n * Return a new ``uint136`` type for %%v%%.\n */\n static uint136(v) { return n(v, 136); }\n /**\n * Return a new ``uint144`` type for %%v%%.\n */\n static uint144(v) { return n(v, 144); }\n /**\n * Return a new ``uint152`` type for %%v%%.\n */\n static uint152(v) { return n(v, 152); }\n /**\n * Return a new ``uint160`` type for %%v%%.\n */\n static uint160(v) { return n(v, 160); }\n /**\n * Return a new ``uint168`` type for %%v%%.\n */\n static uint168(v) { return n(v, 168); }\n /**\n * Return a new ``uint176`` type for %%v%%.\n */\n static uint176(v) { return n(v, 176); }\n /**\n * Return a new ``uint184`` type for %%v%%.\n */\n static uint184(v) { return n(v, 184); }\n /**\n * Return a new ``uint192`` type for %%v%%.\n */\n static uint192(v) { return n(v, 192); }\n /**\n * Return a new ``uint200`` type for %%v%%.\n */\n static uint200(v) { return n(v, 200); }\n /**\n * Return a new ``uint208`` type for %%v%%.\n */\n static uint208(v) { return n(v, 208); }\n /**\n * Return a new ``uint216`` type for %%v%%.\n */\n static uint216(v) { return n(v, 216); }\n /**\n * Return a new ``uint224`` type for %%v%%.\n */\n static uint224(v) { return n(v, 224); }\n /**\n * Return a new ``uint232`` type for %%v%%.\n */\n static uint232(v) { return n(v, 232); }\n /**\n * Return a new ``uint240`` type for %%v%%.\n */\n static uint240(v) { return n(v, 240); }\n /**\n * Return a new ``uint248`` type for %%v%%.\n */\n static uint248(v) { return n(v, 248); }\n /**\n * Return a new ``uint256`` type for %%v%%.\n */\n static uint256(v) { return n(v, 256); }\n /**\n * Return a new ``uint256`` type for %%v%%.\n */\n static uint(v) { return n(v, 256); }\n /**\n * Return a new ``int8`` type for %%v%%.\n */\n static int8(v) { return n(v, -8); }\n /**\n * Return a new ``int16`` type for %%v%%.\n */\n static int16(v) { return n(v, -16); }\n /**\n * Return a new ``int24`` type for %%v%%.\n */\n static int24(v) { return n(v, -24); }\n /**\n * Return a new ``int32`` type for %%v%%.\n */\n static int32(v) { return n(v, -32); }\n /**\n * Return a new ``int40`` type for %%v%%.\n */\n static int40(v) { return n(v, -40); }\n /**\n * Return a new ``int48`` type for %%v%%.\n */\n static int48(v) { return n(v, -48); }\n /**\n * Return a new ``int56`` type for %%v%%.\n */\n static int56(v) { return n(v, -56); }\n /**\n * Return a new ``int64`` type for %%v%%.\n */\n static int64(v) { return n(v, -64); }\n /**\n * Return a new ``int72`` type for %%v%%.\n */\n static int72(v) { return n(v, -72); }\n /**\n * Return a new ``int80`` type for %%v%%.\n */\n static int80(v) { return n(v, -80); }\n /**\n * Return a new ``int88`` type for %%v%%.\n */\n static int88(v) { return n(v, -88); }\n /**\n * Return a new ``int96`` type for %%v%%.\n */\n static int96(v) { return n(v, -96); }\n /**\n * Return a new ``int104`` type for %%v%%.\n */\n static int104(v) { return n(v, -104); }\n /**\n * Return a new ``int112`` type for %%v%%.\n */\n static int112(v) { return n(v, -112); }\n /**\n * Return a new ``int120`` type for %%v%%.\n */\n static int120(v) { return n(v, -120); }\n /**\n * Return a new ``int128`` type for %%v%%.\n */\n static int128(v) { return n(v, -128); }\n /**\n * Return a new ``int136`` type for %%v%%.\n */\n static int136(v) { return n(v, -136); }\n /**\n * Return a new ``int144`` type for %%v%%.\n */\n static int144(v) { return n(v, -144); }\n /**\n * Return a new ``int52`` type for %%v%%.\n */\n static int152(v) { return n(v, -152); }\n /**\n * Return a new ``int160`` type for %%v%%.\n */\n static int160(v) { return n(v, -160); }\n /**\n * Return a new ``int168`` type for %%v%%.\n */\n static int168(v) { return n(v, -168); }\n /**\n * Return a new ``int176`` type for %%v%%.\n */\n static int176(v) { return n(v, -176); }\n /**\n * Return a new ``int184`` type for %%v%%.\n */\n static int184(v) { return n(v, -184); }\n /**\n * Return a new ``int92`` type for %%v%%.\n */\n static int192(v) { return n(v, -192); }\n /**\n * Return a new ``int200`` type for %%v%%.\n */\n static int200(v) { return n(v, -200); }\n /**\n * Return a new ``int208`` type for %%v%%.\n */\n static int208(v) { return n(v, -208); }\n /**\n * Return a new ``int216`` type for %%v%%.\n */\n static int216(v) { return n(v, -216); }\n /**\n * Return a new ``int224`` type for %%v%%.\n */\n static int224(v) { return n(v, -224); }\n /**\n * Return a new ``int232`` type for %%v%%.\n */\n static int232(v) { return n(v, -232); }\n /**\n * Return a new ``int240`` type for %%v%%.\n */\n static int240(v) { return n(v, -240); }\n /**\n * Return a new ``int248`` type for %%v%%.\n */\n static int248(v) { return n(v, -248); }\n /**\n * Return a new ``int256`` type for %%v%%.\n */\n static int256(v) { return n(v, -256); }\n /**\n * Return a new ``int256`` type for %%v%%.\n */\n static int(v) { return n(v, -256); }\n /**\n * Return a new ``bytes1`` type for %%v%%.\n */\n static bytes1(v) { return b(v, 1); }\n /**\n * Return a new ``bytes2`` type for %%v%%.\n */\n static bytes2(v) { return b(v, 2); }\n /**\n * Return a new ``bytes3`` type for %%v%%.\n */\n static bytes3(v) { return b(v, 3); }\n /**\n * Return a new ``bytes4`` type for %%v%%.\n */\n static bytes4(v) { return b(v, 4); }\n /**\n * Return a new ``bytes5`` type for %%v%%.\n */\n static bytes5(v) { return b(v, 5); }\n /**\n * Return a new ``bytes6`` type for %%v%%.\n */\n static bytes6(v) { return b(v, 6); }\n /**\n * Return a new ``bytes7`` type for %%v%%.\n */\n static bytes7(v) { return b(v, 7); }\n /**\n * Return a new ``bytes8`` type for %%v%%.\n */\n static bytes8(v) { return b(v, 8); }\n /**\n * Return a new ``bytes9`` type for %%v%%.\n */\n static bytes9(v) { return b(v, 9); }\n /**\n * Return a new ``bytes10`` type for %%v%%.\n */\n static bytes10(v) { return b(v, 10); }\n /**\n * Return a new ``bytes11`` type for %%v%%.\n */\n static bytes11(v) { return b(v, 11); }\n /**\n * Return a new ``bytes12`` type for %%v%%.\n */\n static bytes12(v) { return b(v, 12); }\n /**\n * Return a new ``bytes13`` type for %%v%%.\n */\n static bytes13(v) { return b(v, 13); }\n /**\n * Return a new ``bytes14`` type for %%v%%.\n */\n static bytes14(v) { return b(v, 14); }\n /**\n * Return a new ``bytes15`` type for %%v%%.\n */\n static bytes15(v) { return b(v, 15); }\n /**\n * Return a new ``bytes16`` type for %%v%%.\n */\n static bytes16(v) { return b(v, 16); }\n /**\n * Return a new ``bytes17`` type for %%v%%.\n */\n static bytes17(v) { return b(v, 17); }\n /**\n * Return a new ``bytes18`` type for %%v%%.\n */\n static bytes18(v) { return b(v, 18); }\n /**\n * Return a new ``bytes19`` type for %%v%%.\n */\n static bytes19(v) { return b(v, 19); }\n /**\n * Return a new ``bytes20`` type for %%v%%.\n */\n static bytes20(v) { return b(v, 20); }\n /**\n * Return a new ``bytes21`` type for %%v%%.\n */\n static bytes21(v) { return b(v, 21); }\n /**\n * Return a new ``bytes22`` type for %%v%%.\n */\n static bytes22(v) { return b(v, 22); }\n /**\n * Return a new ``bytes23`` type for %%v%%.\n */\n static bytes23(v) { return b(v, 23); }\n /**\n * Return a new ``bytes24`` type for %%v%%.\n */\n static bytes24(v) { return b(v, 24); }\n /**\n * Return a new ``bytes25`` type for %%v%%.\n */\n static bytes25(v) { return b(v, 25); }\n /**\n * Return a new ``bytes26`` type for %%v%%.\n */\n static bytes26(v) { return b(v, 26); }\n /**\n * Return a new ``bytes27`` type for %%v%%.\n */\n static bytes27(v) { return b(v, 27); }\n /**\n * Return a new ``bytes28`` type for %%v%%.\n */\n static bytes28(v) { return b(v, 28); }\n /**\n * Return a new ``bytes29`` type for %%v%%.\n */\n static bytes29(v) { return b(v, 29); }\n /**\n * Return a new ``bytes30`` type for %%v%%.\n */\n static bytes30(v) { return b(v, 30); }\n /**\n * Return a new ``bytes31`` type for %%v%%.\n */\n static bytes31(v) { return b(v, 31); }\n /**\n * Return a new ``bytes32`` type for %%v%%.\n */\n static bytes32(v) { return b(v, 32); }\n /**\n * Return a new ``address`` type for %%v%%.\n */\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n /**\n * Return a new ``bool`` type for %%v%%.\n */\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n /**\n * Return a new ``bytes`` type for %%v%%.\n */\n static bytes(v) { return new Typed(_gaurd, \"bytes\", v); }\n /**\n * Return a new ``string`` type for %%v%%.\n */\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n /**\n * Return a new ``array`` type for %%v%%, allowing %%dynamic%% length.\n */\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n /**\n * Return a new ``tuple`` type for %%v%%, with the optional %%name%%.\n */\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n /**\n * Return a new ``uint8`` type for %%v%%.\n */\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n /**\n * Returns true only if %%value%% is a [[Typed]] instance.\n */\n static isTyped(value) {\n return (value\n && typeof (value) === \"object\"\n && \"_typedSymbol\" in value\n && value._typedSymbol === _typedSymbol);\n }\n /**\n * If the value is a [[Typed]] instance, validates the underlying value\n * and returns it, otherwise returns value directly.\n *\n * This is useful for functions that with to accept either a [[Typed]]\n * object or values.\n */\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"../../address/index.js\";\nimport { toBeHex } from \"../../utils/maths.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toBeHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n/**\n * Clones the functionality of an existing Coder, but without a localName\n *\n * @_ignore\n */\nexport class AnonymousCoder extends Coder {\n coder;\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties, isError, assert, assertArgument, assertArgumentCount } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\n/**\n * @_ignore\n */\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n assert(name, \"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n assert(!unique[name], \"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n unique[name] = true;\n return values[name];\n });\n }\n else {\n assertArgument(false, \"invalid tuple value\", \"tuple\", values);\n }\n assertArgument(coders.length === arrayValues.length, \"types/value length mismatch\", \"tuple\", values);\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\n/**\n * @_ignore\n */\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\n/**\n * @_ignore\n */\nexport class ArrayCoder extends Coder {\n coder;\n length;\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n assert(count * WordSize <= reader.dataLength, \"insufficient data length\", \"BUFFER_OVERRUN\", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength });\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return unpack(reader, coders);\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return !!reader.readValue();\n }\n}\n//# sourceMappingURL=boolean.js.map","import { getBytesCopy, hexlify } from \"../../utils/index.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = getBytesCopy(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\n/**\n * @_ignore\n */\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return hexlify(super.decode(reader));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { defineProperties, getBytesCopy, hexlify } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class FixedBytesCoder extends Coder {\n size;\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = getBytesCopy(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return hexlify(reader.readBytes(this.size));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\n/**\n * @_ignore\n */\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return null;\n }\n}\n//# sourceMappingURL=null.js.map","import { defineProperties, fromTwos, getBigInt, mask, toTwos } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n/**\n * @_ignore\n */\nexport class NumberCoder extends Coder {\n size;\n signed;\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = toTwos(value, 8 * WordSize);\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return value;\n }\n}\n//# sourceMappingURL=number.js.map","import { toUtf8Bytes, toUtf8String } from \"../../utils/utf8.js\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\n/**\n * @_ignore\n */\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"../../utils/properties.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\n/**\n * @_ignore\n */\nexport class TupleCoder extends Coder {\n coders;\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return unpack(reader, this.coders);\n }\n}\n//# sourceMappingURL=tuple.js.map","import { getAddress } from \"../address/index.js\";\nimport { assertArgument, isHexString } from \"../utils/index.js\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: storageKeys.map((storageKey, index) => {\n assertArgument(isHexString(storageKey, 32), \"invalid slot\", `storageKeys[${index}]`, storageKey);\n return storageKey.toLowerCase();\n })\n };\n}\n/**\n * Returns a [[AccessList]] from any ethers-supported access-list structure.\n */\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n assertArgument(set.length === 2, \"invalid slot set\", `value[${index}]`, set);\n return accessSetify(set[0], set[1]);\n }\n assertArgument(set != null && typeof (set) === \"object\", \"invalid address-slot set\", \"value\", value);\n return accessSetify(set.address, set.storageKeys);\n });\n }\n assertArgument(value != null && typeof (value) === \"object\", \"invalid access list\", \"value\", value);\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { toUtf8Bytes } from \"../utils/index.js\";\n/**\n * A simple hashing function which operates on UTF-8 strings to\n * compute an 32-byte identifier.\n *\n * This simply computes the [UTF-8 bytes](toUtf8Bytes) and computes\n * the [[keccak256]].\n *\n * @example:\n * id(\"hello world\")\n * //_result:\n */\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","/**\n * A fragment is a single item from an ABI, which may represent any of:\n *\n * - [Functions](FunctionFragment)\n * - [Events](EventFragment)\n * - [Constructors](ConstructorFragment)\n * - Custom [Errors](ErrorFragment)\n * - [Fallback or Receive](FallbackFragment) functions\n *\n * @_subsection api/abi/abi-coder:Fragments [about-fragments]\n */\nimport { defineProperties, getBigInt, getNumber, assert, assertPrivate, assertArgument } from \"../utils/index.js\";\nimport { id } from \"../hash/index.js\";\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\nconst _kwVisibDeploy = \"external public payable override\";\nconst KwVisibDeploy = setify(_kwVisibDeploy.split(\" \"));\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view override\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event fallback function receive struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespacePrefix = new RegExp(\"^(\\\\s*)\");\nconst regexNumberPrefix = new RegExp(\"^([0-9]+)\");\nconst regexIdPrefix = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\n// Parser regexs to check validity\nconst regexId = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)$\");\nconst regexType = new RegExp(\"^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$\");\nclass TokenString {\n #offset;\n #tokens;\n get offset() { return this.#offset; }\n get length() { return this.#tokens.length - this.#offset; }\n constructor(tokens) {\n this.#offset = 0;\n this.#tokens = tokens.slice();\n }\n clone() { return new TokenString(this.#tokens); }\n reset() { this.#offset = 0; }\n #subTokenString(from = 0, to = 0) {\n return new TokenString(this.#tokens.slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n }));\n }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n const top = this.peek();\n throw new Error(`expected ${type}; got ${top.type} ${JSON.stringify(top.text)}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = this.#subTokenString(this.#offset + 1, top.match + 1);\n this.#offset = top.match + 1;\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (this.#offset < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(this.#subTokenString(this.#offset + 1, link));\n this.#offset = link;\n }\n this.#offset = top.match + 1;\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (this.#offset >= this.#tokens.length) {\n throw new Error(\"out-of-bounds\");\n }\n return this.#tokens[this.#offset];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n const result = this.peek();\n this.#offset++;\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = this.#offset; i < this.#tokens.length; i++) {\n const token = this.#tokens[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return `<TokenString ${tokens.join(\" \")}>`;\n }\n}\nfunction lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespacePrefix);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdPrefix);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumberPrefix);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.from(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens at offset ${tokens.offset}: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n assertArgument(match, \"invalid type\", \"type\", type);\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n assertArgument(length !== 0 && length <= 32, \"invalid bytes length\", \"type\", type);\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid numeric width\", \"type\", type);\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nconst ErrorFragmentInternal = \"_ErrorInternal\";\nconst EventFragmentInternal = \"_EventInternal\";\nconst ConstructorFragmentInternal = \"_ConstructorInternal\";\nconst FallbackFragmentInternal = \"_FallbackInternal\";\nconst FunctionFragmentInternal = \"_FunctionInternal\";\nconst StructFragmentInternal = \"_StructInternal\";\n/**\n * Each input and output of a [[Fragment]] is an Array of **ParamType**.\n */\nexport class ParamType {\n /**\n * The local name of the parameter (or ``\"\"`` if unbound)\n */\n name;\n /**\n * The fully qualified type (e.g. ``\"address\"``, ``\"tuple(address)\"``,\n * ``\"uint256[3][]\"``)\n */\n type;\n /**\n * The base type (e.g. ``\"address\"``, ``\"tuple\"``, ``\"array\"``)\n */\n baseType;\n /**\n * True if the parameters is indexed.\n *\n * For non-indexable types this is ``null``.\n */\n indexed;\n /**\n * The components for the tuple.\n *\n * For non-tuple types this is ``null``.\n */\n components;\n /**\n * The array length, or ``-1`` for dynamic-lengthed arrays.\n *\n * For non-array types this is ``null``.\n */\n arrayLength;\n /**\n * The type of each child in the array.\n *\n * For non-array types this is ``null``.\n */\n arrayChildren;\n /**\n * @private\n */\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n /**\n * Return a string representation of this type.\n *\n * For example,\n *\n * ``sighash\" => \"(uint256,address)\"``\n *\n * ``\"minimal\" => \"tuple(uint256,address) indexed\"``\n *\n * ``\"full\" => \"tuple(uint256 foo, address bar) indexed baz\"``\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n const name = this.name || \"\";\n if (this.isArray()) {\n const result = JSON.parse(this.arrayChildren.format(\"json\"));\n result.name = name;\n result.type += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n return JSON.stringify(result);\n }\n const result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === \"full\") ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== \"sighash\") {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === \"full\" && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n /**\n * Returns true if %%this%% is an Array type.\n *\n * This provides a type gaurd ensuring that [[arrayChildren]]\n * and [[arrayLength]] are non-null.\n */\n isArray() {\n return (this.baseType === \"array\");\n }\n /**\n * Returns true if %%this%% is a Tuple type.\n *\n * This provides a type gaurd ensuring that [[components]]\n * is non-null.\n */\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n /**\n * Returns true if %%this%% is an Indexable type.\n *\n * This provides a type gaurd ensuring that [[indexed]]\n * is non-null.\n */\n isIndexable() {\n return (this.indexed != null);\n }\n /**\n * Walks the **ParamType** with %%value%%, calling %%process%%\n * on each type, destructing the %%value%% recursively.\n */\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const _this = this;\n return value.map((v) => (_this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n const _this = this;\n return value.map((v, i) => (_this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n #walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n childType.#walkAsync(promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invalid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (result.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n components[index].#walkAsync(promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n }\n /**\n * Walks the **ParamType** with %%value%%, asynchronously calling\n * %%process%% on each type, destructing the %%value%% recursively.\n *\n * This can be used to resolve ENS names by walking and resolving each\n * ``\"address\"`` type.\n */\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n this.#walkAsync(promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n /**\n * Creates a new **ParamType** for %%obj%%.\n *\n * If %%allowIndexed%% then the ``indexed`` keyword is permitted,\n * otherwise the ``indexed`` keyword will throw an error.\n */\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return ParamType.from(lex(obj), allowIndexed);\n }\n catch (error) {\n assertArgument(false, \"invalid param type\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(obj, setify([\"tuple\"])).has(\"tuple\") || obj.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = obj.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(obj.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (obj.length && obj.peekType(\"BRACKET\")) {\n const bracket = obj.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(obj, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (obj.peekType(\"ID\") ? obj.pop().text : \"\");\n if (obj.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n const name = obj.name;\n assertArgument(!name || (typeof (name) === \"string\" && name.match(regexId)), \"invalid name\", \"obj.name\", name);\n let indexed = obj.indexed;\n if (indexed != null) {\n assertArgument(allowIndexed, \"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = parseInt(arrayMatch[2] || \"-1\");\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name || \"\", type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type === \"tuple\" || type.startsWith(\"tuple(\" /* fix: ) */) || type.startsWith(\"(\" /* fix: ) */)) {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name || \"\", type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name || \"\", type, type, indexed, null, null, null);\n }\n /**\n * Returns true if %%value%% is a **ParamType**.\n */\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n/**\n * An abstract class to represent An individual fragment from a parse ABI.\n */\nexport class Fragment {\n /**\n * The type of the fragment.\n */\n type;\n /**\n * The inputs for the fragment.\n */\n inputs;\n /**\n * @private\n */\n constructor(guard, type, inputs) {\n assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n /**\n * Creates a new **Fragment** for %%obj%%, wich can be any supported\n * ABI frgament type.\n */\n static from(obj) {\n if (typeof (obj) === \"string\") {\n // Try parsing JSON...\n try {\n Fragment.from(JSON.parse(obj));\n }\n catch (e) { }\n // ...otherwise, use the human-readable lexer\n return Fragment.from(lex(obj));\n }\n if (obj instanceof TokenString) {\n // Human-readable ABI (already lexed)\n const type = obj.peekKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.from(obj);\n case \"error\": return ErrorFragment.from(obj);\n case \"event\": return EventFragment.from(obj);\n case \"fallback\":\n case \"receive\":\n return FallbackFragment.from(obj);\n case \"function\": return FunctionFragment.from(obj);\n case \"struct\": return StructFragment.from(obj);\n }\n }\n else if (typeof (obj) === \"object\") {\n // JSON ABI\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.from(obj);\n case \"error\": return ErrorFragment.from(obj);\n case \"event\": return EventFragment.from(obj);\n case \"fallback\":\n case \"receive\":\n return FallbackFragment.from(obj);\n case \"function\": return FunctionFragment.from(obj);\n case \"struct\": return StructFragment.from(obj);\n }\n assert(false, `unsupported type: ${obj.type}`, \"UNSUPPORTED_OPERATION\", {\n operation: \"Fragment.from\"\n });\n }\n assertArgument(false, \"unsupported frgament object\", \"obj\", obj);\n }\n /**\n * Returns true if %%value%% is a [[ConstructorFragment]].\n */\n static isConstructor(value) {\n return ConstructorFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is an [[ErrorFragment]].\n */\n static isError(value) {\n return ErrorFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is an [[EventFragment]].\n */\n static isEvent(value) {\n return EventFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is a [[FunctionFragment]].\n */\n static isFunction(value) {\n return FunctionFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is a [[StructFragment]].\n */\n static isStruct(value) {\n return StructFragment.isFragment(value);\n }\n}\n/**\n * An abstract class to represent An individual fragment\n * which has a name from a parse ABI.\n */\nexport class NamedFragment extends Fragment {\n /**\n * The name of the fragment.\n */\n name;\n /**\n * @private\n */\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n assertArgument(typeof (name) === \"string\" && name.match(regexId), \"invalid identifier\", \"name\", name);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === \"full\") ? \", \" : \",\") + \")\";\n}\n/**\n * A Fragment which represents a //Custom Error//.\n */\nexport class ErrorFragment extends NamedFragment {\n /**\n * @private\n */\n constructor(guard, name, inputs) {\n super(guard, \"error\", name, inputs);\n Object.defineProperty(this, internal, { value: ErrorFragmentInternal });\n }\n /**\n * The Custom Error selector.\n */\n get selector() {\n return id(this.format(\"sighash\")).substring(0, 10);\n }\n /**\n * Returns a string representation of this fragment as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n /**\n * Returns a new **ErrorFragment** for %%obj%%.\n */\n static from(obj) {\n if (ErrorFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ErrorFragment.from(lex(obj));\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"error\", obj);\n const inputs = consumeParams(obj);\n consumeEoi(obj);\n return new ErrorFragment(_guard, name, inputs);\n }\n return new ErrorFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is an\n * **ErrorFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === ErrorFragmentInternal);\n }\n}\n/**\n * A Fragment which represents an Event.\n */\nexport class EventFragment extends NamedFragment {\n /**\n * Whether this event is anonymous.\n */\n anonymous;\n /**\n * @private\n */\n constructor(guard, name, inputs, anonymous) {\n super(guard, \"event\", name, inputs);\n Object.defineProperty(this, internal, { value: EventFragmentInternal });\n defineProperties(this, { anonymous });\n }\n /**\n * The Event topic hash.\n */\n get topicHash() {\n return id(this.format(\"sighash\"));\n }\n /**\n * Returns a string representation of this event as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== \"sighash\" && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n /**\n * Return the topic hash for an event with %%name%% and %%params%%.\n */\n static getTopicHash(name, params) {\n params = (params || []).map((p) => ParamType.from(p));\n const fragment = new EventFragment(_guard, name, params, false);\n return fragment.topicHash;\n }\n /**\n * Returns a new **EventFragment** for %%obj%%.\n */\n static from(obj) {\n if (EventFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return EventFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid event fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"event\", obj);\n const inputs = consumeParams(obj, true);\n const anonymous = !!consumeKeywords(obj, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(obj);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n return new EventFragment(_guard, obj.name, obj.inputs ? obj.inputs.map((p) => ParamType.from(p, true)) : [], !!obj.anonymous);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is an\n * **EventFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === EventFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a constructor.\n */\nexport class ConstructorFragment extends Fragment {\n /**\n * Whether the constructor can receive an endowment.\n */\n payable;\n /**\n * The recommended gas limit for deployment or ``null``.\n */\n gas;\n /**\n * @private\n */\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n Object.defineProperty(this, internal, { value: ConstructorFragmentInternal });\n defineProperties(this, { payable, gas });\n }\n /**\n * Returns a string representation of this constructor as %%format%%.\n */\n format(format) {\n assert(format != null && format !== \"sighash\", \"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", { operation: \"format(sighash)\" });\n if (format === \"json\") {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n if (this.payable) {\n result.push(\"payable\");\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n /**\n * Returns a new **ConstructorFragment** for %%obj%%.\n */\n static from(obj) {\n if (ConstructorFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return ConstructorFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid constuctor fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n consumeKeywords(obj, setify([\"constructor\"]));\n const inputs = consumeParams(obj);\n const payable = !!consumeKeywords(obj, KwVisibDeploy).has(\"payable\");\n const gas = consumeGas(obj);\n consumeEoi(obj);\n return new ConstructorFragment(_guard, \"constructor\", inputs, payable, gas);\n }\n return new ConstructorFragment(_guard, \"constructor\", obj.inputs ? obj.inputs.map(ParamType.from) : [], !!obj.payable, (obj.gas != null) ? obj.gas : null);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **ConstructorFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === ConstructorFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a method.\n */\nexport class FallbackFragment extends Fragment {\n /**\n * If the function can be sent value during invocation.\n */\n payable;\n constructor(guard, inputs, payable) {\n super(guard, \"fallback\", inputs);\n Object.defineProperty(this, internal, { value: FallbackFragmentInternal });\n defineProperties(this, { payable });\n }\n /**\n * Returns a string representation of this fallback as %%format%%.\n */\n format(format) {\n const type = ((this.inputs.length === 0) ? \"receive\" : \"fallback\");\n if (format === \"json\") {\n const stateMutability = (this.payable ? \"payable\" : \"nonpayable\");\n return JSON.stringify({ type, stateMutability });\n }\n return `${type}()${this.payable ? \" payable\" : \"\"}`;\n }\n /**\n * Returns a new **FallbackFragment** for %%obj%%.\n */\n static from(obj) {\n if (FallbackFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return FallbackFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid fallback fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const errorObj = obj.toString();\n const topIsValid = obj.peekKeyword(setify([\"fallback\", \"receive\"]));\n assertArgument(topIsValid, \"type must be fallback or receive\", \"obj\", errorObj);\n const type = obj.popKeyword(setify([\"fallback\", \"receive\"]));\n // receive()\n if (type === \"receive\") {\n const inputs = consumeParams(obj);\n assertArgument(inputs.length === 0, `receive cannot have arguments`, \"obj.inputs\", inputs);\n consumeKeywords(obj, setify([\"payable\"]));\n consumeEoi(obj);\n return new FallbackFragment(_guard, [], true);\n }\n // fallback() [payable]\n // fallback(bytes) [payable] returns (bytes)\n let inputs = consumeParams(obj);\n if (inputs.length) {\n assertArgument(inputs.length === 1 && inputs[0].type === \"bytes\", \"invalid fallback inputs\", \"obj.inputs\", inputs.map((i) => i.format(\"minimal\")).join(\", \"));\n }\n else {\n inputs = [ParamType.from(\"bytes\")];\n }\n const mutability = consumeMutability(obj);\n assertArgument(mutability === \"nonpayable\" || mutability === \"payable\", \"fallback cannot be constants\", \"obj.stateMutability\", mutability);\n if (consumeKeywords(obj, setify([\"returns\"])).has(\"returns\")) {\n const outputs = consumeParams(obj);\n assertArgument(outputs.length === 1 && outputs[0].type === \"bytes\", \"invalid fallback outputs\", \"obj.outputs\", outputs.map((i) => i.format(\"minimal\")).join(\", \"));\n }\n consumeEoi(obj);\n return new FallbackFragment(_guard, inputs, mutability === \"payable\");\n }\n if (obj.type === \"receive\") {\n return new FallbackFragment(_guard, [], true);\n }\n if (obj.type === \"fallback\") {\n const inputs = [ParamType.from(\"bytes\")];\n const payable = (obj.stateMutability === \"payable\");\n return new FallbackFragment(_guard, inputs, payable);\n }\n assertArgument(false, \"invalid fallback description\", \"obj\", obj);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **FallbackFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === FallbackFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a method.\n */\nexport class FunctionFragment extends NamedFragment {\n /**\n * If the function is constant (e.g. ``pure`` or ``view`` functions).\n */\n constant;\n /**\n * The returned types for the result of calling this function.\n */\n outputs;\n /**\n * The state mutability (e.g. ``payable``, ``nonpayable``, ``view``\n * or ``pure``)\n */\n stateMutability;\n /**\n * If the function can be sent value during invocation.\n */\n payable;\n /**\n * The recommended gas limit to send when calling this function.\n */\n gas;\n /**\n * @private\n */\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, \"function\", name, inputs);\n Object.defineProperty(this, internal, { value: FunctionFragmentInternal });\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n /**\n * The Function selector.\n */\n get selector() {\n return id(this.format(\"sighash\")).substring(0, 10);\n }\n /**\n * Returns a string representation of this function as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== \"sighash\") {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n /**\n * Return the selector for a function with %%name%% and %%params%%.\n */\n static getSelector(name, params) {\n params = (params || []).map((p) => ParamType.from(p));\n const fragment = new FunctionFragment(_guard, name, \"view\", params, [], null);\n return fragment.selector;\n }\n /**\n * Returns a new **FunctionFragment** for %%obj%%.\n */\n static from(obj) {\n if (FunctionFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return FunctionFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid function fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"function\", obj);\n const inputs = consumeParams(obj);\n const mutability = consumeMutability(obj);\n let outputs = [];\n if (consumeKeywords(obj, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(obj);\n }\n const gas = consumeGas(obj);\n consumeEoi(obj);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n let stateMutability = obj.stateMutability;\n // Use legacy Solidity ABI logic if stateMutability is missing\n if (stateMutability == null) {\n stateMutability = \"payable\";\n if (typeof (obj.constant) === \"boolean\") {\n stateMutability = \"view\";\n if (!obj.constant) {\n stateMutability = \"payable\";\n if (typeof (obj.payable) === \"boolean\" && !obj.payable) {\n stateMutability = \"nonpayable\";\n }\n }\n }\n else if (typeof (obj.payable) === \"boolean\" && !obj.payable) {\n stateMutability = \"nonpayable\";\n }\n }\n // @TODO: verifyState for stateMutability (e.g. throw if\n // payable: false but stateMutability is \"nonpayable\")\n return new FunctionFragment(_guard, obj.name, stateMutability, obj.inputs ? obj.inputs.map(ParamType.from) : [], obj.outputs ? obj.outputs.map(ParamType.from) : [], (obj.gas != null) ? obj.gas : null);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **FunctionFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === FunctionFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a structure.\n */\nexport class StructFragment extends NamedFragment {\n /**\n * @private\n */\n constructor(guard, name, inputs) {\n super(guard, \"struct\", name, inputs);\n Object.defineProperty(this, internal, { value: StructFragmentInternal });\n }\n /**\n * Returns a string representation of this struct as %%format%%.\n */\n format() {\n throw new Error(\"@TODO\");\n }\n /**\n * Returns a new **StructFragment** for %%obj%%.\n */\n static from(obj) {\n if (typeof (obj) === \"string\") {\n try {\n return StructFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid struct fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"struct\", obj);\n const inputs = consumeParams(obj);\n consumeEoi(obj);\n return new StructFragment(_guard, name, inputs);\n }\n return new StructFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);\n }\n // @TODO: fix this return type\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **StructFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === StructFragmentInternal);\n }\n}\n//# sourceMappingURL=fragments.js.map","/**\n * When sending values to or receiving values from a [[Contract]], the\n * data is generally encoded using the [ABI standard](link-solc-abi).\n *\n * The AbiCoder provides a utility to encode values to ABI data and\n * decode values from ABI data.\n *\n * Most of the time, developers should favour the [[Contract]] class,\n * which further abstracts a lot of the finer details of ABI data.\n *\n * @_section api/abi/abi-coder:ABI Encoding\n */\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nimport { assertArgumentCount, assertArgument } from \"../utils/index.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nimport { getAddress } from \"../address/index.js\";\nimport { getBytes, hexlify, makeError } from \"../utils/index.js\";\n// https://docs.soliditylang.org/en/v0.8.17/control-structures.html\nconst PanicReasons = new Map();\nPanicReasons.set(0x00, \"GENERIC_PANIC\");\nPanicReasons.set(0x01, \"ASSERT_FALSE\");\nPanicReasons.set(0x11, \"OVERFLOW\");\nPanicReasons.set(0x12, \"DIVIDE_BY_ZERO\");\nPanicReasons.set(0x21, \"ENUM_RANGE_ERROR\");\nPanicReasons.set(0x22, \"BAD_STORAGE_DATA\");\nPanicReasons.set(0x31, \"STACK_UNDERFLOW\");\nPanicReasons.set(0x32, \"ARRAY_RANGE_ERROR\");\nPanicReasons.set(0x41, \"OUT_OF_MEMORY\");\nPanicReasons.set(0x51, \"UNINITIALIZED_FUNCTION_CALL\");\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nlet defaultCoder = null;\nlet defaultMaxInflation = 1024;\nfunction getBuiltinCallException(action, tx, data, abiCoder) {\n let message = \"missing revert data\";\n let reason = null;\n const invocation = null;\n let revert = null;\n if (data) {\n message = \"execution reverted\";\n const bytes = getBytes(data);\n data = hexlify(data);\n if (bytes.length === 0) {\n message += \" (no data present; likely require(false) occurred\";\n reason = \"require(false)\";\n }\n else if (bytes.length % 32 !== 4) {\n message += \" (could not decode reason; invalid data length)\";\n }\n else if (hexlify(bytes.slice(0, 4)) === \"0x08c379a0\") {\n // Error(string)\n try {\n reason = abiCoder.decode([\"string\"], bytes.slice(4))[0];\n revert = {\n signature: \"Error(string)\",\n name: \"Error\",\n args: [reason]\n };\n message += `: ${JSON.stringify(reason)}`;\n }\n catch (error) {\n message += \" (could not decode reason; invalid string data)\";\n }\n }\n else if (hexlify(bytes.slice(0, 4)) === \"0x4e487b71\") {\n // Panic(uint256)\n try {\n const code = Number(abiCoder.decode([\"uint256\"], bytes.slice(4))[0]);\n revert = {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n args: [code]\n };\n reason = `Panic due to ${PanicReasons.get(code) || \"UNKNOWN\"}(${code})`;\n message += `: ${reason}`;\n }\n catch (error) {\n message += \" (could not decode panic code)\";\n }\n }\n else {\n message += \" (unknown custom error)\";\n }\n }\n const transaction = {\n to: (tx.to ? getAddress(tx.to) : null),\n data: (tx.data || \"0x\")\n };\n if (tx.from) {\n transaction.from = getAddress(tx.from);\n }\n return makeError(message, \"CALL_EXCEPTION\", {\n action, data, reason, transaction, invocation, revert\n });\n}\n/**\n * The **AbiCoder** is a low-level class responsible for encoding JavaScript\n * values into binary data and decoding binary data into JavaScript values.\n */\nexport class AbiCoder {\n #getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid \" + match[1] + \" bit length\", \"param\", param);\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n assertArgument(size !== 0 && size <= 32, \"invalid bytes length\", \"param\", param);\n return new FixedBytesCoder(size, param.name);\n }\n assertArgument(false, \"invalid type\", \"type\", param.type);\n }\n /**\n * Get the default values for the given %%types%%.\n *\n * For example, a ``uint`` is by default ``0`` and ``bool``\n * is by default ``false``.\n */\n getDefaultValue(types) {\n const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n /**\n * Encode the %%values%% as the %%types%% into ABI data.\n *\n * @returns DataHexstring\n */\n encode(types, values) {\n assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n /**\n * Decode the ABI %%data%% as the %%types%% into values.\n *\n * If %%loose%% decoding is enabled, then strict padding is\n * not enforced. Some older versions of Solidity incorrectly\n * padded event data emitted from ``external`` functions.\n */\n decode(types, data, loose) {\n const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, loose, defaultMaxInflation));\n }\n static _setDefaultMaxInflation(value) {\n assertArgument(typeof (value) === \"number\" && Number.isInteger(value), \"invalid defaultMaxInflation factor\", \"value\", value);\n defaultMaxInflation = value;\n }\n /**\n * Returns the shared singleton instance of a default [[AbiCoder]].\n *\n * On the first call, the instance is created internally.\n */\n static defaultAbiCoder() {\n if (defaultCoder == null) {\n defaultCoder = new AbiCoder();\n }\n return defaultCoder;\n }\n /**\n * Returns an ethers-compatible [[CallExceptionError]] Error for the given\n * result %%data%% for the [[CallExceptionAction]] %%action%% against\n * the Transaction %%tx%%.\n */\n static getBuiltinCallException(action, tx, data) {\n return getBuiltinCallException(action, tx, data, AbiCoder.defaultAbiCoder());\n }\n}\n//# sourceMappingURL=abi-coder.js.map","/**\n * The Interface class is a low-level class that accepts an\n * ABI and provides all the necessary functionality to encode\n * and decode paramaters to and results from methods, events\n * and errors.\n *\n * It also provides several convenience methods to automatically\n * search and find matching transactions and events to parse them.\n *\n * @_subsection api/abi:Interfaces [interfaces]\n */\nimport { keccak256 } from \"../crypto/index.js\";\nimport { id } from \"../hash/index.js\";\nimport { concat, dataSlice, getBigInt, getBytes, getBytesCopy, hexlify, zeroPadBytes, zeroPadValue, isHexString, defineProperties, assertArgument, toBeHex, assert } from \"../utils/index.js\";\nimport { AbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\n/**\n * When using the [[Interface-parseLog]] to automatically match a Log to its event\n * for parsing, a **LogDescription** is returned.\n */\nexport class LogDescription {\n /**\n * The matching fragment for the ``topic0``.\n */\n fragment;\n /**\n * The name of the Event.\n */\n name;\n /**\n * The full Event signature.\n */\n signature;\n /**\n * The topic hash for the Event.\n */\n topic;\n /**\n * The arguments passed into the Event with ``emit``.\n */\n args;\n /**\n * @_ignore:\n */\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\n/**\n * When using the [[Interface-parseTransaction]] to automatically match\n * a transaction data to its function for parsing,\n * a **TransactionDescription** is returned.\n */\nexport class TransactionDescription {\n /**\n * The matching fragment from the transaction ``data``.\n */\n fragment;\n /**\n * The name of the Function from the transaction ``data``.\n */\n name;\n /**\n * The arguments passed to the Function from the transaction ``data``.\n */\n args;\n /**\n * The full Function signature from the transaction ``data``.\n */\n signature;\n /**\n * The selector for the Function from the transaction ``data``.\n */\n selector;\n /**\n * The ``value`` (in wei) from the transaction.\n */\n value;\n /**\n * @_ignore:\n */\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\n/**\n * When using the [[Interface-parseError]] to automatically match an\n * error for a call result for parsing, an **ErrorDescription** is returned.\n */\nexport class ErrorDescription {\n /**\n * The matching fragment.\n */\n fragment;\n /**\n * The name of the Error.\n */\n name;\n /**\n * The arguments passed to the Error with ``revert``.\n */\n args;\n /**\n * The full Error signature.\n */\n signature;\n /**\n * The selector for the Error.\n */\n selector;\n /**\n * @_ignore:\n */\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\n/**\n * An **Indexed** is used as a value when a value that does not\n * fit within a topic (i.e. not a fixed-length, 32-byte type). It\n * is the ``keccak256`` of the value, and used for types such as\n * arrays, tuples, bytes and strings.\n */\nexport class Indexed {\n /**\n * The ``keccak256`` of the value logged.\n */\n hash;\n /**\n * @_ignore:\n */\n _isIndexed;\n /**\n * Returns ``true`` if %%value%% is an **Indexed**.\n *\n * This provides a Type Guard for property access.\n */\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n /**\n * @_ignore:\n */\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\n/**\n * An Interface abstracts many of the low-level details for\n * encoding and decoding the data on the blockchain.\n *\n * An ABI provides information on how to encode data to send to\n * a Contract, how to decode the results and events and how to\n * interpret revert errors.\n *\n * The ABI can be specified by [any supported format](InterfaceAbi).\n */\nexport class Interface {\n /**\n * All the Contract ABI members (i.e. methods, events, errors, etc).\n */\n fragments;\n /**\n * The Contract constructor.\n */\n deploy;\n /**\n * The Fallback method, if any.\n */\n fallback;\n /**\n * If receiving ether is supported.\n */\n receive;\n #errors;\n #events;\n #functions;\n // #structs: Map<string, StructFragment>;\n #abiCoder;\n /**\n * Create a new Interface for the %%fragments%%.\n */\n constructor(fragments) {\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n this.#functions = new Map();\n this.#errors = new Map();\n this.#events = new Map();\n // this.#structs = new Map();\n const frags = [];\n for (const a of abi) {\n try {\n frags.push(Fragment.from(a));\n }\n catch (error) {\n console.log(`[Warning] Invalid Fragment ${JSON.stringify(a)}:`, error.message);\n }\n }\n defineProperties(this, {\n fragments: Object.freeze(frags)\n });\n let fallback = null;\n let receive = false;\n this.#abiCoder = this.getAbiCoder();\n // Add all fragments by their signature\n this.fragments.forEach((fragment, index) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n console.log(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"fallback\":\n if (fragment.inputs.length === 0) {\n receive = true;\n }\n else {\n assertArgument(!fallback || fragment.payable !== fallback.payable, \"conflicting fallback fragments\", `fragments[${index}]`, fragment);\n fallback = fragment;\n receive = fallback.payable;\n }\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (<FunctionFragment>fragment).outputs);\n bucket = this.#functions;\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = this.#events;\n break;\n case \"error\":\n bucket = this.#errors;\n break;\n default:\n return;\n }\n // Two identical entries; ignore it\n const signature = fragment.format();\n if (bucket.has(signature)) {\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.from(\"constructor()\")\n });\n }\n defineProperties(this, { fallback, receive });\n }\n /**\n * Returns the entire Human-Readable ABI, as an array of\n * signatures, optionally as %%minimal%% strings, which\n * removes parameter names and unneceesary spaces.\n */\n format(minimal) {\n const format = (minimal ? \"minimal\" : \"full\");\n const abi = this.fragments.map((f) => f.format(format));\n return abi;\n }\n /**\n * Return the JSON-encoded ABI. This is the format Solidiy\n * returns.\n */\n formatJson() {\n const abi = this.fragments.map((f) => f.format(\"json\"));\n // We need to re-bundle the JSON fragments a bit\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n /**\n * The ABI coder that will be used to encode and decode binary\n * data.\n */\n getAbiCoder() {\n return AbiCoder.defaultAbiCoder();\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n #getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of this.#functions.values()) {\n if (selector === fragment.selector) {\n return fragment;\n }\n }\n return null;\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of this.#functions) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n return null;\n }\n if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n assertArgument(false, `ambiguous function description (i.e. matches ${matchStr})`, \"key\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = this.#functions.get(FunctionFragment.from(key).format());\n if (result) {\n return result;\n }\n return null;\n }\n /**\n * Get the function name for %%key%%, which may be a function selector,\n * function name or function signature that belongs to the ABI.\n */\n getFunctionName(key) {\n const fragment = this.#getFunction(key, null, false);\n assertArgument(fragment, \"no matching function\", \"key\", key);\n return fragment.name;\n }\n /**\n * Returns true if %%key%% (a function selector, function name or\n * function signature) is present in the ABI.\n *\n * In the case of a function name, the name may be ambiguous, so\n * accessing the [[FunctionFragment]] may require refinement.\n */\n hasFunction(key) {\n return !!this.#getFunction(key, null, false);\n }\n /**\n * Get the [[FunctionFragment]] for %%key%%, which may be a function\n * selector, function name or function signature that belongs to the ABI.\n *\n * If %%values%% is provided, it will use the Typed API to handle\n * ambiguous cases where multiple functions match by name.\n *\n * If the %%key%% and %%values%% do not refine to a single function in\n * the ABI, this will throw.\n */\n getFunction(key, values) {\n return this.#getFunction(key, values || null, true);\n }\n /**\n * Iterate over all functions, calling %%callback%%, sorted by their name.\n */\n forEachFunction(callback) {\n const names = Array.from(this.#functions.keys());\n names.sort((a, b) => a.localeCompare(b));\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n callback((this.#functions.get(name)), i);\n }\n }\n // Find an event definition by any means necessary (unless it is ambiguous)\n #getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of this.#events.values()) {\n if (eventTopic === fragment.topicHash) {\n return fragment;\n }\n }\n return null;\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of this.#events) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n return null;\n }\n if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n assertArgument(false, `ambiguous event description (i.e. matches ${matchStr})`, \"key\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = this.#events.get(EventFragment.from(key).format());\n if (result) {\n return result;\n }\n return null;\n }\n /**\n * Get the event name for %%key%%, which may be a topic hash,\n * event name or event signature that belongs to the ABI.\n */\n getEventName(key) {\n const fragment = this.#getEvent(key, null, false);\n assertArgument(fragment, \"no matching event\", \"key\", key);\n return fragment.name;\n }\n /**\n * Returns true if %%key%% (an event topic hash, event name or\n * event signature) is present in the ABI.\n *\n * In the case of an event name, the name may be ambiguous, so\n * accessing the [[EventFragment]] may require refinement.\n */\n hasEvent(key) {\n return !!this.#getEvent(key, null, false);\n }\n /**\n * Get the [[EventFragment]] for %%key%%, which may be a topic hash,\n * event name or event signature that belongs to the ABI.\n *\n * If %%values%% is provided, it will use the Typed API to handle\n * ambiguous cases where multiple events match by name.\n *\n * If the %%key%% and %%values%% do not refine to a single event in\n * the ABI, this will throw.\n */\n getEvent(key, values) {\n return this.#getEvent(key, values || null, true);\n }\n /**\n * Iterate over all events, calling %%callback%%, sorted by their name.\n */\n forEachEvent(callback) {\n const names = Array.from(this.#events.keys());\n names.sort((a, b) => a.localeCompare(b));\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n callback((this.#events.get(name)), i);\n }\n }\n /**\n * Get the [[ErrorFragment]] for %%key%%, which may be an error\n * selector, error name or error signature that belongs to the ABI.\n *\n * If %%values%% is provided, it will use the Typed API to handle\n * ambiguous cases where multiple errors match by name.\n *\n * If the %%key%% and %%values%% do not refine to a single error in\n * the ABI, this will throw.\n */\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n if (BuiltinErrors[selector]) {\n return ErrorFragment.from(BuiltinErrors[selector].signature);\n }\n for (const fragment of this.#errors.values()) {\n if (selector === fragment.selector) {\n return fragment;\n }\n }\n return null;\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of this.#errors) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n if (key === \"Error\") {\n return ErrorFragment.from(\"error Error(string)\");\n }\n if (key === \"Panic\") {\n return ErrorFragment.from(\"error Panic(uint256)\");\n }\n return null;\n }\n else if (matching.length > 1) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n assertArgument(false, `ambiguous error description (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n key = ErrorFragment.from(key).format();\n if (key === \"Error(string)\") {\n return ErrorFragment.from(\"error Error(string)\");\n }\n if (key === \"Panic(uint256)\") {\n return ErrorFragment.from(\"error Panic(uint256)\");\n }\n const result = this.#errors.get(key);\n if (result) {\n return result;\n }\n return null;\n }\n /**\n * Iterate over all errors, calling %%callback%%, sorted by their name.\n */\n forEachError(callback) {\n const names = Array.from(this.#errors.keys());\n names.sort((a, b) => a.localeCompare(b));\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n callback((this.#errors.get(name)), i);\n }\n }\n // Get the 4-byte selector used by Solidity to identify a function\n /*\ngetSelector(fragment: ErrorFragment | FunctionFragment): string {\n if (typeof(fragment) === \"string\") {\n const matches: Array<Fragment> = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(<string>fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n\n return dataSlice(id(fragment.format()), 0, 4);\n}\n */\n // Get the 32-byte topic hash used by Solidity to identify an event\n /*\n getEventTopic(fragment: EventFragment): string {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n */\n _decodeParams(params, data) {\n return this.#abiCoder.decode(params, data);\n }\n _encodeParams(params, values) {\n return this.#abiCoder.encode(params, values);\n }\n /**\n * Encodes a ``tx.data`` object for deploying the Contract with\n * the %%values%% as the constructor arguments.\n */\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n /**\n * Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n * specified error (see [[getError]] for valid values for\n * %%key%%).\n *\n * Most developers should prefer the [[parseCallResult]] method instead,\n * which will automatically detect a ``CALL_EXCEPTION`` and throw the\n * corresponding error.\n */\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n const f = this.getError(fragment);\n assertArgument(f, \"unknown error\", \"fragment\", fragment);\n fragment = f;\n }\n assertArgument(dataSlice(data, 0, 4) === fragment.selector, `data signature does not match error ${fragment.name}.`, \"data\", data);\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n /**\n * Encodes the transaction revert data for a call result that\n * reverted from the the Contract with the sepcified %%error%%\n * (see [[getError]] for valid values for %%fragment%%) with the %%values%%.\n *\n * This is generally not used by most developers, unless trying to mock\n * a result from a Contract.\n */\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getError(fragment);\n assertArgument(f, \"unknown error\", \"fragment\", fragment);\n fragment = f;\n }\n return concat([\n fragment.selector,\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n /**\n * Decodes the %%data%% from a transaction ``tx.data`` for\n * the function specified (see [[getFunction]] for valid values\n * for %%fragment%%).\n *\n * Most developers should prefer the [[parseTransaction]] method\n * instead, which will automatically detect the fragment.\n */\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n assertArgument(dataSlice(data, 0, 4) === fragment.selector, `data signature does not match function ${fragment.name}.`, \"data\", data);\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n /**\n * Encodes the ``tx.data`` for a transaction that calls the function\n * specified (see [[getFunction]] for valid values for %%fragment%%) with\n * the %%values%%.\n */\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n return concat([\n fragment.selector,\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n /**\n * Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n * specified function (see [[getFunction]] for valid values for\n * %%key%%).\n *\n * Most developers should prefer the [[parseCallResult]] method instead,\n * which will automatically detect a ``CALL_EXCEPTION`` and throw the\n * corresponding error.\n */\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n let message = \"invalid length for result data\";\n const bytes = getBytesCopy(data);\n if ((bytes.length % 32) === 0) {\n try {\n return this.#abiCoder.decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n assert(false, message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(_data, tx) {\n const data = getBytes(_data, \"data\");\n const error = AbiCoder.getBuiltinCallException(\"call\", tx, data);\n // Not a built-in error; try finding a custom error\n const customPrefix = \"execution reverted (unknown custom error)\";\n if (error.message.startsWith(customPrefix)) {\n const selector = hexlify(data.slice(0, 4));\n const ef = this.getError(selector);\n if (ef) {\n try {\n const args = this.#abiCoder.decode(ef.inputs, data.slice(4));\n error.revert = {\n name: ef.name, signature: ef.format(), args\n };\n error.reason = error.revert.signature;\n error.message = `execution reverted: ${error.reason}`;\n }\n catch (e) {\n error.message = `execution reverted (coult not decode custom error)`;\n }\n }\n }\n // Add the invocation, if available\n const parsed = this.parseTransaction(tx);\n if (parsed) {\n error.invocation = {\n method: parsed.name,\n signature: parsed.signature,\n args: parsed.args\n };\n }\n return error;\n }\n /**\n * Encodes the result data (e.g. from an ``eth_call``) for the\n * specified function (see [[getFunction]] for valid values\n * for %%fragment%%) with %%values%%.\n *\n * This is generally not used by most developers, unless trying to mock\n * a result from a Contract.\n */\n encodeFunctionResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n return hexlify(this.#abiCoder.encode(fragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array<ParamType>, values: ReadonlyArray<any>, processfunc: (type: string, value: any) => Promise<any>): Promise<Array<any>> {\n const promises: Array<Promise<>> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array<ParamType>, values: ReadonlyArray<any>) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array<any> = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getEvent(fragment);\n assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n fragment = f;\n }\n assert(values.length <= fragment.inputs.length, `too many arguments for ${fragment.format()}`, \"UNEXPECTED_ARGUMENT\", { count: values.length, expectedCount: fragment.inputs.length });\n const topics = [];\n if (!fragment.anonymous) {\n topics.push(fragment.topicHash);\n }\n // @TODO: Use the coders for this; to properly support tuples, etc.\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n if (param.type === \"bool\" && typeof (value) === \"boolean\") {\n value = (value ? \"0x01\" : \"0x00\");\n }\n else if (param.type.match(/^u?int/)) {\n value = toBeHex(value); // @TODO: Should this toTwos??\n }\n else if (param.type.match(/^bytes/)) {\n value = zeroPadBytes(value, 32);\n }\n else if (param.type === \"address\") {\n // Check addresses are valid\n this.#abiCoder.encode([\"address\"], [value]);\n }\n return zeroPadValue(hexlify(value), 32);\n };\n values.forEach((value, index) => {\n const param = fragment.inputs[index];\n if (!param.indexed) {\n assertArgument(value == null, \"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n assertArgument(false, \"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getEvent(fragment);\n assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n fragment = f;\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!fragment.anonymous) {\n topics.push(fragment.topicHash);\n }\n assertArgument(values.length === fragment.inputs.length, \"event arguments/values mismatch\", \"values\", values);\n fragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(this.#abiCoder.encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: this.#abiCoder.encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(fragment, data, topics) {\n if (typeof (fragment) === \"string\") {\n const f = this.getEvent(fragment);\n assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n fragment = f;\n }\n if (topics != null && !fragment.anonymous) {\n const eventTopic = fragment.topicHash;\n assertArgument(isHexString(topics[0], 32) && topics[0].toLowerCase() === eventTopic, \"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n fragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.from({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, concat(topics)) : null;\n const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true);\n //const result: (Array<any> & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n fragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n /**\n * Parses a transaction, finding the matching function and extracts\n * the parameter values along with other useful function details.\n *\n * If the matching function cannot be found, return null.\n */\n parseTransaction(tx) {\n const data = getBytes(tx.data, \"tx.data\");\n const value = getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = this.#abiCoder.decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, fragment.selector, args, value);\n }\n parseCallResult(data) {\n throw new Error(\"@TODO\");\n }\n /**\n * Parses a receipt log, finding the matching event and extracts\n * the parameter values along with other useful event details.\n *\n * If the matching event cannot be found, returns null.\n */\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, fragment.topicHash, this.decodeEventLog(fragment, log.data, log.topics));\n }\n /**\n * Parses a revert data, finding the matching error and extracts\n * the parameter values along with other useful error details.\n *\n * If the matching error cannot be found, returns null.\n */\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = this.#abiCoder.decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, fragment.selector, args);\n }\n /**\n * Creates a new [[Interface]] from the ABI %%value%%.\n *\n * The %%value%% may be provided as an existing [[Interface]] object,\n * a JSON-encoded ABI or any Human-Readable ABI format.\n */\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // An Interface; possibly from another v6 instance\n if (typeof (value.formatJson) === \"function\") {\n return new Interface(value.formatJson());\n }\n // A legacy Interface; from an older version\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(\"json\"));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n//# sourceMappingURL=interface.js.map","//import { resolveAddress } from \"@ethersproject/address\";\nimport { defineProperties, getBigInt, getNumber, hexlify, isBytesLike, resolveProperties, assert, assertArgument, isError, makeError } from \"../utils/index.js\";\nimport { accessListify } from \"../transaction/index.js\";\nconst BN_0 = BigInt(0);\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? <T extends FeeData = { }> implements Required<T>\n/**\n * A **FeeData** wraps all the fee-related values associated with\n * the network.\n */\nexport class FeeData {\n /**\n * The gas price for legacy networks.\n */\n gasPrice;\n /**\n * The maximum fee to pay per gas.\n *\n * The base fee per gas is defined by the network and based on\n * congestion, increasing the cost during times of heavy load\n * and lowering when less busy.\n *\n * The actual fee per gas will be the base fee for the block\n * and the priority fee, up to the max fee per gas.\n *\n * This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n */\n maxFeePerGas;\n /**\n * The additional amout to pay per gas to encourage a validator\n * to include the transaction.\n *\n * The purpose of this is to compensate the validator for the\n * adjusted risk for including a given transaction.\n *\n * This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n */\n maxPriorityFeePerGas;\n /**\n * Creates a new FeeData for %%gasPrice%%, %%maxFeePerGas%% and\n * %%maxPriorityFeePerGas%%.\n */\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n /**\n * Returns a JSON-friendly value.\n */\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\n/**\n * Returns a copy of %%req%% with all properties coerced to their strict\n * types.\n */\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value\".split(/,/);\n for (const key of bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key of numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (req.authorizationList) {\n result.authorizationList = req.authorizationList.slice();\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipRead = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n if (\"blobVersionedHashes\" in req && req.blobVersionedHashes) {\n result.blobVersionedHashes = req.blobVersionedHashes.slice();\n }\n if (\"kzg\" in req) {\n result.kzg = req.kzg;\n }\n if (\"blobs\" in req && req.blobs) {\n result.blobs = req.blobs.map((b) => {\n if (isBytesLike(b)) {\n return hexlify(b);\n }\n return Object.assign({}, b);\n });\n }\n return result;\n}\n/**\n * A **Block** represents the data associated with a full block on\n * Ethereum.\n */\nexport class Block {\n /**\n * The provider connected to the block used to fetch additional details\n * if necessary.\n */\n provider;\n /**\n * The block number, sometimes called the block height. This is a\n * sequential number that is one higher than the parent block.\n */\n number;\n /**\n * The block hash.\n *\n * This hash includes all properties, so can be safely used to identify\n * an exact set of block properties.\n */\n hash;\n /**\n * The timestamp for this block, which is the number of seconds since\n * epoch that this block was included.\n */\n timestamp;\n /**\n * The block hash of the parent block.\n */\n parentHash;\n /**\n * The hash tree root of the parent beacon block for the given\n * execution block. See [[link-eip-4788]].\n */\n parentBeaconBlockRoot;\n /**\n * The nonce.\n *\n * On legacy networks, this is the random number inserted which\n * permitted the difficulty target to be reached.\n */\n nonce;\n /**\n * The difficulty target.\n *\n * On legacy networks, this is the proof-of-work target required\n * for a block to meet the protocol rules to be included.\n *\n * On modern networks, this is a random number arrived at using\n * randao. @TODO: Find links?\n */\n difficulty;\n /**\n * The total gas limit for this block.\n */\n gasLimit;\n /**\n * The total gas used in this block.\n */\n gasUsed;\n /**\n * The root hash for the global state after applying changes\n * in this block.\n */\n stateRoot;\n /**\n * The hash of the transaction receipts trie.\n */\n receiptsRoot;\n /**\n * The total amount of blob gas consumed by the transactions\n * within the block. See [[link-eip-4844]].\n */\n blobGasUsed;\n /**\n * The running total of blob gas consumed in excess of the\n * target, prior to the block. See [[link-eip-4844]].\n */\n excessBlobGas;\n /**\n * The miner coinbase address, wihch receives any subsidies for\n * including this block.\n */\n miner;\n /**\n * The latest RANDAO mix of the post beacon state of\n * the previous block.\n */\n prevRandao;\n /**\n * Any extra data the validator wished to include.\n */\n extraData;\n /**\n * The base fee per gas that all transactions in this block were\n * charged.\n *\n * This adjusts after each block, depending on how congested the network\n * is.\n */\n baseFeePerGas;\n #transactions;\n /**\n * Create a new **Block** object.\n *\n * This should generally not be necessary as the unless implementing a\n * low-level library.\n */\n constructor(block, provider) {\n this.#transactions = block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\") {\n return new TransactionResponse(tx, provider);\n }\n return tx;\n });\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n parentBeaconBlockRoot: block.parentBeaconBlockRoot,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n blobGasUsed: block.blobGasUsed,\n excessBlobGas: block.excessBlobGas,\n miner: block.miner,\n prevRandao: getValue(block.prevRandao),\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas),\n stateRoot: block.stateRoot,\n receiptsRoot: block.receiptsRoot,\n });\n }\n /**\n * Returns the list of transaction hashes, in the order\n * they were executed within the block.\n */\n get transactions() {\n return this.#transactions.map((tx) => {\n if (typeof (tx) === \"string\") {\n return tx;\n }\n return tx.hash;\n });\n }\n /**\n * Returns the complete transactions, in the order they\n * were executed within the block.\n *\n * This is only available for blocks which prefetched\n * transactions, by passing ``true`` to %%prefetchTxs%%\n * into [[Provider-getBlock]].\n */\n get prefetchedTransactions() {\n const txs = this.#transactions.slice();\n // Doesn't matter...\n if (txs.length === 0) {\n return [];\n }\n // Make sure we prefetched the transactions\n assert(typeof (txs[0]) === \"object\", \"transactions were not prefetched with block request\", \"UNSUPPORTED_OPERATION\", {\n operation: \"transactionResponses()\"\n });\n return txs;\n }\n /**\n * Returns a JSON-friendly value.\n */\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, prevRandao, nonce, number, parentHash, parentBeaconBlockRoot, stateRoot, receiptsRoot, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n blobGasUsed: toJson(this.blobGasUsed),\n excessBlobGas: toJson(this.excessBlobGas),\n hash, miner, prevRandao, nonce, number, parentHash, timestamp,\n parentBeaconBlockRoot, stateRoot, receiptsRoot,\n transactions,\n };\n }\n [Symbol.iterator]() {\n let index = 0;\n const txs = this.transactions;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: txs[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n /**\n * The number of transactions in this block.\n */\n get length() { return this.#transactions.length; }\n /**\n * The [[link-js-date]] this block was included at.\n */\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n /**\n * Get the transaction at %%indexe%% within this block.\n */\n async getTransaction(indexOrHash) {\n // Find the internal value by its index or hash\n let tx = undefined;\n if (typeof (indexOrHash) === \"number\") {\n tx = this.#transactions[indexOrHash];\n }\n else {\n const hash = indexOrHash.toLowerCase();\n for (const v of this.#transactions) {\n if (typeof (v) === \"string\") {\n if (v !== hash) {\n continue;\n }\n tx = v;\n break;\n }\n else {\n if (v.hash !== hash) {\n continue;\n }\n tx = v;\n break;\n }\n }\n }\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n /**\n * If a **Block** was fetched with a request to include the transactions\n * this will allow synchronous access to those transactions.\n *\n * If the transactions were not prefetched, this will throw.\n */\n getPrefetchedTransaction(indexOrHash) {\n const txs = this.prefetchedTransactions;\n if (typeof (indexOrHash) === \"number\") {\n return txs[indexOrHash];\n }\n indexOrHash = indexOrHash.toLowerCase();\n for (const tx of txs) {\n if (tx.hash === indexOrHash) {\n return tx;\n }\n }\n assertArgument(false, \"no matching transaction\", \"indexOrHash\", indexOrHash);\n }\n /**\n * Returns true if this block been mined. This provides a type guard\n * for all properties on a [[MinedBlock]].\n */\n isMined() { return !!this.hash; }\n /**\n * Returns true if this block is an [[link-eip-2930]] block.\n */\n isLondon() {\n return !!this.baseFeePerGas;\n }\n /**\n * @_ignore:\n */\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\n//////////////////////\n// Log\n/**\n * A **Log** in Ethereum represents an event that has been included in a\n * transaction using the ``LOG*`` opcodes, which are most commonly used by\n * Solidity's emit for announcing events.\n */\nexport class Log {\n /**\n * The provider connected to the log used to fetch additional details\n * if necessary.\n */\n provider;\n /**\n * The transaction hash of the transaction this log occurred in. Use the\n * [[Log-getTransaction]] to get the [[TransactionResponse]].\n */\n transactionHash;\n /**\n * The block hash of the block this log occurred in. Use the\n * [[Log-getBlock]] to get the [[Block]].\n */\n blockHash;\n /**\n * The block number of the block this log occurred in. It is preferred\n * to use the [[Block-hash]] when fetching the related [[Block]],\n * since in the case of an orphaned block, the block at that height may\n * have changed.\n */\n blockNumber;\n /**\n * If the **Log** represents a block that was removed due to an orphaned\n * block, this will be true.\n *\n * This can only happen within an orphan event listener.\n */\n removed;\n /**\n * The address of the contract that emitted this log.\n */\n address;\n /**\n * The data included in this log when it was emitted.\n */\n data;\n /**\n * The indexed topics included in this log when it was emitted.\n *\n * All topics are included in the bloom filters, so they can be\n * efficiently filtered using the [[Provider-getLogs]] method.\n */\n topics;\n /**\n * The index within the block this log occurred at. This is generally\n * not useful to developers, but can be used with the various roots\n * to proof inclusion within a block.\n */\n index;\n /**\n * The index within the transaction of this log.\n */\n transactionIndex;\n /**\n * @_ignore:\n */\n constructor(log, provider) {\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n /**\n * Returns a JSON-compatible object.\n */\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n /**\n * Returns the block that this log occurred in.\n */\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n assert(!!block, \"failed to find transaction\", \"UNKNOWN_ERROR\", {});\n return block;\n }\n /**\n * Returns the transaction that this log occurred in.\n */\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.transactionHash);\n assert(!!tx, \"failed to find transaction\", \"UNKNOWN_ERROR\", {});\n return tx;\n }\n /**\n * Returns the transaction receipt fot the transaction that this\n * log occurred in.\n */\n async getTransactionReceipt() {\n const receipt = await this.provider.getTransactionReceipt(this.transactionHash);\n assert(!!receipt, \"failed to find transaction receipt\", \"UNKNOWN_ERROR\", {});\n return receipt;\n }\n /**\n * @_ignore:\n */\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\n//////////////////////\n// Transaction Receipt\n/*\nexport interface LegacyTransactionReceipt {\n byzantium: false;\n status: null;\n root: string;\n}\n\nexport interface ByzantiumTransactionReceipt {\n byzantium: true;\n status: number;\n root: null;\n}\n*/\n/**\n * A **TransactionReceipt** includes additional information about a\n * transaction that is only available after it has been mined.\n */\nexport class TransactionReceipt {\n /**\n * The provider connected to the log used to fetch additional details\n * if necessary.\n */\n provider;\n /**\n * The address the transaction was sent to.\n */\n to;\n /**\n * The sender of the transaction.\n */\n from;\n /**\n * The address of the contract if the transaction was directly\n * responsible for deploying one.\n *\n * This is non-null **only** if the ``to`` is empty and the ``data``\n * was successfully executed as initcode.\n */\n contractAddress;\n /**\n * The transaction hash.\n */\n hash;\n /**\n * The index of this transaction within the block transactions.\n */\n index;\n /**\n * The block hash of the [[Block]] this transaction was included in.\n */\n blockHash;\n /**\n * The block number of the [[Block]] this transaction was included in.\n */\n blockNumber;\n /**\n * The bloom filter bytes that represent all logs that occurred within\n * this transaction. This is generally not useful for most developers,\n * but can be used to validate the included logs.\n */\n logsBloom;\n /**\n * The actual amount of gas used by this transaction.\n *\n * When creating a transaction, the amount of gas that will be used can\n * only be approximated, but the sender must pay the gas fee for the\n * entire gas limit. After the transaction, the difference is refunded.\n */\n gasUsed;\n /**\n * The gas used for BLObs. See [[link-eip-4844]].\n */\n blobGasUsed;\n /**\n * The amount of gas used by all transactions within the block for this\n * and all transactions with a lower ``index``.\n *\n * This is generally not useful for developers but can be used to\n * validate certain aspects of execution.\n */\n cumulativeGasUsed;\n /**\n * The actual gas price used during execution.\n *\n * Due to the complexity of [[link-eip-1559]] this value can only\n * be caluclated after the transaction has been mined, snce the base\n * fee is protocol-enforced.\n */\n gasPrice;\n /**\n * The price paid per BLOB in gas. See [[link-eip-4844]].\n */\n blobGasPrice;\n /**\n * The [[link-eip-2718]] transaction type.\n */\n type;\n //readonly byzantium!: boolean;\n /**\n * The status of this transaction, indicating success (i.e. ``1``) or\n * a revert (i.e. ``0``).\n *\n * This is available in post-byzantium blocks, but some backends may\n * backfill this value.\n */\n status;\n /**\n * The root hash of this transaction.\n *\n * This is no present and was only included in pre-byzantium blocks, but\n * could be used to validate certain parts of the receipt.\n */\n root;\n #logs;\n /**\n * @_ignore:\n */\n constructor(tx, provider) {\n this.#logs = Object.freeze(tx.logs.map((log) => {\n return new Log(log, provider);\n }));\n let gasPrice = BN_0;\n if (tx.effectiveGasPrice != null) {\n gasPrice = tx.effectiveGasPrice;\n }\n else if (tx.gasPrice != null) {\n gasPrice = tx.gasPrice;\n }\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n blobGasUsed: tx.blobGasUsed,\n gasPrice,\n blobGasPrice: tx.blobGasPrice,\n type: tx.type,\n //byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n /**\n * The logs for this transaction.\n */\n get logs() { return this.#logs; }\n /**\n * Returns a JSON-compatible representation.\n */\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, //byzantium, \n status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber,\n //byzantium, \n contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n blobGasUsed: toJson(this.blobGasUsed),\n blobGasPrice: toJson(this.blobGasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n /**\n * @_ignore:\n */\n get length() { return this.logs.length; }\n [Symbol.iterator]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n /**\n * The total fee for this transaction, in wei.\n */\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n /**\n * Resolves to the block this transaction occurred in.\n */\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n /**\n * Resolves to the transaction this transaction occurred in.\n */\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n /**\n * Resolves to the return value of the execution of this transaction.\n *\n * Support for this feature is limited, as it requires an archive node\n * with the ``debug_`` or ``trace_`` API enabled.\n */\n async getResult() {\n return (await this.provider.getTransactionResult(this.hash));\n }\n /**\n * Resolves to the number of confirmations this transaction has.\n */\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n /**\n * @_ignore:\n */\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n /**\n * @_ignore:\n */\n reorderedEvent(other) {\n assert(!other || other.isMined(), \"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"reorderedEvent(other)\" });\n return createReorderedTransactionFilter(this, other);\n }\n}\n/**\n * A **TransactionResponse** includes all properties about a transaction\n * that was sent to the network, which may or may not be included in a\n * block.\n *\n * The [[TransactionResponse-isMined]] can be used to check if the\n * transaction has been mined as well as type guard that the otherwise\n * possibly ``null`` properties are defined.\n */\nexport class TransactionResponse {\n /**\n * The provider this is connected to, which will influence how its\n * methods will resolve its async inspection methods.\n */\n provider;\n /**\n * The block number of the block that this transaction was included in.\n *\n * This is ``null`` for pending transactions.\n */\n blockNumber;\n /**\n * The blockHash of the block that this transaction was included in.\n *\n * This is ``null`` for pending transactions.\n */\n blockHash;\n /**\n * The index within the block that this transaction resides at.\n */\n index;\n /**\n * The transaction hash.\n */\n hash;\n /**\n * The [[link-eip-2718]] transaction envelope type. This is\n * ``0`` for legacy transactions types.\n */\n type;\n /**\n * The receiver of this transaction.\n *\n * If ``null``, then the transaction is an initcode transaction.\n * This means the result of executing the [[data]] will be deployed\n * as a new contract on chain (assuming it does not revert) and the\n * address may be computed using [[getCreateAddress]].\n */\n to;\n /**\n * The sender of this transaction. It is implicitly computed\n * from the transaction pre-image hash (as the digest) and the\n * [[signature]] using ecrecover.\n */\n from;\n /**\n * The nonce, which is used to prevent replay attacks and offer\n * a method to ensure transactions from a given sender are explicitly\n * ordered.\n *\n * When sending a transaction, this must be equal to the number of\n * transactions ever sent by [[from]].\n */\n nonce;\n /**\n * The maximum units of gas this transaction can consume. If execution\n * exceeds this, the entries transaction is reverted and the sender\n * is charged for the full amount, despite not state changes being made.\n */\n gasLimit;\n /**\n * The gas price can have various values, depending on the network.\n *\n * In modern networks, for transactions that are included this is\n * the //effective gas price// (the fee per gas that was actually\n * charged), while for transactions that have not been included yet\n * is the [[maxFeePerGas]].\n *\n * For legacy transactions, or transactions on legacy networks, this\n * is the fee that will be charged per unit of gas the transaction\n * consumes.\n */\n gasPrice;\n /**\n * The maximum priority fee (per unit of gas) to allow a\n * validator to charge the sender. This is inclusive of the\n * [[maxFeeFeePerGas]].\n */\n maxPriorityFeePerGas;\n /**\n * The maximum fee (per unit of gas) to allow this transaction\n * to charge the sender.\n */\n maxFeePerGas;\n /**\n * The [[link-eip-4844]] max fee per BLOb gas.\n */\n maxFeePerBlobGas;\n /**\n * The data.\n */\n data;\n /**\n * The value, in wei. Use [[formatEther]] to format this value\n * as ether.\n */\n value;\n /**\n * The chain ID.\n */\n chainId;\n /**\n * The signature.\n */\n signature;\n /**\n * The [[link-eip-2930]] access list for transaction types that\n * support it, otherwise ``null``.\n */\n accessList;\n /**\n * The [[link-eip-4844]] BLOb versioned hashes.\n */\n blobVersionedHashes;\n /**\n * The [[link-eip-7702]] authorizations (if any).\n */\n authorizationList;\n #startBlock;\n /**\n * @_ignore:\n */\n constructor(tx, provider) {\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.maxFeePerBlobGas = (tx.maxFeePerBlobGas != null) ? tx.maxFeePerBlobGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n this.blobVersionedHashes = (tx.blobVersionedHashes != null) ? tx.blobVersionedHashes : null;\n this.authorizationList = (tx.authorizationList != null) ? tx.authorizationList : null;\n this.#startBlock = -1;\n }\n /**\n * Returns a JSON-compatible representation of this transaction.\n */\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList, blobVersionedHashes } = this;\n return {\n _type: \"TransactionResponse\",\n accessList, blockNumber, blockHash,\n blobVersionedHashes,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n maxFeePerBlobGas: toJson(this.maxFeePerBlobGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n /**\n * Resolves to the Block that this transaction was included in.\n *\n * This will return null if the transaction has not been included yet.\n */\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n /**\n * Resolves to this transaction being re-requested from the\n * provider. This can be used if you have an unmined transaction\n * and wish to get an up-to-date populated instance.\n */\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n /**\n * Resolve to the number of confirmations this transaction has.\n */\n async confirmations() {\n if (this.blockNumber == null) {\n const { tx, blockNumber } = await resolveProperties({\n tx: this.getTransaction(),\n blockNumber: this.provider.getBlockNumber()\n });\n // Not mined yet...\n if (tx == null || tx.blockNumber == null) {\n return 0;\n }\n return blockNumber - tx.blockNumber + 1;\n }\n const blockNumber = await this.provider.getBlockNumber();\n return blockNumber - this.blockNumber + 1;\n }\n /**\n * Resolves once this transaction has been mined and has\n * %%confirms%% blocks including it (default: ``1``) with an\n * optional %%timeout%%.\n *\n * This can resolve to ``null`` only if %%confirms%% is ``0``\n * and the transaction has not been mined, otherwise this will\n * wait until enough confirmations have completed.\n */\n async wait(_confirms, _timeout) {\n const confirms = (_confirms == null) ? 1 : _confirms;\n const timeout = (_timeout == null) ? 0 : _timeout;\n let startBlock = this.#startBlock;\n let nextScan = -1;\n let stopScanning = (startBlock === -1) ? true : false;\n const checkReplacement = async () => {\n // Get the current transaction count for this sender\n if (stopScanning) {\n return null;\n }\n const { blockNumber, nonce } = await resolveProperties({\n blockNumber: this.provider.getBlockNumber(),\n nonce: this.provider.getTransactionCount(this.from)\n });\n // No transaction or our nonce has not been mined yet; but we\n // can start scanning later when we do start\n if (nonce < this.nonce) {\n startBlock = blockNumber;\n return;\n }\n // We were mined; no replacement\n if (stopScanning) {\n return null;\n }\n const mined = await this.getTransaction();\n if (mined && mined.blockNumber != null) {\n return;\n }\n // We were replaced; start scanning for that transaction\n // Starting to scan; look back a few extra blocks for safety\n if (nextScan === -1) {\n nextScan = startBlock - 3;\n if (nextScan < this.#startBlock) {\n nextScan = this.#startBlock;\n }\n }\n while (nextScan <= blockNumber) {\n // Get the next block to scan\n if (stopScanning) {\n return null;\n }\n const block = await this.provider.getBlock(nextScan, true);\n // This should not happen; but we'll try again shortly\n if (block == null) {\n return;\n }\n // We were mined; no replacement\n for (const hash of block) {\n if (hash === this.hash) {\n return;\n }\n }\n // Search for the transaction that replaced us\n for (let i = 0; i < block.length; i++) {\n const tx = await block.getTransaction(i);\n if (tx.from === this.from && tx.nonce === this.nonce) {\n // Get the receipt\n if (stopScanning) {\n return null;\n }\n const receipt = await this.provider.getTransactionReceipt(tx.hash);\n // This should not happen; but we'll try again shortly\n if (receipt == null) {\n return;\n }\n // We will retry this on the next block (this case could be optimized)\n if ((blockNumber - receipt.blockNumber + 1) < confirms) {\n return;\n }\n // The reason we were replaced\n let reason = \"replaced\";\n if (tx.data === this.data && tx.to === this.to && tx.value === this.value) {\n reason = \"repriced\";\n }\n else if (tx.data === \"0x\" && tx.from === tx.to && tx.value === BN_0) {\n reason = \"cancelled\";\n }\n assert(false, \"transaction was replaced\", \"TRANSACTION_REPLACED\", {\n cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n reason,\n replacement: tx.replaceableTransaction(startBlock),\n hash: tx.hash,\n receipt\n });\n }\n }\n nextScan++;\n }\n return;\n };\n const checkReceipt = (receipt) => {\n if (receipt == null || receipt.status !== 0) {\n return receipt;\n }\n assert(false, \"transaction execution reverted\", \"CALL_EXCEPTION\", {\n action: \"sendTransaction\",\n data: null, reason: null, invocation: null, revert: null,\n transaction: {\n to: receipt.to,\n from: receipt.from,\n data: \"\" // @TODO: in v7, split out sendTransaction properties\n }, receipt\n });\n };\n const receipt = await this.provider.getTransactionReceipt(this.hash);\n if (confirms === 0) {\n return checkReceipt(receipt);\n }\n if (receipt) {\n if (confirms === 1 || (await receipt.confirmations()) >= confirms) {\n return checkReceipt(receipt);\n }\n }\n else {\n // Check for a replacement; throws if a replacement was found\n await checkReplacement();\n // Allow null only when the confirms is 0\n if (confirms === 0) {\n return null;\n }\n }\n const waiter = new Promise((resolve, reject) => {\n // List of things to cancel when we have a result (one way or the other)\n const cancellers = [];\n const cancel = () => { cancellers.forEach((c) => c()); };\n // On cancel, stop scanning for replacements\n cancellers.push(() => { stopScanning = true; });\n // Set up any timeout requested\n if (timeout > 0) {\n const timer = setTimeout(() => {\n cancel();\n reject(makeError(\"wait for transaction timeout\", \"TIMEOUT\"));\n }, timeout);\n cancellers.push(() => { clearTimeout(timer); });\n }\n const txListener = async (receipt) => {\n // Done; return it!\n if ((await receipt.confirmations()) >= confirms) {\n cancel();\n try {\n resolve(checkReceipt(receipt));\n }\n catch (error) {\n reject(error);\n }\n }\n };\n cancellers.push(() => { this.provider.off(this.hash, txListener); });\n this.provider.on(this.hash, txListener);\n // We support replacement detection; start checking\n if (startBlock >= 0) {\n const replaceListener = async () => {\n try {\n // Check for a replacement; this throws only if one is found\n await checkReplacement();\n }\n catch (error) {\n // We were replaced (with enough confirms); re-throw the error\n if (isError(error, \"TRANSACTION_REPLACED\")) {\n cancel();\n reject(error);\n return;\n }\n }\n // Rescheudle a check on the next block\n if (!stopScanning) {\n this.provider.once(\"block\", replaceListener);\n }\n };\n cancellers.push(() => { this.provider.off(\"block\", replaceListener); });\n this.provider.once(\"block\", replaceListener);\n }\n });\n return await waiter;\n }\n /**\n * Returns ``true`` if this transaction has been included.\n *\n * This is effective only as of the time the TransactionResponse\n * was instantiated. To get up-to-date information, use\n * [[getTransaction]].\n *\n * This provides a Type Guard that this transaction will have\n * non-null property values for properties that are null for\n * unmined transactions.\n */\n isMined() {\n return (this.blockHash != null);\n }\n /**\n * Returns true if the transaction is a legacy (i.e. ``type == 0``)\n * transaction.\n *\n * This provides a Type Guard that this transaction will have\n * the ``null``-ness for hardfork-specific properties set correctly.\n */\n isLegacy() {\n return (this.type === 0);\n }\n /**\n * Returns true if the transaction is a Berlin (i.e. ``type == 1``)\n * transaction. See [[link-eip-2070]].\n *\n * This provides a Type Guard that this transaction will have\n * the ``null``-ness for hardfork-specific properties set correctly.\n */\n isBerlin() {\n return (this.type === 1);\n }\n /**\n * Returns true if the transaction is a London (i.e. ``type == 2``)\n * transaction. See [[link-eip-1559]].\n *\n * This provides a Type Guard that this transaction will have\n * the ``null``-ness for hardfork-specific properties set correctly.\n */\n isLondon() {\n return (this.type === 2);\n }\n /**\n * Returns true if hte transaction is a Cancun (i.e. ``type == 3``)\n * transaction. See [[link-eip-4844]].\n */\n isCancun() {\n return (this.type === 3);\n }\n /**\n * Returns a filter which can be used to listen for orphan events\n * that evict this transaction.\n */\n removedEvent() {\n assert(this.isMined(), \"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n return createRemovedTransactionFilter(this);\n }\n /**\n * Returns a filter which can be used to listen for orphan events\n * that re-order this event against %%other%%.\n */\n reorderedEvent(other) {\n assert(this.isMined(), \"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n assert(!other || other.isMined(), \"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n return createReorderedTransactionFilter(this, other);\n }\n /**\n * Returns a new TransactionResponse instance which has the ability to\n * detect (and throw an error) if the transaction is replaced, which\n * will begin scanning at %%startBlock%%.\n *\n * This should generally not be used by developers and is intended\n * primarily for internal use. Setting an incorrect %%startBlock%% can\n * have devastating performance consequences if used incorrectly.\n */\n replaceableTransaction(startBlock) {\n assertArgument(Number.isInteger(startBlock) && startBlock >= 0, \"invalid startBlock\", \"startBlock\", startBlock);\n const tx = new TransactionResponse(this, this.provider);\n tx.#startBlock = startBlock;\n return tx;\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\n//# sourceMappingURL=provider.js.map","// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport { Log, TransactionReceipt, TransactionResponse } from \"../providers/provider.js\";\nimport { defineProperties, EventPayload } from \"../utils/index.js\";\n/**\n * An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class EventLog extends Log {\n /**\n * The Contract Interface.\n */\n interface;\n /**\n * The matching event.\n */\n fragment;\n /**\n * The parsed arguments passed to the event by ``emit``.\n */\n args;\n /**\n * @_ignore:\n */\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n /**\n * The name of the event.\n */\n get eventName() { return this.fragment.name; }\n /**\n * The signature of the event.\n */\n get eventSignature() { return this.fragment.format(); }\n}\n/**\n * An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class UndecodedEventLog extends Log {\n /**\n * The error encounted when trying to decode the log.\n */\n error;\n /**\n * @_ignore:\n */\n constructor(log, error) {\n super(log, log.provider);\n defineProperties(this, { error });\n }\n}\n/**\n * A **ContractTransactionReceipt** includes the parsed logs from a\n * [[TransactionReceipt]].\n */\nexport class ContractTransactionReceipt extends TransactionReceipt {\n #iface;\n /**\n * @_ignore:\n */\n constructor(iface, provider, tx) {\n super(tx, provider);\n this.#iface = iface;\n }\n /**\n * The parsed logs for any [[Log]] which has a matching event in the\n * Contract ABI.\n */\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? this.#iface.getEvent(log.topics[0]) : null;\n if (fragment) {\n try {\n return new EventLog(log, this.#iface, fragment);\n }\n catch (error) {\n return new UndecodedEventLog(log, error);\n }\n }\n return log;\n });\n }\n}\n/**\n * A **ContractTransactionResponse** will return a\n * [[ContractTransactionReceipt]] when waited on.\n */\nexport class ContractTransactionResponse extends TransactionResponse {\n #iface;\n /**\n * @_ignore:\n */\n constructor(iface, provider, tx) {\n super(tx, provider);\n this.#iface = iface;\n }\n /**\n * Resolves once this transaction has been mined and has\n * %%confirms%% blocks including it (default: ``1``) with an\n * optional %%timeout%%.\n *\n * This can resolve to ``null`` only if %%confirms%% is ``0``\n * and the transaction has not been mined, otherwise this will\n * wait until enough confirmations have completed.\n */\n async wait(confirms, timeout) {\n const receipt = await super.wait(confirms, timeout);\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(this.#iface, this.provider, receipt);\n }\n}\n/**\n * A **ContractUnknownEventPayload** is included as the last parameter to\n * Contract Events when the event does not match any events in the ABI.\n */\nexport class ContractUnknownEventPayload extends EventPayload {\n /**\n * The log with no matching events.\n */\n log;\n /**\n * @_event:\n */\n constructor(contract, listener, filter, log) {\n super(contract, listener, filter);\n defineProperties(this, { log });\n }\n /**\n * Resolves to the block the event occured in.\n */\n async getBlock() {\n return await this.log.getBlock();\n }\n /**\n * Resolves to the transaction the event occured in.\n */\n async getTransaction() {\n return await this.log.getTransaction();\n }\n /**\n * Resolves to the transaction receipt the event occured in.\n */\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n/**\n * A **ContractEventPayload** is included as the last parameter to\n * Contract Events when the event is known.\n */\nexport class ContractEventPayload extends ContractUnknownEventPayload {\n /**\n * @_ignore:\n */\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter, new EventLog(_log, contract.interface, fragment));\n const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics);\n defineProperties(this, { args, fragment });\n }\n /**\n * The event name.\n */\n get eventName() {\n return this.fragment.name;\n }\n /**\n * The event signature.\n */\n get eventSignature() {\n return this.fragment.format();\n }\n}\n//# sourceMappingURL=wrappers.js.map","import { Interface, Typed } from \"../abi/index.js\";\nimport { isAddressable, resolveAddress } from \"../address/index.js\";\n// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport { copyRequest, Log } from \"../providers/provider.js\";\nimport { defineProperties, getBigInt, isCallException, isHexString, resolveProperties, isError, makeError, assert, assertArgument } from \"../utils/index.js\";\nimport { ContractEventPayload, ContractUnknownEventPayload, ContractTransactionResponse, EventLog, UndecodedEventLog } from \"./wrappers.js\";\nconst BN_0 = BigInt(0);\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction getResolver(value) {\n if (value != null) {\n if (canResolve(value)) {\n return value;\n }\n if (value.provider) {\n return value.provider;\n }\n }\n return undefined;\n}\nclass PreparedTopicFilter {\n #filter;\n fragment;\n constructor(contract, fragment, args) {\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n this.#filter = (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n const arg = args[index];\n if (arg == null) {\n return null;\n }\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n if (Array.isArray(value)) {\n return Promise.all(value.map((v) => resolveAddress(v, resolver)));\n }\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })();\n }\n getTopicFilter() {\n return this.#filter;\n }\n}\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nfunction getProvider(value) {\n if (value == null) {\n return null;\n }\n return value.provider || null;\n}\n/**\n * @_ignore:\n */\nexport async function copyOverrides(arg, allowed) {\n // Make sure the overrides passed in are a valid overrides object\n const _overrides = Typed.dereference(arg, \"overrides\");\n assertArgument(typeof (_overrides) === \"object\", \"invalid overrides parameter\", \"overrides\", arg);\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(_overrides);\n assertArgument(overrides.to == null || (allowed || []).indexOf(\"to\") >= 0, \"cannot override to\", \"overrides.to\", overrides.to);\n assertArgument(overrides.data == null || (allowed || []).indexOf(\"data\") >= 0, \"cannot override data\", \"overrides.data\", overrides.data);\n // Resolve any from\n if (overrides.from) {\n overrides.from = overrides.from;\n }\n return overrides;\n}\n/**\n * @_ignore:\n */\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n value = Typed.dereference(value, type);\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nfunction buildWrappedFallback(contract) {\n const populateTransaction = async function (overrides) {\n // If an overrides was passed in, copy it and normalize the values\n const tx = (await copyOverrides(overrides, [\"data\"]));\n tx.to = await contract.getAddress();\n if (tx.from) {\n tx.from = await resolveAddress(tx.from, getResolver(contract.runner));\n }\n const iface = contract.interface;\n const noValue = (getBigInt((tx.value || BN_0), \"overrides.value\") === BN_0);\n const noData = ((tx.data || \"0x\") === \"0x\");\n if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) {\n assertArgument(false, \"cannot send data to receive or send value to non-payable fallback\", \"overrides\", overrides);\n }\n assertArgument(iface.fallback || noData, \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n // Only allow payable contracts to set non-zero value\n const payable = iface.receive || (iface.fallback && iface.fallback.payable);\n assertArgument(payable || noValue, \"cannot send value to non-payable fallback\", \"overrides.value\", tx.value);\n // Only allow fallback contracts to set non-empty data\n assertArgument(iface.fallback || noData, \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n return tx;\n };\n const staticCall = async function (overrides) {\n const runner = getRunner(contract.runner, \"call\");\n assert(canCall(runner), \"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n const tx = await populateTransaction(overrides);\n try {\n return await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error) && error.data) {\n throw contract.interface.makeError(error.data, tx);\n }\n throw error;\n }\n };\n const send = async function (overrides) {\n const runner = contract.runner;\n assert(canSend(runner), \"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n const tx = await runner.sendTransaction(await populateTransaction(overrides));\n const provider = getProvider(contract.runner);\n // @TODO: the provider can be null; make a custom dummy provider that will throw a\n // meaningful error\n return new ContractTransactionResponse(contract.interface, provider, tx);\n };\n const estimateGas = async function (overrides) {\n const runner = getRunner(contract.runner, \"estimateGas\");\n assert(canEstimate(runner), \"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n return await runner.estimateGas(await populateTransaction(overrides));\n };\n const method = async (overrides) => {\n return await send(overrides);\n };\n defineProperties(method, {\n _contract: contract,\n estimateGas,\n populateTransaction,\n send, staticCall\n });\n return method;\n}\nfunction buildWrappedMethod(contract, key) {\n const getFragment = function (...args) {\n const fragment = contract.interface.getFunction(key, args);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key, args }\n });\n return fragment;\n };\n const populateTransaction = async function (...args) {\n const fragment = getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));\n }\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: contract.getAddress(),\n data: contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n };\n const staticCall = async function (...args) {\n const result = await staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n };\n const send = async function (...args) {\n const runner = contract.runner;\n assert(canSend(runner), \"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n const tx = await runner.sendTransaction(await populateTransaction(...args));\n const provider = getProvider(contract.runner);\n // @TODO: the provider can be null; make a custom dummy provider that will throw a\n // meaningful error\n return new ContractTransactionResponse(contract.interface, provider, tx);\n };\n const estimateGas = async function (...args) {\n const runner = getRunner(contract.runner, \"estimateGas\");\n assert(canEstimate(runner), \"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n return await runner.estimateGas(await populateTransaction(...args));\n };\n const staticCallResult = async function (...args) {\n const runner = getRunner(contract.runner, \"call\");\n assert(canCall(runner), \"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n const tx = await populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error) && error.data) {\n throw contract.interface.makeError(error.data, tx);\n }\n throw error;\n }\n const fragment = getFragment(...args);\n return contract.interface.decodeFunctionResult(fragment, result);\n };\n const method = async (...args) => {\n const fragment = getFragment(...args);\n if (fragment.constant) {\n return await staticCall(...args);\n }\n return await send(...args);\n };\n defineProperties(method, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key,\n getFragment,\n estimateGas,\n populateTransaction,\n send, staticCall, staticCallResult,\n });\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n Object.defineProperty(method, \"fragment\", {\n configurable: false,\n enumerable: true,\n get: () => {\n const fragment = contract.interface.getFunction(key);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key }\n });\n return fragment;\n }\n });\n return method;\n}\nfunction buildWrappedEvent(contract, key) {\n const getFragment = function (...args) {\n const fragment = contract.interface.getEvent(key, args);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key, args }\n });\n return fragment;\n };\n const method = function (...args) {\n return new PreparedTopicFilter(contract, getFragment(...args), args);\n };\n defineProperties(method, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key,\n getFragment\n });\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n Object.defineProperty(method, \"fragment\", {\n configurable: false,\n enumerable: true,\n get: () => {\n const fragment = contract.interface.getEvent(key);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key }\n });\n return fragment;\n }\n });\n return method;\n}\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubInfo(contract, event) {\n let topics;\n let fragment = null;\n // Convert named events to topicHash and get the fragment for\n // events which need deconstructing.\n if (Array.isArray(event)) {\n const topicHashify = function (name) {\n if (isHexString(name, 32)) {\n return name;\n }\n const fragment = contract.interface.getEvent(name);\n assertArgument(fragment, \"unknown fragment\", \"name\", name);\n return fragment.topicHash;\n };\n // Array of Topics and Names; e.g. `[ \"0x1234...89ab\", \"Transfer(address)\" ]`\n topics = event.map((e) => {\n if (e == null) {\n return null;\n }\n if (Array.isArray(e)) {\n return e.map(topicHashify);\n }\n return topicHashify(e);\n });\n }\n else if (event === \"*\") {\n topics = [null];\n }\n else if (typeof (event) === \"string\") {\n if (isHexString(event, 32)) {\n // Topic Hash\n topics = [event];\n }\n else {\n // Name or Signature; e.g. `\"Transfer\", `\"Transfer(address)\"`\n fragment = contract.interface.getEvent(event);\n assertArgument(fragment, \"unknown fragment\", \"event\", event);\n topics = [fragment.topicHash];\n }\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [fragment.topicHash];\n }\n else {\n assertArgument(false, \"unknown event name\", \"event\", event);\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n const items = Array.from(new Set(t.map((t) => t.toLowerCase())).values());\n if (items.length === 1) {\n return items[0];\n }\n items.sort();\n return items;\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubInfo(contract, event)).tag) || null;\n}\nasync function getSub(contract, operation, event) {\n // Make sure our runner can actually subscribe to events\n const provider = getProvider(contract.runner);\n assert(provider, \"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", { operation });\n const { fragment, tag, topics } = await getSubInfo(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n let foundFragment = fragment;\n if (foundFragment == null) {\n try {\n foundFragment = contract.interface.getEvent(log.topics[0]);\n }\n catch (error) { }\n }\n // If fragment is null, we do not deconstruct the args to emit\n if (foundFragment) {\n const _foundFragment = foundFragment;\n const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics) : [];\n emit(contract, event, args, (listener) => {\n return new ContractEventPayload(contract, listener, event, _foundFragment, log);\n });\n }\n else {\n emit(contract, event, [], (listener) => {\n return new ContractUnknownEventPayload(contract, listener, event, log);\n });\n }\n };\n let starting = [];\n const start = () => {\n if (starting.length) {\n return;\n }\n starting.push(provider.on(filter, listener));\n };\n const stop = async () => {\n if (starting.length == 0) {\n return;\n }\n let started = starting;\n starting = [];\n await Promise.all(started);\n provider.off(filter, listener);\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function _emit(contract, event, args, payloadFunc) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = Array.from(args);\n if (payloadFunc) {\n passArgs.push(payloadFunc(once ? null : listener));\n }\n try {\n listener.call(contract, ...passArgs);\n }\n catch (error) { }\n return !once;\n });\n if (sub.listeners.length === 0) {\n sub.stop();\n getInternal(contract).subs.delete(sub.tag);\n }\n return (count > 0);\n}\nasync function emit(contract, event, args, payloadFunc) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payloadFunc);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n /**\n * The target to connect to.\n *\n * This can be an address, ENS name or any [[Addressable]], such as\n * another contract. To get the resovled address, use the ``getAddress``\n * method.\n */\n target;\n /**\n * The contract Interface.\n */\n interface;\n /**\n * The connected runner. This is generally a [[Provider]] or a\n * [[Signer]], which dictates what operations are supported.\n *\n * For example, a **Contract** connected to a [[Provider]] may\n * only execute read-only operations.\n */\n runner;\n /**\n * All the Events available on this contract.\n */\n filters;\n /**\n * @_ignore:\n */\n [internal];\n /**\n * The fallback or receive function if any.\n */\n fallback;\n /**\n * Creates a new contract connected to %%target%% with the %%abi%% and\n * optionally connected to a %%runner%% to perform operations on behalf\n * of.\n */\n constructor(target, abi, runner, _deployTx) {\n assertArgument(typeof (target) === \"string\" || isAddressable(target), \"invalid value for Contract target\", \"target\", target);\n if (runner == null) {\n runner = null;\n }\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getProvider(runner);\n // @TODO: the provider can be null; make a custom dummy provider that will throw a\n // meaningful error\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw makeError(\"an ENS name used for a contract target must be correctly configured\", \"UNCONFIGURED_NAME\", {\n value: target\n });\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (typeof (prop) === \"symbol\" || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n try {\n return this.getEvent(prop);\n }\n catch (error) {\n if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n throw error;\n }\n }\n return undefined;\n },\n has: (target, prop) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(prop) >= 0) {\n return Reflect.has(target, prop);\n }\n return Reflect.has(target, prop) || this.interface.hasEvent(String(prop));\n }\n });\n defineProperties(this, { filters });\n defineProperties(this, {\n fallback: ((iface.receive || iface.fallback) ? (buildWrappedFallback(this)) : null)\n });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Undefined properties should return undefined\n try {\n return target.getFunction(prop);\n }\n catch (error) {\n if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n throw error;\n }\n }\n return undefined;\n },\n has: (target, prop) => {\n if (typeof (prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.has(target, prop);\n }\n return target.interface.hasFunction(prop);\n }\n });\n }\n /**\n * Return a new Contract instance with the same target and ABI, but\n * a different %%runner%%.\n */\n connect(runner) {\n return new BaseContract(this.target, this.interface, runner);\n }\n /**\n * Return a new Contract instance with the same ABI and runner, but\n * a different %%target%%.\n */\n attach(target) {\n return new BaseContract(target, this.interface, this.runner);\n }\n /**\n * Return the resolved address of this Contract.\n */\n async getAddress() { return await getInternal(this).addrPromise; }\n /**\n * Return the deployed bytecode or null if no bytecode is found.\n */\n async getDeployedCode() {\n const provider = getProvider(this.runner);\n assert(provider, \"runner does not support .provider\", \"UNSUPPORTED_OPERATION\", { operation: \"getDeployedCode\" });\n const code = await provider.getCode(await this.getAddress());\n if (code === \"0x\") {\n return null;\n }\n return code;\n }\n /**\n * Resolve to this Contract once the bytecode has been deployed, or\n * resolve immediately if already deployed.\n */\n async waitForDeployment() {\n // We have the deployement transaction; just use that (throws if deployement fails)\n const deployTx = this.deploymentTransaction();\n if (deployTx) {\n await deployTx.wait();\n return this;\n }\n // Check for code\n const code = await this.getDeployedCode();\n if (code != null) {\n return this;\n }\n // Make sure we can subscribe to a provider event\n const provider = getProvider(this.runner);\n assert(provider != null, \"contract runner does not support .provider\", \"UNSUPPORTED_OPERATION\", { operation: \"waitForDeployment\" });\n return new Promise((resolve, reject) => {\n const checkCode = async () => {\n try {\n const code = await this.getDeployedCode();\n if (code != null) {\n return resolve(this);\n }\n provider.once(\"block\", checkCode);\n }\n catch (error) {\n reject(error);\n }\n };\n checkCode();\n });\n }\n /**\n * Return the transaction used to deploy this contract.\n *\n * This is only available if this instance was returned from a\n * [[ContractFactory]].\n */\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n /**\n * Return the function for a given name. This is useful when a contract\n * method name conflicts with a JavaScript name such as ``prototype`` or\n * when using a Contract programatically.\n */\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n const func = buildWrappedMethod(this, key);\n return func;\n }\n /**\n * Return the event for a given name. This is useful when a contract\n * event name conflicts with a JavaScript name such as ``prototype`` or\n * when using a Contract programatically.\n */\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return buildWrappedEvent(this, key);\n }\n /**\n * @_ignore:\n */\n async queryTransaction(hash) {\n throw new Error(\"@TODO\");\n }\n /*\n // @TODO: this is a non-backwards compatible change, but will be added\n // in v7 and in a potential SmartContract class in an upcoming\n // v6 release\n async getTransactionReceipt(hash: string): Promise<null | ContractTransactionReceipt> {\n const provider = getProvider(this.runner);\n assert(provider, \"contract runner does not have a provider\",\n \"UNSUPPORTED_OPERATION\", { operation: \"queryTransaction\" });\n\n const receipt = await provider.getTransactionReceipt(hash);\n if (receipt == null) { return null; }\n\n return new ContractTransactionReceipt(this.interface, provider, receipt);\n }\n */\n /**\n * Provide historic access to event data for %%event%% in the range\n * %%fromBlock%% (default: ``0``) to %%toBlock%% (default: ``\"latest\"``)\n * inclusive.\n */\n async queryFilter(event, fromBlock, toBlock) {\n if (fromBlock == null) {\n fromBlock = 0;\n }\n if (toBlock == null) {\n toBlock = \"latest\";\n }\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubInfo(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const provider = getProvider(this.runner);\n assert(provider, \"contract runner does not have a provider\", \"UNSUPPORTED_OPERATION\", { operation: \"queryFilter\" });\n return (await provider.getLogs(filter)).map((log) => {\n let foundFragment = fragment;\n if (foundFragment == null) {\n try {\n foundFragment = this.interface.getEvent(log.topics[0]);\n }\n catch (error) { }\n }\n if (foundFragment) {\n try {\n return new EventLog(log, this.interface, foundFragment);\n }\n catch (error) {\n return new UndecodedEventLog(log, error);\n }\n }\n return new Log(log, provider);\n });\n }\n /**\n * Add an event %%listener%% for the %%event%%.\n */\n async on(event, listener) {\n const sub = await getSub(this, \"on\", event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n /**\n * Add an event %%listener%% for the %%event%%, but remove the listener\n * after it is fired once.\n */\n async once(event, listener) {\n const sub = await getSub(this, \"once\", event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n /**\n * Emit an %%event%% calling all listeners with %%args%%.\n *\n * Resolves to ``true`` if any listeners were called.\n */\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n /**\n * Resolves to the number of listeners of %%event%% or the total number\n * of listeners if unspecified.\n */\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n /**\n * Resolves to the listeners subscribed to %%event%% or all listeners\n * if unspecified.\n */\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n /**\n * Remove the %%listener%% from the listeners for %%event%% or remove\n * all listeners if unspecified.\n */\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n /**\n * Remove all the listeners for %%event%% or remove all listeners if\n * unspecified.\n */\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n /**\n * Alias for [on].\n */\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n /**\n * Alias for [off].\n */\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n /**\n * Create a new Class for the %%abi%%.\n */\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n /**\n * Create a new BaseContract with a specified Interface.\n */\n static from(target, abi, runner) {\n if (runner == null) {\n runner = null;\n }\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\n/**\n * A [[BaseContract]] with no type guards on its methods or events.\n */\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","// // walletService.js - UPDATED VERSION FOR ETHERS COMPATIBILITY\r\n\r\n// // Import ethers in a way that works with both v5 and v6\r\n// import { ethers } from 'ethers';\r\n\r\n// // Wallet Types\r\n// export const WALLET_TYPES = {\r\n// METAMASK: 'metamask',\r\n// TRONLINK: 'tronlink',\r\n// TRUST_WALLET: 'trustwallet',\r\n// LUTE: 'lute'\r\n// };\r\n\r\n// // Network Types\r\n// export const NETWORK_TYPES = {\r\n// ETHEREUM: 'ethereum',\r\n// BSC: 'bsc',\r\n// TRON: 'tron',\r\n// ALGORAND: 'algorand'\r\n// };\r\n\r\n// // Network configuration that index.js is trying to import\r\n// export const NETWORK_CONFIG = {\r\n// [NETWORK_TYPES.ETHEREUM]: {\r\n// name: 'Ethereum Mainnet',\r\n// chainId: 1,\r\n// symbol: 'ETH',\r\n// decimals: 18,\r\n// rpcUrl: 'https://mainnet.infura.io/v3/your-infura-key',\r\n// blockExplorerUrl: 'https://etherscan.io'\r\n// },\r\n// [NETWORK_TYPES.BSC]: {\r\n// name: 'Binance Smart Chain',\r\n// chainId: 56,\r\n// symbol: 'BNB',\r\n// decimals: 18,\r\n// rpcUrl: 'https://bsc-dataseed.binance.org/',\r\n// blockExplorerUrl: 'https://bscscan.com'\r\n// },\r\n// [NETWORK_TYPES.TRON]: {\r\n// name: 'TRON Mainnet',\r\n// symbol: 'TRX',\r\n// decimals: 6,\r\n// rpcUrl: 'https://api.trongrid.io',\r\n// blockExplorerUrl: 'https://tronscan.org'\r\n// },\r\n// [NETWORK_TYPES.ALGORAND]: {\r\n// name: 'Algorand Mainnet',\r\n// symbol: 'ALGO',\r\n// decimals: 6,\r\n// rpcUrl: 'https://mainnet-api.algonode.cloud',\r\n// blockExplorerUrl: 'https://algoexplorer.io'\r\n// }\r\n// };\r\n\r\n// // Token configurations with correct contract addresses and decimals\r\n// export const TOKEN_CONFIG = {\r\n// USDT: {\r\n// ethereum: {\r\n// contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n// decimals: 6,\r\n// symbol: 'USDT'\r\n// },\r\n// bsc: {\r\n// contractAddress: '0x55d398326f99059fF775485246999027B3197955',\r\n// decimals: 18,\r\n// symbol: 'USDT'\r\n// },\r\n// tron: {\r\n// contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\r\n// decimals: 6,\r\n// symbol: 'USDT'\r\n// },\r\n// algorand: {\r\n// assetId: 312769,\r\n// decimals: 6,\r\n// symbol: 'USDT'\r\n// }\r\n// },\r\n// USDC: {\r\n// ethereum: {\r\n// contractAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\r\n// decimals: 6, // USDC has 6 decimals on Ethereum!\r\n// symbol: 'USDC'\r\n// },\r\n// bsc: {\r\n// contractAddress: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',\r\n// decimals: 18,\r\n// symbol: 'USDC'\r\n// },\r\n// tron: {\r\n// contractAddress: 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8',\r\n// decimals: 6,\r\n// symbol: 'USDC'\r\n// },\r\n// algorand: {\r\n// assetId: 31566704,\r\n// decimals: 6,\r\n// symbol: 'USDC'\r\n// }\r\n// },\r\n// BNB: {\r\n// bsc: {\r\n// // BNB is native to BSC\r\n// decimals: 18,\r\n// symbol: 'BNB',\r\n// isNative: true\r\n// }\r\n// },\r\n// ETH: {\r\n// ethereum: {\r\n// // ETH is native to Ethereum\r\n// decimals: 18,\r\n// symbol: 'ETH',\r\n// isNative: true\r\n// }\r\n// },\r\n// TRX: {\r\n// tron: {\r\n// // TRX is native to TRON\r\n// decimals: 6,\r\n// symbol: 'TRX',\r\n// isNative: true\r\n// }\r\n// },\r\n// ALGO: {\r\n// algorand: {\r\n// // ALGO is native to Algorand\r\n// decimals: 6,\r\n// symbol: 'ALGO',\r\n// isNative: true\r\n// }\r\n// }\r\n// };\r\n\r\n// // Network to wallet mapping\r\n// export const NETWORK_WALLET_MAP = {\r\n// [NETWORK_TYPES.ETHEREUM]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n// [NETWORK_TYPES.BSC]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n// [NETWORK_TYPES.TRON]: [WALLET_TYPES.TRONLINK],\r\n// [NETWORK_TYPES.ALGORAND]: [WALLET_TYPES.LUTE]\r\n// };\r\n\r\n// // Installation URLs for wallets\r\n// export const getWalletInstallUrl = (walletType) => {\r\n// const urls = {\r\n// [WALLET_TYPES.METAMASK]: 'https://metamask.io/download/',\r\n// [WALLET_TYPES.TRONLINK]: 'https://www.tronlink.org/download/',\r\n// [WALLET_TYPES.TRUST_WALLET]: 'https://trustwallet.com/download/',\r\n// [WALLET_TYPES.LUTE]: 'https://lute.app/download/'\r\n// };\r\n// return urls[walletType] || '';\r\n// };\r\n\r\n// // Detect available wallets in the browser\r\n// export const detectWallets = () => {\r\n// const availableWallets = {\r\n// [WALLET_TYPES.METAMASK]: typeof window !== 'undefined' && window.ethereum !== undefined,\r\n// [WALLET_TYPES.TRONLINK]: typeof window !== 'undefined' && window.tronWeb !== undefined,\r\n// [WALLET_TYPES.TRUST_WALLET]: typeof window !== 'undefined' && \r\n// window.ethereum !== undefined && \r\n// window.ethereum.isTrust === true,\r\n// [WALLET_TYPES.LUTE]: typeof window !== 'undefined' && window.lute !== undefined\r\n// };\r\n// return availableWallets;\r\n// };\r\n\r\n// // This function was missing in the original update - adding it back\r\n// export const detectWalletsWithRetry = async (maxRetries = 3, delay = 500) => {\r\n// let retries = 0;\r\n// let wallets = detectWallets();\r\n \r\n// // Check if any wallets were detected\r\n// const hasAnyWallet = Object.values(wallets).some(v => v === true);\r\n \r\n// // If no wallets were detected on first try, retry a few times\r\n// while (!hasAnyWallet && retries < maxRetries) {\r\n// console.log(`No wallets detected, retrying (${retries + 1}/${maxRetries})...`);\r\n// await new Promise(resolve => setTimeout(resolve, delay));\r\n// wallets = detectWallets();\r\n// retries++;\r\n// }\r\n \r\n// return wallets;\r\n// };\r\n\r\n// // Debug wallet environment - useful for troubleshooting\r\n// export const debugWalletEnvironment = () => {\r\n// console.log('=== WALLET ENVIRONMENT DEBUG ===');\r\n// console.log('ethereum:', typeof window !== 'undefined' ? Boolean(window.ethereum) : 'Not in browser');\r\n// console.log('tronWeb:', typeof window !== 'undefined' ? Boolean(window.tronWeb) : 'Not in browser');\r\n// console.log('lute:', typeof window !== 'undefined' ? Boolean(window.lute) : 'Not in browser');\r\n \r\n// if (typeof window !== 'undefined' && window.ethereum) {\r\n// console.log('ethereum details:', {\r\n// isTrust: window.ethereum.isTrust,\r\n// isMetaMask: window.ethereum.isMetaMask,\r\n// chainId: window.ethereum.chainId\r\n// });\r\n// }\r\n \r\n// if (typeof window !== 'undefined' && window.tronWeb) {\r\n// console.log('tronWeb details:', {\r\n// ready: window.tronWeb.ready,\r\n// fullNode: window.tronWeb.fullNode?.host,\r\n// defaultAddress: window.tronWeb.defaultAddress\r\n// });\r\n// }\r\n \r\n// const wallets = detectWallets();\r\n// console.log('Detected wallets:', wallets);\r\n// };\r\n\r\n// // Connect to MetaMask wallet\r\n// const connectMetamaskWallet = async () => {\r\n// console.log('Connecting to MetaMask wallet...');\r\n \r\n// if (!window.ethereum || !window.ethereum.isMetaMask) {\r\n// console.error('MetaMask not found.');\r\n// throw new Error('MetaMask not detected. Please install MetaMask extension.');\r\n// }\r\n \r\n// try {\r\n// // Create Web3Provider (compatible with multiple ethers versions)\r\n// let provider;\r\n \r\n// // Try different patterns based on ethers version\r\n// try {\r\n// // For newer ethers versions\r\n// provider = new ethers.BrowserProvider(window.ethereum);\r\n// const accounts = await provider.send('eth_requestAccounts', []);\r\n \r\n// if (!accounts || accounts.length === 0) {\r\n// throw new Error('No accounts found');\r\n// }\r\n \r\n// const address = accounts[0];\r\n// const network = await provider.getNetwork();\r\n// const chainId = Number(network.chainId);\r\n \r\n// let networkType;\r\n// switch (chainId) {\r\n// case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n// case 56: networkType = NETWORK_TYPES.BSC; break;\r\n// default: networkType = `unknown-${chainId}`;\r\n// }\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.METAMASK,\r\n// address,\r\n// provider,\r\n// network: networkType,\r\n// isConnected: true,\r\n// chainId\r\n// };\r\n// } catch (err) {\r\n// // For older ethers versions (v5)\r\n// console.log('Trying fallback ethers provider pattern');\r\n \r\n// // This pattern works with ethers v5\r\n// if (window.ethereum.request) {\r\n// const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n \r\n// if (!accounts || accounts.length === 0) {\r\n// throw new Error('No accounts found');\r\n// }\r\n \r\n// const address = accounts[0];\r\n// const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n// const chainId = parseInt(chainIdHex, 16);\r\n \r\n// let networkType;\r\n// switch (chainId) {\r\n// case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n// case 56: networkType = NETWORK_TYPES.BSC; break;\r\n// default: networkType = `unknown-${chainId}`;\r\n// }\r\n \r\n// // Create a simple provider\r\n// const simpleProvider = {\r\n// getSigner: () => ({\r\n// getAddress: async () => address,\r\n// sendTransaction: async (tx) => {\r\n// const txHash = await window.ethereum.request({\r\n// method: 'eth_sendTransaction',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value.toString() : '0x0',\r\n// gasLimit: tx.gasLimit ? tx.gasLimit.toString() : undefined,\r\n// data: tx.data\r\n// }]\r\n// });\r\n// return { hash: txHash };\r\n// }\r\n// }),\r\n// estimateGas: async (tx) => {\r\n// const gasHex = await window.ethereum.request({\r\n// method: 'eth_estimateGas',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value : '0x0'\r\n// }]\r\n// });\r\n// // Create BigNumber manually for ethers v5 compatibility\r\n// return {\r\n// toString: () => parseInt(gasHex, 16).toString(),\r\n// mul: (n) => ({\r\n// div: (d) => ({\r\n// toString: () => Math.floor(parseInt(gasHex, 16) * n / d).toString()\r\n// })\r\n// })\r\n// };\r\n// }\r\n// };\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.METAMASK,\r\n// address,\r\n// provider: simpleProvider,\r\n// network: networkType,\r\n// isConnected: true,\r\n// chainId\r\n// };\r\n// } else {\r\n// throw new Error('Unsupported wallet interface');\r\n// }\r\n// }\r\n// } catch (error) {\r\n// console.error('Error connecting to MetaMask:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // Connect to Trust Wallet\r\n// const connectTrustWallet = async () => {\r\n// console.log('Connecting to Trust Wallet...');\r\n \r\n// if (!window.ethereum || !window.ethereum.isTrust) {\r\n// console.error('Trust Wallet not found.');\r\n// throw new Error('Trust Wallet not detected. Please install Trust Wallet.');\r\n// }\r\n \r\n// try {\r\n// // Use same approach as MetaMask but for Trust Wallet\r\n// if (window.ethereum.request) {\r\n// const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n \r\n// if (!accounts || accounts.length === 0) {\r\n// throw new Error('No accounts found');\r\n// }\r\n \r\n// const address = accounts[0];\r\n// const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n// const chainId = parseInt(chainIdHex, 16);\r\n \r\n// let networkType;\r\n// switch (chainId) {\r\n// case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n// case 56: networkType = NETWORK_TYPES.BSC; break;\r\n// default: networkType = `unknown-${chainId}`;\r\n// }\r\n \r\n// // Create a simple provider\r\n// const simpleProvider = {\r\n// getSigner: () => ({\r\n// getAddress: async () => address,\r\n// sendTransaction: async (tx) => {\r\n// const txHash = await window.ethereum.request({\r\n// method: 'eth_sendTransaction',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value.toString() : '0x0',\r\n// gasLimit: tx.gasLimit ? tx.gasLimit.toString() : undefined,\r\n// data: tx.data\r\n// }]\r\n// });\r\n// return { hash: txHash };\r\n// }\r\n// }),\r\n// estimateGas: async (tx) => {\r\n// const gasHex = await window.ethereum.request({\r\n// method: 'eth_estimateGas',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value : '0x0'\r\n// }]\r\n// });\r\n// // Create BigNumber manually for compatibility\r\n// return {\r\n// toString: () => parseInt(gasHex, 16).toString(),\r\n// mul: (n) => ({\r\n// div: (d) => ({\r\n// toString: () => Math.floor(parseInt(gasHex, 16) * n / d).toString()\r\n// })\r\n// })\r\n// };\r\n// }\r\n// };\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.TRUST_WALLET,\r\n// address,\r\n// provider: simpleProvider,\r\n// network: networkType,\r\n// isConnected: true,\r\n// chainId\r\n// };\r\n// } else {\r\n// throw new Error('Unsupported wallet interface');\r\n// }\r\n// } catch (error) {\r\n// console.error('Error connecting to Trust Wallet:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // Connect to TronLink wallet\r\n// const connectTronlinkWallet = async () => {\r\n// console.log('Connecting to TronLink wallet...');\r\n \r\n// if (!window.tronWeb) {\r\n// console.error('TronWeb not found. Is TronLink installed?');\r\n// throw new Error('TronLink not detected. Please install TronLink extension.');\r\n// }\r\n \r\n// // Wait for TronWeb to be ready\r\n// const waitForTronWeb = async (maxAttempts = 10, interval = 500) => {\r\n// for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n// if (window.tronWeb && window.tronWeb.ready) {\r\n// return window.tronWeb;\r\n// }\r\n// console.log(`Waiting for TronWeb to be ready... Attempt ${attempt + 1}/${maxAttempts}`);\r\n// await new Promise(resolve => setTimeout(resolve, interval));\r\n// }\r\n// throw new Error('TronWeb took too long to be ready');\r\n// };\r\n \r\n// try {\r\n// const tronWeb = await waitForTronWeb();\r\n \r\n// // Make sure we have permission\r\n// if (!tronWeb.defaultAddress || !tronWeb.defaultAddress.base58) {\r\n// // Request permission if needed\r\n// try {\r\n// await window.tronWeb.request({ method: 'tron_requestAccounts' });\r\n// } catch (permissionError) {\r\n// console.error('Failed to get permission from TronLink:', permissionError);\r\n// throw new Error('Please unlock TronLink and approve connection');\r\n// }\r\n// }\r\n \r\n// const address = tronWeb.defaultAddress.base58;\r\n// console.log('Connected to TronLink wallet:', address);\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.TRONLINK,\r\n// address: address,\r\n// provider: tronWeb,\r\n// network: NETWORK_TYPES.TRON,\r\n// isConnected: true\r\n// };\r\n// } catch (error) {\r\n// console.error('Error connecting to TronLink:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // Connect to Lute wallet (Algorand)\r\n// const connectLuteWallet = async () => {\r\n// console.log('Connecting to Lute wallet...');\r\n \r\n// if (!window.lute) {\r\n// console.error('Lute not found.');\r\n// throw new Error('Lute not detected. Please install Lute extension.');\r\n// }\r\n \r\n// try {\r\n// // Request connection to Lute\r\n// const { address } = await window.lute.connect();\r\n \r\n// if (!address) {\r\n// throw new Error('No address returned. Please unlock Lute wallet.');\r\n// }\r\n \r\n// console.log('Connected to Lute wallet:', address);\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.LUTE,\r\n// address: address,\r\n// provider: window.lute,\r\n// network: NETWORK_TYPES.ALGORAND,\r\n// isConnected: true\r\n// };\r\n// } catch (error) {\r\n// console.error('Error connecting to Lute wallet:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // General wallet connection function\r\n// export const connectWallet = async (walletType) => {\r\n// console.log('Connecting to wallet:', walletType);\r\n \r\n// switch (walletType) {\r\n// case WALLET_TYPES.METAMASK:\r\n// return connectMetamaskWallet();\r\n// case WALLET_TYPES.TRONLINK:\r\n// return connectTronlinkWallet();\r\n// case WALLET_TYPES.TRUST_WALLET:\r\n// return connectTrustWallet();\r\n// case WALLET_TYPES.LUTE:\r\n// return connectLuteWallet();\r\n// default:\r\n// throw new Error(`Unsupported wallet type: ${walletType}`);\r\n// }\r\n// };\r\n\r\n// // Get supported wallets for a network\r\n// export const getSupportedWalletsForNetwork = (network) => {\r\n// return NETWORK_WALLET_MAP[network] || [];\r\n// };\r\n\r\n// // Send native currency transaction (ETH, BNB, TRX, ALGO)\r\n// export const sendNativeTransaction = async (walletConnection, toAddress, amount) => {\r\n// console.log('Sending native transaction:', { toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// if (!toAddress) {\r\n// throw new Error('Recipient address not provided');\r\n// }\r\n \r\n// // Validate amount\r\n// if (!amount || isNaN(parseFloat(amount)) || parseFloat(amount) <= 0) {\r\n// throw new Error('Invalid amount');\r\n// }\r\n \r\n// try {\r\n// let transaction;\r\n \r\n// switch (walletConnection.walletType) {\r\n// case WALLET_TYPES.METAMASK:\r\n// case WALLET_TYPES.TRUST_WALLET:\r\n// const provider = walletConnection.provider;\r\n// const signer = provider.getSigner();\r\n \r\n// // Convert amount to wei\r\n// const amountInEther = amount.toString();\r\n// let amountWei;\r\n \r\n// try {\r\n// // Try ethers v6 approach\r\n// amountWei = ethers.parseEther(amountInEther);\r\n// } catch (err) {\r\n// // Fallback to ethers v5 approach or simple manual conversion\r\n// try {\r\n// amountWei = ethers.utils.parseEther(amountInEther);\r\n// } catch (error) {\r\n// // Manual conversion as a last resort (18 decimals for ETH/BNB)\r\n// const value = parseFloat(amountInEther) * Math.pow(10, 18);\r\n// amountWei = {\r\n// toString: () => value.toLocaleString('fullwide', { useGrouping: false })\r\n// };\r\n// }\r\n// }\r\n \r\n// console.log('Sending ETH/BNB:', {\r\n// to: toAddress,\r\n// value: amountWei.toString()\r\n// });\r\n \r\n// // Estimate gas first\r\n// const gasEstimate = await provider.estimateGas({\r\n// to: toAddress,\r\n// value: amountWei\r\n// });\r\n \r\n// console.log('Gas estimate:', gasEstimate.toString());\r\n \r\n// // Add 10% buffer to gas estimate\r\n// const gasLimit = typeof gasEstimate.mul === 'function' \r\n// ? gasEstimate.mul(110).div(100) \r\n// : {\r\n// toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.1).toString()\r\n// };\r\n \r\n// console.log('Using gas limit:', gasLimit.toString());\r\n \r\n// // Send transaction\r\n// transaction = await signer.sendTransaction({\r\n// to: toAddress,\r\n// value: amountWei,\r\n// gasLimit: gasLimit\r\n// });\r\n// break;\r\n \r\n// case WALLET_TYPES.TRONLINK:\r\n// const tronWeb = walletConnection.provider;\r\n \r\n// if (!tronWeb || !tronWeb.ready) {\r\n// throw new Error('TronWeb not initialized');\r\n// }\r\n \r\n// // Convert amount to sun (TRX smallest unit)\r\n// const amountSun = tronWeb.toSun(amount.toString());\r\n \r\n// console.log('Sending TRX:', {\r\n// to: toAddress,\r\n// value: amountSun\r\n// });\r\n \r\n// // Send TRX transaction\r\n// transaction = await tronWeb.trx.sendTransaction(\r\n// toAddress,\r\n// amountSun\r\n// );\r\n// break;\r\n \r\n// case WALLET_TYPES.LUTE:\r\n// const lute = walletConnection.provider;\r\n \r\n// // Convert amount to microAlgos\r\n// const microAlgos = Math.floor(parseFloat(amount) * 1000000);\r\n \r\n// console.log('Sending Algos:', {\r\n// to: toAddress,\r\n// amount: microAlgos\r\n// });\r\n \r\n// // Send ALGO transaction\r\n// transaction = await lute.sendPayment({\r\n// recipient: toAddress,\r\n// amount: microAlgos\r\n// });\r\n// break;\r\n \r\n// default:\r\n// throw new Error(`Unsupported wallet type: ${walletConnection.walletType}`);\r\n// }\r\n \r\n// console.log('Transaction sent:', transaction);\r\n \r\n// // Return transaction hash\r\n// if (transaction) {\r\n// const hash = transaction.hash || transaction.txID || transaction.txId || transaction;\r\n// console.log('Transaction hash:', hash);\r\n// return hash;\r\n// } else {\r\n// throw new Error('No transaction hash returned');\r\n// }\r\n// } catch (error) {\r\n// console.error('Native transaction error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // This is the missing function that CoinleyCheckout.jsx is importing\r\n// export const sendTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// if (!toAddress) {\r\n// throw new Error('Recipient address not provided');\r\n// }\r\n \r\n// // Check if this is a native currency or token transfer\r\n// if (tokenConfig && tokenConfig.isNative) {\r\n// return sendNativeTransaction(walletConnection, toAddress, amount);\r\n// } else {\r\n// return sendTokenTransaction(walletConnection, tokenConfig, toAddress, amount);\r\n// }\r\n// };\r\n\r\n// // Send token transaction (ERC20, BEP20)\r\n// export const sendTokenTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending token transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// if (!tokenConfig) {\r\n// throw new Error('Token configuration not provided');\r\n// }\r\n \r\n// if (!toAddress) {\r\n// throw new Error('Recipient address not provided');\r\n// }\r\n\r\n// // Validate amount\r\n// if (!amount || isNaN(parseFloat(amount)) || parseFloat(amount) <= 0) {\r\n// throw new Error('Invalid amount');\r\n// }\r\n\r\n// const { contractAddress, decimals, symbol } = tokenConfig;\r\n// console.log(`Token: ${symbol}, Decimals: ${decimals}, Contract: ${contractAddress}`);\r\n \r\n// // Handle different wallet types differently\r\n// switch (walletConnection.walletType) {\r\n// case WALLET_TYPES.TRONLINK:\r\n// return sendTRC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n// case WALLET_TYPES.LUTE:\r\n// return sendAlgorandAssetTransaction(walletConnection, tokenConfig, toAddress, amount);\r\n// default:\r\n// return sendERC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n// }\r\n// };\r\n\r\n// // ERC20/BEP20 token transaction function (MetaMask, Trust Wallet)\r\n// export const sendERC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending ERC20/BEP20 transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// const provider = walletConnection.provider;\r\n// const signer = provider.getSigner();\r\n \r\n// const { contractAddress, decimals, symbol } = tokenConfig;\r\n \r\n// // Convert amount to token units with proper decimals\r\n// const tokenAmount = parseFloat(amount);\r\n// const tokenDecimals = parseInt(decimals);\r\n \r\n// let tokenUnits;\r\n// try {\r\n// // Try ethers v6 approach\r\n// tokenUnits = ethers.parseUnits(tokenAmount.toString(), tokenDecimals);\r\n// } catch (err) {\r\n// // Fallback to ethers v5 approach\r\n// try {\r\n// tokenUnits = ethers.utils.parseUnits(tokenAmount.toString(), tokenDecimals);\r\n// } catch (error) {\r\n// // Manual conversion as a last resort\r\n// const value = tokenAmount * Math.pow(10, tokenDecimals);\r\n// tokenUnits = {\r\n// toString: () => value.toLocaleString('fullwide', { useGrouping: false })\r\n// };\r\n// }\r\n// }\r\n \r\n// console.log(`Sending ${tokenAmount} ${symbol} (${tokenUnits.toString()} base units) to ${toAddress}`);\r\n \r\n// try {\r\n// // Create contract instance\r\n// const tokenContract = new ethers.Contract(\r\n// contractAddress,\r\n// ['function transfer(address to, uint256 amount) returns (bool)'],\r\n// signer\r\n// );\r\n \r\n// // Estimate gas first\r\n// try {\r\n// const gasEstimate = await tokenContract.estimateGas.transfer(toAddress, tokenUnits);\r\n// console.log('Gas estimate:', gasEstimate.toString());\r\n \r\n// // Add 20% buffer to gas estimate for USDC which often needs more gas\r\n// const gasLimit = symbol === 'USDC' \r\n// ? (typeof gasEstimate.mul === 'function' \r\n// ? gasEstimate.mul(120).div(100) \r\n// : { toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.2).toString() })\r\n// : (typeof gasEstimate.mul === 'function' \r\n// ? gasEstimate.mul(110).div(100) \r\n// : { toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.1).toString() });\r\n \r\n// console.log('Using gas limit:', gasLimit.toString());\r\n \r\n// // Send with explicit gas limit\r\n// const transaction = await tokenContract.transfer(toAddress, tokenUnits, {\r\n// gasLimit: gasLimit\r\n// });\r\n \r\n// console.log('Transaction sent:', transaction);\r\n// return transaction.hash;\r\n// } catch (gasError) {\r\n// console.error('Gas estimation failed:', gasError);\r\n \r\n// // For USDC, try with a higher fixed gas limit\r\n// if (symbol === 'USDC') {\r\n// console.log('Trying USDC transaction with fixed gas limit');\r\n// const transaction = await tokenContract.transfer(toAddress, tokenUnits, {\r\n// gasLimit: 150000 // Higher fixed gas limit for USDC\r\n// });\r\n \r\n// console.log('Transaction sent with fixed gas limit:', transaction);\r\n// return transaction.hash;\r\n// }\r\n \r\n// throw new Error(`Transaction would likely fail: ${gasError.message}`);\r\n// }\r\n// } catch (error) {\r\n// console.error('ERC20 transaction error:', error);\r\n \r\n// // Improve error messages\r\n// if (error.message && error.message.includes('user rejected')) {\r\n// throw new Error('Transaction rejected by user');\r\n// } else if (error.message && error.message.includes('insufficient funds')) {\r\n// throw new Error('Insufficient funds for transaction');\r\n// } else {\r\n// throw error;\r\n// }\r\n// }\r\n// };\r\n\r\n// // TRC20 token transaction function (TronLink)\r\n// export const sendTRC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending TRC20 transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Tron wallet not connected');\r\n// }\r\n \r\n// const tronWeb = walletConnection.provider;\r\n// if (!tronWeb || !tronWeb.ready) {\r\n// throw new Error('TronWeb not initialized');\r\n// }\r\n \r\n// if (!tokenConfig || !tokenConfig.contractAddress) {\r\n// throw new Error('Invalid token configuration');\r\n// }\r\n \r\n// const { contractAddress, decimals, symbol } = tokenConfig;\r\n \r\n// // Convert amount to token units with proper decimals\r\n// const tokenAmount = parseFloat(amount);\r\n// const tokenDecimals = parseInt(decimals);\r\n \r\n// // Calculate token amount with correct decimal precision\r\n// const amountWithDecimals = tokenAmount * Math.pow(10, tokenDecimals);\r\n \r\n// // TronWeb requires specific formatting\r\n// const amountString = amountWithDecimals.toString();\r\n \r\n// console.log(`Sending ${tokenAmount} ${symbol} (${amountString} base units) to ${toAddress}`);\r\n \r\n// try {\r\n// // Get the contract instance\r\n// const contract = await tronWeb.contract().at(contractAddress);\r\n \r\n// // Verify contract is valid\r\n// if (!contract.transfer) {\r\n// throw new Error('Invalid TRC-20 contract');\r\n// }\r\n \r\n// // Execute the transfer\r\n// // Important: TronWeb does NOT use .toSun() for token transfers - that's only for TRX!\r\n// const transaction = await contract.transfer(\r\n// toAddress,\r\n// amountString // Use the raw amount string\r\n// ).send({\r\n// feeLimit: 100000000, // 100 TRX fee limit\r\n// callValue: 0,\r\n// shouldPollResponse: false // Set to false for better handling\r\n// });\r\n \r\n// console.log('TRC20 transaction sent:', transaction);\r\n// return transaction;\r\n// } catch (error) {\r\n// console.error('TRC20 transaction failed:', error);\r\n \r\n// // Improve error message for common TronLink issues\r\n// if (error.message && error.message.includes('User rejected')) {\r\n// throw new Error('Transaction rejected by user');\r\n// } else if (error.message && error.message.includes('bandwidth')) {\r\n// throw new Error('Insufficient energy or bandwidth. Make sure you have enough TRX for fees.');\r\n// } else if (error.message && error.message.includes('balance')) {\r\n// throw new Error('Insufficient token balance for transfer');\r\n// } else {\r\n// throw new Error(`Transaction failed: ${error.message || 'Unknown error'}`);\r\n// }\r\n// }\r\n// };\r\n\r\n// // Algorand asset transaction function (Lute)\r\n// export const sendAlgorandAssetTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending Algorand asset transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Algorand wallet not connected');\r\n// }\r\n \r\n// const lute = walletConnection.provider;\r\n \r\n// if (!tokenConfig || !tokenConfig.assetId) {\r\n// throw new Error('Invalid token configuration - missing assetId');\r\n// }\r\n \r\n// const { assetId, decimals, symbol } = tokenConfig;\r\n \r\n// // Convert amount to token units with proper decimals\r\n// const tokenAmount = parseFloat(amount);\r\n// const tokenDecimals = parseInt(decimals);\r\n \r\n// // Calculate token amount with correct decimal precision\r\n// const assetAmount = Math.floor(tokenAmount * Math.pow(10, tokenDecimals));\r\n \r\n// console.log(`Sending ${tokenAmount} ${symbol} (${assetAmount} base units) to ${toAddress}`);\r\n \r\n// try {\r\n// // Send asset transaction\r\n// const transaction = await lute.sendAssetTransfer({\r\n// recipient: toAddress,\r\n// assetId: assetId,\r\n// amount: assetAmount\r\n// });\r\n \r\n// console.log('Algorand asset transaction sent:', transaction);\r\n// return transaction.txId;\r\n// } catch (error) {\r\n// console.error('Algorand asset transaction error:', error);\r\n \r\n// if (error.message && error.message.includes('rejected')) {\r\n// throw new Error('Transaction rejected by user');\r\n// } else if (error.message && error.message.includes('balance')) {\r\n// throw new Error('Insufficient asset balance');\r\n// } else {\r\n// throw error;\r\n// }\r\n// }\r\n// };\r\n\r\n// // Get token configuration for a specific currency and network\r\n// export const getTokenConfig = (currency, network) => {\r\n// if (!currency || !network) {\r\n// return null;\r\n// }\r\n \r\n// const tokenConfig = TOKEN_CONFIG[currency.toUpperCase()];\r\n// if (!tokenConfig) {\r\n// return null;\r\n// }\r\n \r\n// return tokenConfig[network.toLowerCase()];\r\n// };\r\n\r\n// // Fix for Tron wallet connection verification\r\n// export const verifyTronWalletConnection = async () => {\r\n// if (!window.tronWeb || !window.tronWeb.ready) {\r\n// return false;\r\n// }\r\n \r\n// try {\r\n// // Simple method to verify connection\r\n// const account = await window.tronWeb.trx.getAccount();\r\n// return Boolean(account && account.address);\r\n// } catch (error) {\r\n// console.error('Error verifying TronLink connection:', error);\r\n// return false;\r\n// }\r\n// };\r\n\r\n// // Helper function to generate mock transaction hash for testing\r\n// export const generateMockTransactionHash = (network) => {\r\n// const chars = 'abcdef0123456789';\r\n// let hash = '';\r\n \r\n// // Different hash formats based on network\r\n// let length = 64; // Default length (Ethereum, BSC)\r\n \r\n// if (network === NETWORK_TYPES.TRON) {\r\n// length = 64;\r\n// } else if (network === NETWORK_TYPES.ALGORAND) {\r\n// length = 52;\r\n// }\r\n \r\n// for (let i = 0; i < length; i++) {\r\n// hash += chars.charAt(Math.floor(Math.random() * chars.length));\r\n// }\r\n \r\n// return hash;\r\n// };\r\n\r\n// // Export everything as a default object as well\r\n// export default {\r\n// WALLET_TYPES,\r\n// NETWORK_TYPES,\r\n// NETWORK_CONFIG, // Add this to the default export\r\n// TOKEN_CONFIG,\r\n// NETWORK_WALLET_MAP,\r\n// getWalletInstallUrl,\r\n// detectWallets,\r\n// detectWalletsWithRetry,\r\n// debugWalletEnvironment,\r\n// connectWallet,\r\n// getSupportedWalletsForNetwork,\r\n// sendNativeTransaction,\r\n// sendTokenTransaction,\r\n// sendTransaction,\r\n// sendTRC20Transaction,\r\n// sendERC20Transaction,\r\n// sendAlgorandAssetTransaction,\r\n// getTokenConfig,\r\n// verifyTronWalletConnection,\r\n// generateMockTransactionHash\r\n// };\r\n\r\n\r\n\r\n\r\n\r\n// src/services/walletService.js - ENHANCED VERSION WITH BETTER ERROR HANDLING\r\nimport { ethers } from 'ethers';\r\n\r\n// Wallet Types\r\nexport const WALLET_TYPES = {\r\n METAMASK: 'metamask',\r\n TRONLINK: 'tronlink',\r\n TRUST_WALLET: 'trustwallet',\r\n LUTE: 'lute'\r\n};\r\n\r\n// Network Types\r\nexport const NETWORK_TYPES = {\r\n ETHEREUM: 'ethereum',\r\n BSC: 'bsc',\r\n TRON: 'tron',\r\n ALGORAND: 'algorand'\r\n};\r\n\r\n// Network configuration\r\nexport const NETWORK_CONFIG = {\r\n [NETWORK_TYPES.ETHEREUM]: {\r\n name: 'Ethereum Mainnet',\r\n chainId: 1,\r\n symbol: 'ETH',\r\n decimals: 18,\r\n rpcUrl: 'https://mainnet.infura.io/v3/your-infura-key',\r\n blockExplorerUrl: 'https://etherscan.io'\r\n },\r\n [NETWORK_TYPES.BSC]: {\r\n name: 'Binance Smart Chain',\r\n chainId: 56,\r\n symbol: 'BNB',\r\n decimals: 18,\r\n rpcUrl: 'https://bsc-dataseed.binance.org/',\r\n blockExplorerUrl: 'https://bscscan.com'\r\n },\r\n [NETWORK_TYPES.TRON]: {\r\n name: 'TRON Mainnet',\r\n symbol: 'TRX',\r\n decimals: 6,\r\n rpcUrl: 'https://api.trongrid.io',\r\n blockExplorerUrl: 'https://tronscan.org'\r\n },\r\n [NETWORK_TYPES.ALGORAND]: {\r\n name: 'Algorand Mainnet',\r\n symbol: 'ALGO',\r\n decimals: 6,\r\n rpcUrl: 'https://mainnet-api.algonode.cloud',\r\n blockExplorerUrl: 'https://algoexplorer.io'\r\n }\r\n};\r\n\r\n// Enhanced token configurations with correct contract addresses and decimals\r\nexport const TOKEN_CONFIG = {\r\n USDT: {\r\n ethereum: {\r\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n decimals: 6,\r\n symbol: 'USDT'\r\n },\r\n bsc: {\r\n contractAddress: '0x55d398326f99059fF775485246999027B3197955',\r\n decimals: 18,\r\n symbol: 'USDT'\r\n },\r\n tron: {\r\n contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\r\n decimals: 6,\r\n symbol: 'USDT'\r\n },\r\n algorand: {\r\n assetId: 312769,\r\n decimals: 6,\r\n symbol: 'USDT'\r\n }\r\n },\r\n USDC: {\r\n ethereum: {\r\n contractAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\r\n decimals: 6,\r\n symbol: 'USDC'\r\n },\r\n bsc: {\r\n contractAddress: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',\r\n decimals: 18,\r\n symbol: 'USDC'\r\n },\r\n tron: {\r\n contractAddress: 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8',\r\n decimals: 6,\r\n symbol: 'USDC'\r\n },\r\n algorand: {\r\n assetId: 31566704,\r\n decimals: 6,\r\n symbol: 'USDC'\r\n }\r\n },\r\n BNB: {\r\n bsc: {\r\n decimals: 18,\r\n symbol: 'BNB',\r\n isNative: true\r\n }\r\n },\r\n ETH: {\r\n ethereum: {\r\n decimals: 18,\r\n symbol: 'ETH',\r\n isNative: true\r\n }\r\n },\r\n TRX: {\r\n tron: {\r\n decimals: 6,\r\n symbol: 'TRX',\r\n isNative: true\r\n }\r\n },\r\n ALGO: {\r\n algorand: {\r\n decimals: 6,\r\n symbol: 'ALGO',\r\n isNative: true\r\n }\r\n },\r\n DAI: {\r\n ethereum: {\r\n contractAddress: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\r\n decimals: 18,\r\n symbol: 'DAI'\r\n }\r\n },\r\n FRAX: {\r\n ethereum: {\r\n contractAddress: '0x853d955aCEf822Db058eb8505911ED77F175b99e',\r\n decimals: 18,\r\n symbol: 'FRAX'\r\n },\r\n bsc: {\r\n contractAddress: '0x90C97F71E18723b0Cf0dfa30ee176Ab653E89F40',\r\n decimals: 18,\r\n symbol: 'FRAX'\r\n }\r\n },\r\n PYUSD: {\r\n ethereum: {\r\n contractAddress: '0x6c3ea9036406852006290770BEdFcAbA0e23A0e8',\r\n decimals: 6,\r\n symbol: 'PYUSD'\r\n }\r\n },\r\n BUSD: {\r\n bsc: {\r\n contractAddress: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',\r\n decimals: 18,\r\n symbol: 'BUSD'\r\n }\r\n },\r\n USDJ: {\r\n tron: {\r\n contractAddress: 'TMwFHYXLJaRUPeW6421aqXL4ZEzPRFGkGT',\r\n decimals: 18,\r\n symbol: 'USDJ'\r\n }\r\n }\r\n};\r\n\r\n// Network to wallet mapping\r\nexport const NETWORK_WALLET_MAP = {\r\n [NETWORK_TYPES.ETHEREUM]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n [NETWORK_TYPES.BSC]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n [NETWORK_TYPES.TRON]: [WALLET_TYPES.TRONLINK],\r\n [NETWORK_TYPES.ALGORAND]: [WALLET_TYPES.LUTE]\r\n};\r\n\r\n// Installation URLs for wallets\r\nexport const getWalletInstallUrl = (walletType) => {\r\n const urls = {\r\n [WALLET_TYPES.METAMASK]: 'https://metamask.io/download/',\r\n [WALLET_TYPES.TRONLINK]: 'https://www.tronlink.org/download/',\r\n [WALLET_TYPES.TRUST_WALLET]: 'https://trustwallet.com/download/',\r\n [WALLET_TYPES.LUTE]: 'https://lute.app/download/'\r\n };\r\n return urls[walletType] || '';\r\n};\r\n\r\n// Detect available wallets in the browser\r\nexport const detectWallets = () => {\r\n const availableWallets = {\r\n [WALLET_TYPES.METAMASK]: typeof window !== 'undefined' && \r\n window.ethereum !== undefined && \r\n window.ethereum.isMetaMask === true,\r\n [WALLET_TYPES.TRONLINK]: typeof window !== 'undefined' && \r\n window.tronWeb !== undefined,\r\n [WALLET_TYPES.TRUST_WALLET]: typeof window !== 'undefined' && \r\n window.ethereum !== undefined && \r\n window.ethereum.isTrust === true,\r\n [WALLET_TYPES.LUTE]: typeof window !== 'undefined' && \r\n window.lute !== undefined\r\n };\r\n return availableWallets;\r\n};\r\n\r\n// Enhanced wallet detection with retry\r\nexport const detectWalletsWithRetry = async (maxRetries = 3, delay = 500) => {\r\n let retries = 0;\r\n let wallets = detectWallets();\r\n \r\n const hasAnyWallet = Object.values(wallets).some(v => v === true);\r\n \r\n while (!hasAnyWallet && retries < maxRetries) {\r\n console.log(`No wallets detected, retrying (${retries + 1}/${maxRetries})...`);\r\n await new Promise(resolve => setTimeout(resolve, delay));\r\n wallets = detectWallets();\r\n retries++;\r\n }\r\n \r\n return wallets;\r\n};\r\n\r\n// Debug wallet environment\r\nexport const debugWalletEnvironment = () => {\r\n console.log('=== WALLET ENVIRONMENT DEBUG ===');\r\n console.log('ethereum:', typeof window !== 'undefined' ? Boolean(window.ethereum) : 'Not in browser');\r\n console.log('tronWeb:', typeof window !== 'undefined' ? Boolean(window.tronWeb) : 'Not in browser');\r\n console.log('lute:', typeof window !== 'undefined' ? Boolean(window.lute) : 'Not in browser');\r\n \r\n if (typeof window !== 'undefined' && window.ethereum) {\r\n console.log('ethereum details:', {\r\n isTrust: window.ethereum.isTrust,\r\n isMetaMask: window.ethereum.isMetaMask,\r\n chainId: window.ethereum.chainId\r\n });\r\n }\r\n \r\n if (typeof window !== 'undefined' && window.tronWeb) {\r\n console.log('tronWeb details:', {\r\n ready: window.tronWeb.ready,\r\n fullNode: window.tronWeb.fullNode?.host,\r\n defaultAddress: window.tronWeb.defaultAddress\r\n });\r\n }\r\n \r\n const wallets = detectWallets();\r\n console.log('Detected wallets:', wallets);\r\n};\r\n\r\n// Enhanced MetaMask connection\r\nconst connectMetamaskWallet = async () => {\r\n console.log('Connecting to MetaMask wallet...');\r\n \r\n if (!window.ethereum || !window.ethereum.isMetaMask) {\r\n throw new Error('MetaMask not detected. Please install MetaMask extension.');\r\n }\r\n \r\n try {\r\n // Request account access\r\n const accounts = await window.ethereum.request({ \r\n method: 'eth_requestAccounts' \r\n });\r\n \r\n if (!accounts || accounts.length === 0) {\r\n throw new Error('No accounts found. Please unlock MetaMask.');\r\n }\r\n \r\n const address = accounts[0];\r\n const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n const chainId = parseInt(chainIdHex, 16);\r\n \r\n let networkType;\r\n switch (chainId) {\r\n case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n case 56: networkType = NETWORK_TYPES.BSC; break;\r\n default: networkType = `unknown-${chainId}`;\r\n }\r\n \r\n // Create provider wrapper that works with different ethers versions\r\n const providerWrapper = {\r\n request: (params) => window.ethereum.request(params),\r\n getSigner: () => ({\r\n getAddress: async () => address,\r\n sendTransaction: async (tx) => {\r\n const txHash = await window.ethereum.request({\r\n method: 'eth_sendTransaction',\r\n params: [{\r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? (typeof tx.value === 'string' ? tx.value : tx.value.toString()) : '0x0',\r\n gasLimit: tx.gasLimit ? (typeof tx.gasLimit === 'string' ? tx.gasLimit : tx.gasLimit.toString()) : undefined,\r\n data: tx.data || '0x'\r\n }]\r\n });\r\n return { hash: txHash };\r\n }\r\n }),\r\n estimateGas: async (tx) => {\r\n const gasHex = await window.ethereum.request({\r\n method: 'eth_estimateGas',\r\n params: [{\r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? (typeof tx.value === 'string' ? tx.value : tx.value.toString()) : '0x0',\r\n data: tx.data || '0x'\r\n }]\r\n });\r\n const gasLimit = parseInt(gasHex, 16);\r\n return {\r\n toString: () => gasLimit.toString(),\r\n mul: (n) => ({\r\n div: (d) => ({\r\n toString: () => Math.floor(gasLimit * n / d).toString()\r\n })\r\n })\r\n };\r\n }\r\n };\r\n \r\n console.log('MetaMask connected successfully:', { address, chainId, networkType });\r\n \r\n return {\r\n walletType: WALLET_TYPES.METAMASK,\r\n address,\r\n provider: providerWrapper,\r\n network: networkType,\r\n isConnected: true,\r\n chainId\r\n };\r\n } catch (error) {\r\n console.error('MetaMask connection error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Enhanced TronLink connection\r\nconst connectTronlinkWallet = async () => {\r\n console.log('Connecting to TronLink wallet...');\r\n \r\n if (!window.tronWeb) {\r\n throw new Error('TronLink not detected. Please install TronLink extension.');\r\n }\r\n \r\n const waitForTronWeb = async (maxAttempts = 10, interval = 500) => {\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n if (window.tronWeb && window.tronWeb.ready) {\r\n return window.tronWeb;\r\n }\r\n console.log(`Waiting for TronWeb to be ready... Attempt ${attempt + 1}/${maxAttempts}`);\r\n await new Promise(resolve => setTimeout(resolve, interval));\r\n }\r\n throw new Error('TronWeb took too long to be ready');\r\n };\r\n \r\n try {\r\n const tronWeb = await waitForTronWeb();\r\n \r\n if (!tronWeb.defaultAddress || !tronWeb.defaultAddress.base58) {\r\n try {\r\n await window.tronWeb.request({ method: 'tron_requestAccounts' });\r\n } catch (permissionError) {\r\n throw new Error('Please unlock TronLink and approve connection');\r\n }\r\n }\r\n \r\n const address = tronWeb.defaultAddress.base58;\r\n console.log('TronLink connected successfully:', address);\r\n \r\n return {\r\n walletType: WALLET_TYPES.TRONLINK,\r\n address: address,\r\n provider: tronWeb,\r\n network: NETWORK_TYPES.TRON,\r\n isConnected: true\r\n };\r\n } catch (error) {\r\n console.error('TronLink connection error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Enhanced Trust Wallet connection\r\nconst connectTrustWallet = async () => {\r\n console.log('Connecting to Trust Wallet...');\r\n \r\n if (!window.ethereum || !window.ethereum.isTrust) {\r\n throw new Error('Trust Wallet not detected. Please install Trust Wallet.');\r\n }\r\n \r\n try {\r\n const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n \r\n if (!accounts || accounts.length === 0) {\r\n throw new Error('No accounts found. Please unlock Trust Wallet.');\r\n }\r\n \r\n const address = accounts[0];\r\n const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n const chainId = parseInt(chainIdHex, 16);\r\n \r\n let networkType;\r\n switch (chainId) {\r\n case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n case 56: networkType = NETWORK_TYPES.BSC; break;\r\n default: networkType = `unknown-${chainId}`;\r\n }\r\n \r\n const providerWrapper = {\r\n request: (params) => window.ethereum.request(params),\r\n getSigner: () => ({\r\n getAddress: async () => address,\r\n sendTransaction: async (tx) => {\r\n const txHash = await window.ethereum.request({\r\n method: 'eth_sendTransaction',\r\n params: [{\r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? (typeof tx.value === 'string' ? tx.value : tx.value.toString()) : '0x0',\r\n gasLimit: tx.gasLimit ? (typeof tx.gasLimit === 'string' ? tx.gasLimit : tx.gasLimit.toString()) : undefined,\r\n data: tx.data || '0x'\r\n }]\r\n });\r\n return { hash: txHash };\r\n }\r\n }),\r\n estimateGas: async (tx) => {\r\n const gasHex = await window.ethereum.request({\r\n method: 'eth_estimateGas',\r\n params: [{\r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? (typeof tx.value === 'string' ? tx.value : tx.value.toString()) : '0x0',\r\n data: tx.data || '0x'\r\n }]\r\n });\r\n const gasLimit = parseInt(gasHex, 16);\r\n return {\r\n toString: () => gasLimit.toString(),\r\n mul: (n) => ({\r\n div: (d) => ({\r\n toString: () => Math.floor(gasLimit * n / d).toString()\r\n })\r\n })\r\n };\r\n }\r\n };\r\n \r\n return {\r\n walletType: WALLET_TYPES.TRUST_WALLET,\r\n address,\r\n provider: providerWrapper,\r\n network: networkType,\r\n isConnected: true,\r\n chainId\r\n };\r\n } catch (error) {\r\n console.error('Trust Wallet connection error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Enhanced Lute Wallet connection\r\nconst connectLuteWallet = async () => {\r\n console.log('Connecting to Lute wallet...');\r\n \r\n if (!window.lute) {\r\n throw new Error('Lute not detected. Please install Lute extension.');\r\n }\r\n \r\n try {\r\n const { address } = await window.lute.connect();\r\n \r\n if (!address) {\r\n throw new Error('No address returned. Please unlock Lute wallet.');\r\n }\r\n \r\n console.log('Lute wallet connected successfully:', address);\r\n \r\n return {\r\n walletType: WALLET_TYPES.LUTE,\r\n address: address,\r\n provider: window.lute,\r\n network: NETWORK_TYPES.ALGORAND,\r\n isConnected: true\r\n };\r\n } catch (error) {\r\n console.error('Lute wallet connection error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// General wallet connection function\r\nexport const connectWallet = async (walletType, network, retries = 1) => {\r\n console.log('Connecting to wallet:', { walletType, network });\r\n \r\n for (let attempt = 0; attempt < retries; attempt++) {\r\n try {\r\n switch (walletType) {\r\n case WALLET_TYPES.METAMASK:\r\n return await connectMetamaskWallet();\r\n case WALLET_TYPES.TRONLINK:\r\n return await connectTronlinkWallet();\r\n case WALLET_TYPES.TRUST_WALLET:\r\n return await connectTrustWallet();\r\n case WALLET_TYPES.LUTE:\r\n return await connectLuteWallet();\r\n default:\r\n throw new Error(`Unsupported wallet type: ${walletType}`);\r\n }\r\n } catch (error) {\r\n console.log(`Wallet connection attempt ${attempt + 1} failed:`, error.message);\r\n if (attempt === retries - 1) {\r\n throw error;\r\n }\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n }\r\n }\r\n};\r\n\r\n// Get supported wallets for a network\r\nexport const getSupportedWalletsForNetwork = (network) => {\r\n return NETWORK_WALLET_MAP[network] || [];\r\n};\r\n\r\n// Enhanced transaction sending with better parameter handling\r\nexport const sendTransaction = async (walletConnection, transactionParams) => {\r\n console.log('Sending transaction:', { walletConnection, transactionParams });\r\n \r\n if (!walletConnection) {\r\n throw new Error('Wallet not connected');\r\n }\r\n \r\n const { to, amount, tokenAddress, tokenDecimals, currency, network, tokenConfig } = transactionParams;\r\n \r\n if (!to) {\r\n throw new Error('Recipient address not provided');\r\n }\r\n \r\n if (!amount || isNaN(parseFloat(amount)) || parseFloat(amount) <= 0) {\r\n throw new Error('Invalid amount');\r\n }\r\n \r\n // Determine if this is a native currency or token transfer\r\n const isNativeToken = !tokenAddress || tokenAddress === null;\r\n \r\n if (isNativeToken) {\r\n return sendNativeTransaction(walletConnection, to, amount);\r\n } else {\r\n return sendTokenTransaction(walletConnection, {\r\n contractAddress: tokenAddress,\r\n decimals: tokenDecimals,\r\n symbol: currency\r\n }, to, amount);\r\n }\r\n};\r\n\r\n// Send native currency transaction\r\nexport const sendNativeTransaction = async (walletConnection, toAddress, amount) => {\r\n console.log('Sending native transaction:', { toAddress, amount });\r\n \r\n if (!walletConnection || !walletConnection.provider) {\r\n throw new Error('Wallet not connected');\r\n }\r\n \r\n try {\r\n let transaction;\r\n \r\n switch (walletConnection.walletType) {\r\n case WALLET_TYPES.METAMASK:\r\n case WALLET_TYPES.TRUST_WALLET:\r\n const provider = walletConnection.provider;\r\n const signer = provider.getSigner();\r\n \r\n // Convert amount to wei (18 decimals for ETH/BNB)\r\n const amountWei = ethers.parseEther ? \r\n ethers.parseEther(amount.toString()) :\r\n ethers.utils.parseEther(amount.toString());\r\n \r\n // Estimate gas\r\n const gasEstimate = await provider.estimateGas({\r\n to: toAddress,\r\n value: amountWei\r\n });\r\n \r\n const gasLimit = typeof gasEstimate.mul === 'function' \r\n ? gasEstimate.mul(110).div(100) \r\n : { toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.1).toString() };\r\n \r\n // Send transaction\r\n transaction = await signer.sendTransaction({\r\n to: toAddress,\r\n value: amountWei,\r\n gasLimit: gasLimit\r\n });\r\n break;\r\n \r\n case WALLET_TYPES.TRONLINK:\r\n const tronWeb = walletConnection.provider;\r\n \r\n if (!tronWeb || !tronWeb.ready) {\r\n throw new Error('TronWeb not initialized');\r\n }\r\n \r\n const amountSun = tronWeb.toSun(amount.toString());\r\n transaction = await tronWeb.trx.sendTransaction(toAddress, amountSun);\r\n break;\r\n \r\n case WALLET_TYPES.LUTE:\r\n const lute = walletConnection.provider;\r\n const microAlgos = Math.floor(parseFloat(amount) * 1000000);\r\n \r\n transaction = await lute.sendPayment({\r\n recipient: toAddress,\r\n amount: microAlgos\r\n });\r\n break;\r\n \r\n default:\r\n throw new Error(`Unsupported wallet type: ${walletConnection.walletType}`);\r\n }\r\n \r\n const hash = transaction.hash || transaction.txID || transaction.txId || transaction;\r\n console.log('Native transaction sent:', hash);\r\n return hash;\r\n } catch (error) {\r\n console.error('Native transaction error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Enhanced token transaction function\r\nexport const sendTokenTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending token transaction:', { tokenConfig, toAddress, amount });\r\n \r\n if (!walletConnection || !walletConnection.provider) {\r\n throw new Error('Wallet not connected');\r\n }\r\n \r\n if (!tokenConfig || !tokenConfig.contractAddress) {\r\n throw new Error('Token configuration missing');\r\n }\r\n \r\n switch (walletConnection.walletType) {\r\n case WALLET_TYPES.TRONLINK:\r\n return sendTRC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n case WALLET_TYPES.LUTE:\r\n return sendAlgorandAssetTransaction(walletConnection, tokenConfig, toAddress, amount);\r\n default:\r\n return sendERC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n }\r\n};\r\n\r\n// Enhanced ERC20/BEP20 transaction function\r\nexport const sendERC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending ERC20/BEP20 transaction:', { tokenConfig, toAddress, amount });\r\n \r\n const provider = walletConnection.provider;\r\n const signer = provider.getSigner();\r\n \r\n const { contractAddress, decimals, symbol } = tokenConfig;\r\n \r\n // Convert amount to token units\r\n const tokenAmount = parseFloat(amount);\r\n const tokenDecimals = parseInt(decimals);\r\n \r\n let tokenUnits;\r\n try {\r\n tokenUnits = ethers.parseUnits ? \r\n ethers.parseUnits(tokenAmount.toString(), tokenDecimals) :\r\n ethers.utils.parseUnits(tokenAmount.toString(), tokenDecimals);\r\n } catch (err) {\r\n // Manual conversion fallback\r\n const value = tokenAmount * Math.pow(10, tokenDecimals);\r\n tokenUnits = {\r\n toString: () => value.toLocaleString('fullwide', { useGrouping: false })\r\n };\r\n }\r\n \r\n console.log(`Sending ${tokenAmount} ${symbol} (${tokenUnits.toString()} base units) to ${toAddress}`);\r\n \r\n try {\r\n // Create contract instance\r\n const tokenContract = new ethers.Contract(\r\n contractAddress,\r\n ['function transfer(address to, uint256 amount) returns (bool)'],\r\n signer\r\n );\r\n \r\n // Send transaction with increased gas limit for USDC\r\n const gasMultiplier = symbol === 'USDC' ? 1.5 : 1.2;\r\n const transaction = await tokenContract.transfer(toAddress, tokenUnits, {\r\n gasLimit: Math.floor(200000 * gasMultiplier) // Fixed gas limit with multiplier\r\n });\r\n \r\n console.log('ERC20 transaction sent:', transaction);\r\n return transaction.hash;\r\n } catch (error) {\r\n console.error('ERC20 transaction error:', error);\r\n \r\n if (error.message && error.message.includes('user rejected')) {\r\n throw new Error('Transaction rejected by user');\r\n } else if (error.message && error.message.includes('insufficient funds')) {\r\n throw new Error('Insufficient funds for transaction');\r\n } else {\r\n throw error;\r\n }\r\n }\r\n};\r\n\r\n// Enhanced TRC20 transaction function\r\nexport const sendTRC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending TRC20 transaction:', { tokenConfig, toAddress, amount });\r\n \r\n const tronWeb = walletConnection.provider;\r\n if (!tronWeb || !tronWeb.ready) {\r\n throw new Error('TronWeb not initialized');\r\n }\r\n \r\n const { contractAddress, decimals, symbol } = tokenConfig;\r\n const tokenAmount = parseFloat(amount);\r\n const tokenDecimals = parseInt(decimals);\r\n const amountWithDecimals = Math.floor(tokenAmount * Math.pow(10, tokenDecimals));\r\n \r\n console.log(`Sending ${tokenAmount} ${symbol} (${amountWithDecimals} base units) to ${toAddress}`);\r\n \r\n try {\r\n const contract = await tronWeb.contract().at(contractAddress);\r\n \r\n if (!contract.transfer) {\r\n throw new Error('Invalid TRC-20 contract');\r\n }\r\n \r\n const transaction = await contract.transfer(\r\n toAddress,\r\n amountWithDecimals.toString()\r\n ).send({\r\n feeLimit: 100000000, // 100 TRX fee limit\r\n callValue: 0,\r\n shouldPollResponse: false\r\n });\r\n \r\n console.log('TRC20 transaction sent:', transaction);\r\n return transaction;\r\n } catch (error) {\r\n console.error('TRC20 transaction failed:', error);\r\n \r\n if (error.message && error.message.includes('User rejected')) {\r\n throw new Error('Transaction rejected by user');\r\n } else if (error.message && error.message.includes('bandwidth')) {\r\n throw new Error('Insufficient energy or bandwidth. Make sure you have enough TRX for fees.');\r\n } else {\r\n throw new Error(`Transaction failed: ${error.message || 'Unknown error'}`);\r\n }\r\n }\r\n};\r\n\r\n// Enhanced Algorand asset transaction function\r\nexport const sendAlgorandAssetTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending Algorand asset transaction:', { tokenConfig, toAddress, amount });\r\n \r\n const lute = walletConnection.provider;\r\n const { assetId, decimals, symbol } = tokenConfig;\r\n \r\n const tokenAmount = parseFloat(amount);\r\n const tokenDecimals = parseInt(decimals);\r\n const assetAmount = Math.floor(tokenAmount * Math.pow(10, tokenDecimals));\r\n \r\n console.log(`Sending ${tokenAmount} ${symbol} (${assetAmount} base units) to ${toAddress}`);\r\n \r\n try {\r\n const transaction = await lute.sendAssetTransfer({\r\n recipient: toAddress,\r\n assetId: assetId,\r\n amount: assetAmount\r\n });\r\n \r\n console.log('Algorand asset transaction sent:', transaction);\r\n return transaction.txId;\r\n } catch (error) {\r\n console.error('Algorand asset transaction error:', error);\r\n \r\n if (error.message && error.message.includes('rejected')) {\r\n throw new Error('Transaction rejected by user');\r\n } else {\r\n throw error;\r\n }\r\n }\r\n};\r\n\r\n// Get token configuration for a specific currency and network\r\nexport const getTokenConfig = (currency, network) => {\r\n if (!currency || !network) {\r\n return null;\r\n }\r\n \r\n const tokenConfig = TOKEN_CONFIG[currency.toUpperCase()];\r\n if (!tokenConfig) {\r\n return null;\r\n }\r\n \r\n return tokenConfig[network.toLowerCase()];\r\n};\r\n\r\n// Generate mock transaction hash for testing\r\nexport const generateMockTransactionHash = (network) => {\r\n const chars = 'abcdef0123456789';\r\n let hash = '';\r\n \r\n let length = 64;\r\n \r\n if (network === NETWORK_TYPES.TRON) {\r\n length = 64;\r\n } else if (network === NETWORK_TYPES.ALGORAND) {\r\n length = 52;\r\n }\r\n \r\n for (let i = 0; i < length; i++) {\r\n hash += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n \r\n return hash;\r\n};\r\n\r\n// Export everything as default as well\r\nexport default {\r\n WALLET_TYPES,\r\n NETWORK_TYPES,\r\n NETWORK_CONFIG,\r\n TOKEN_CONFIG,\r\n NETWORK_WALLET_MAP,\r\n getWalletInstallUrl,\r\n detectWallets,\r\n detectWalletsWithRetry,\r\n debugWalletEnvironment,\r\n connectWallet,\r\n getSupportedWalletsForNetwork,\r\n sendNativeTransaction,\r\n sendTokenTransaction,\r\n sendTransaction,\r\n sendTRC20Transaction,\r\n sendERC20Transaction,\r\n sendAlgorandAssetTransaction,\r\n getTokenConfig,\r\n generateMockTransactionHash\r\n};","// // src/services/api.js\r\n// let apiConfig = {\r\n// apiKey: null,\r\n// apiSecret: null,\r\n// apiUrl: 'https://coinleyserver-production.up.railway.app',\r\n// merchantWalletAddresses: {} // Object for multi-network support\r\n// };\r\n\r\n// /**\r\n// * Initialize the API with configuration\r\n// * @param {Object} config - API configuration\r\n// */\r\n// export const initializeApi = (config) => {\r\n// apiConfig = { ...apiConfig, ...config };\r\n// console.log('API initialized with:', {\r\n// apiUrl: apiConfig.apiUrl,\r\n// apiKey: apiConfig.apiKey ? `${apiConfig.apiKey.substring(0, 6)}...` : null,\r\n// hasWalletAddresses: Object.keys(apiConfig.merchantWalletAddresses || {}).length > 0\r\n// });\r\n// };\r\n\r\n// /**\r\n// * Generate headers with authentication\r\n// * @returns {Object} - Headers object with authentication\r\n// */\r\n// const getHeaders = () => {\r\n// return {\r\n// 'Content-Type': 'application/json',\r\n// 'x-api-key': apiConfig.apiKey,\r\n// 'x-api-secret': apiConfig.apiSecret\r\n// };\r\n// };\r\n\r\n// /**\r\n// * Create a new payment\r\n// * @param {Object} paymentData - Payment data\r\n// * @returns {Promise} - Promise resolving to payment details\r\n// */\r\n// export const createPayment = async (paymentData) => {\r\n// try {\r\n// console.log('Creating payment with data:', paymentData);\r\n// console.log('API URL:', `${apiConfig.apiUrl}/api/payments/create`);\r\n \r\n// if (!paymentData.amount) {\r\n// throw new Error('Payment amount is required');\r\n// }\r\n \r\n// // Enhance payment data with merchant wallet addresses\r\n// const enhancedPaymentData = { \r\n// ...paymentData,\r\n// merchantWalletAddresses: {\r\n// ...apiConfig.merchantWalletAddresses,\r\n// ...paymentData.merchantWalletAddresses\r\n// }\r\n// };\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/create`, {\r\n// method: 'POST',\r\n// headers: getHeaders(),\r\n// body: JSON.stringify(enhancedPaymentData)\r\n// });\r\n\r\n// console.log('Create payment response status:', response.status);\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// // If the response isn't valid JSON\r\n// throw new Error(`Failed to create payment: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// console.error('Error creating payment:', errorData);\r\n// throw new Error(errorData.error || `Failed to create payment: ${response.status}`);\r\n// }\r\n\r\n// const data = await response.json();\r\n// console.log('Create payment response data:', data);\r\n \r\n// return data;\r\n// } catch (error) {\r\n// console.error('Create payment error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get payment details by ID\r\n// * @param {string} paymentId - Payment ID\r\n// * @returns {Promise} - Promise resolving to payment details\r\n// */\r\n// export const getPayment = async (paymentId) => {\r\n// try {\r\n// console.log('Getting payment:', paymentId);\r\n \r\n// if (!paymentId) {\r\n// throw new Error('Payment ID is required');\r\n// }\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/${paymentId}`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n\r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get payment: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// console.error('Error getting payment:', errorData);\r\n// throw new Error(errorData.error || `Failed to get payment: ${response.status}`);\r\n// }\r\n\r\n// const data = await response.json();\r\n// console.log('Get payment response:', data);\r\n \r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get payment error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Process a payment\r\n// * @param {Object} processData - Payment process data\r\n// * @returns {Promise} - Promise resolving to processed payment details\r\n// */\r\n// export const processPayment = async (processData) => {\r\n// try {\r\n// console.log('Processing payment with data:', processData);\r\n \r\n// if (!processData.paymentId) {\r\n// throw new Error('Payment ID is required');\r\n// }\r\n \r\n// if (!processData.transactionHash) {\r\n// throw new Error('Transaction hash is required');\r\n// }\r\n \r\n// console.log('API URL:', `${apiConfig.apiUrl}/api/payments/process`);\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/process`, {\r\n// method: 'POST',\r\n// headers: getHeaders(),\r\n// body: JSON.stringify(processData)\r\n// });\r\n\r\n// console.log('Process payment response status:', response.status);\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to process payment: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// console.error('Error processing payment:', errorData);\r\n// throw new Error(errorData.error || `Failed to process payment: ${response.status}`);\r\n// }\r\n\r\n// const data = await response.json();\r\n// console.log('Process payment response data:', data);\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Process payment error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get supported networks and tokens\r\n// * @returns {Promise} - Promise resolving to supported networks and tokens\r\n// */\r\n// export const getSupportedNetworks = async () => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/networks`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get networks: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get networks: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get supported networks error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get merchant profile including wallet addresses\r\n// * @returns {Promise} - Promise resolving to merchant profile\r\n// */\r\n// export const getMerchantProfile = async () => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/merchants/profile`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get merchant profile: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get merchant profile: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n \r\n// // Update apiConfig with retrieved addresses\r\n// if (data.merchant && data.merchant.walletAddresses) {\r\n// apiConfig.merchantWalletAddresses = {\r\n// ...apiConfig.merchantWalletAddresses,\r\n// ...data.merchant.walletAddresses\r\n// };\r\n// }\r\n \r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get merchant profile error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get merchant payments with filters\r\n// * @param {Object} options - Filter options\r\n// * @returns {Promise} - Promise resolving to payments list\r\n// */\r\n// export const getMerchantPayments = async (options = {}) => {\r\n// try {\r\n// const queryParams = new URLSearchParams();\r\n \r\n// Object.entries(options).forEach(([key, value]) => {\r\n// if (value !== null && value !== undefined) {\r\n// queryParams.append(key, value);\r\n// }\r\n// });\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments?${queryParams}`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get payments: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get payments: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get merchant payments error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get payment statistics\r\n// * @returns {Promise} - Promise resolving to payment statistics\r\n// */\r\n// export const getMerchantPaymentStats = async () => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/stats`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get payment stats: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get payment stats: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get payment stats error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Validate wallet address for specific network\r\n// * @param {string} address - Wallet address to validate\r\n// * @param {string} network - Network type\r\n// * @returns {Promise} - Promise resolving to validation result\r\n// */\r\n// export const validateWalletAddress = async (address, network) => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/wallets/validate`, {\r\n// method: 'POST',\r\n// headers: getHeaders(),\r\n// body: JSON.stringify({ address, network })\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to validate address: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to validate address: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Validate wallet address error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Generate mock transaction hash for testing\r\n// * @param {string} network - Network type\r\n// * @returns {string} - Mock transaction hash\r\n// */\r\n// export const generateMockTransactionHash = (network = 'ethereum') => {\r\n// const prefixes = {\r\n// ethereum: '0x',\r\n// bsc: '0x',\r\n// tron: '',\r\n// algorand: ''\r\n// };\r\n \r\n// const prefix = prefixes[network] || '0x';\r\n// const hash = Array.from({length: 64}, () => \r\n// Math.floor(Math.random() * 16).toString(16)).join('');\r\n \r\n// return `${prefix}${hash}`;\r\n// };\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// src/services/api.js - ENHANCED VERSION WITH WALLET ADDRESS RETRIEVAL\r\nlet apiConfig = {\r\n apiKey: null,\r\n apiSecret: null,\r\n apiUrl: 'https://coinleyserver-production.up.railway.app',\r\n merchantWalletAddresses: {}\r\n};\r\n\r\n/**\r\n * Initialize the API with configuration\r\n */\r\nexport const initializeApi = (config) => {\r\n apiConfig = { ...apiConfig, ...config };\r\n console.log('API initialized with:', {\r\n apiUrl: apiConfig.apiUrl,\r\n apiKey: apiConfig.apiKey ? `${apiConfig.apiKey.substring(0, 6)}...` : null,\r\n hasWalletAddresses: Object.keys(apiConfig.merchantWalletAddresses || {}).length > 0\r\n });\r\n \r\n // Auto-fetch merchant profile on initialization to get wallet addresses\r\n if (apiConfig.apiKey && apiConfig.apiSecret) {\r\n fetchMerchantWalletAddresses().then(wallets => {\r\n if (wallets) {\r\n apiConfig.merchantWalletAddresses = { ...apiConfig.merchantWalletAddresses, ...wallets };\r\n console.log('Auto-fetched merchant wallet addresses:', wallets);\r\n }\r\n }).catch(err => {\r\n console.warn('Could not auto-fetch merchant wallet addresses:', err.message);\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * Generate headers with authentication\r\n */\r\nconst getHeaders = () => {\r\n return {\r\n 'Content-Type': 'application/json',\r\n 'x-api-key': apiConfig.apiKey,\r\n 'x-api-secret': apiConfig.apiSecret\r\n };\r\n};\r\n\r\n/**\r\n * Fetch merchant wallet addresses from the API\r\n */\r\nexport const fetchMerchantWalletAddresses = async () => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/merchants/wallets`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch wallet addresses: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n \r\n // Transform the response to a simple network -> address mapping\r\n const walletAddresses = {};\r\n \r\n if (data.success && data.wallets) {\r\n data.wallets.forEach(wallet => {\r\n if (wallet.walletAddress && wallet.networkShortName) {\r\n walletAddresses[wallet.networkShortName] = wallet.walletAddress;\r\n }\r\n });\r\n }\r\n \r\n return walletAddresses;\r\n } catch (error) {\r\n console.error('Error fetching merchant wallet addresses:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Create a new payment with enhanced wallet address handling\r\n */\r\nexport const createPayment = async (paymentData) => {\r\n try {\r\n console.log('Creating payment with data:', paymentData);\r\n \r\n if (!paymentData.amount) {\r\n throw new Error('Payment amount is required');\r\n }\r\n \r\n // Ensure we have the latest merchant wallet addresses\r\n let merchantWallets = apiConfig.merchantWalletAddresses || {};\r\n \r\n // Try to fetch fresh wallet addresses if we don't have any\r\n if (Object.keys(merchantWallets).length === 0) {\r\n try {\r\n merchantWallets = await fetchMerchantWalletAddresses();\r\n apiConfig.merchantWalletAddresses = merchantWallets;\r\n } catch (fetchError) {\r\n console.warn('Could not fetch merchant wallet addresses:', fetchError.message);\r\n }\r\n }\r\n \r\n // Enhance payment data with merchant wallet addresses\r\n const enhancedPaymentData = { \r\n ...paymentData,\r\n merchantWalletAddresses: {\r\n ...merchantWallets,\r\n ...paymentData.merchantWalletAddresses\r\n }\r\n };\r\n \r\n console.log('Enhanced payment data:', {\r\n ...enhancedPaymentData,\r\n merchantWalletAddresses: enhancedPaymentData.merchantWalletAddresses\r\n });\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/create`, {\r\n method: 'POST',\r\n headers: getHeaders(),\r\n body: JSON.stringify(enhancedPaymentData)\r\n });\r\n\r\n console.log('Create payment response status:', response.status);\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to create payment: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n console.error('Error creating payment:', errorData);\r\n throw new Error(errorData.error || `Failed to create payment: ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n console.log('Create payment response data:', data);\r\n \r\n // Store merchant config for future use\r\n if (data.merchantConfig && data.merchantConfig.walletAddresses) {\r\n apiConfig.merchantWalletAddresses = {\r\n ...apiConfig.merchantWalletAddresses,\r\n ...data.merchantConfig.walletAddresses\r\n };\r\n }\r\n \r\n return data;\r\n } catch (error) {\r\n console.error('Create payment error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get payment details by ID with full merchant wallet information\r\n */\r\nexport const getPayment = async (paymentId) => {\r\n try {\r\n console.log('Getting payment:', paymentId);\r\n \r\n if (!paymentId) {\r\n throw new Error('Payment ID is required');\r\n }\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/${paymentId}`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n\r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get payment: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n console.error('Error getting payment:', errorData);\r\n throw new Error(errorData.error || `Failed to get payment: ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n console.log('Get payment response:', data);\r\n \r\n // Store merchant wallet addresses if included\r\n if (data.payment && data.payment.merchantWallets) {\r\n apiConfig.merchantWalletAddresses = {\r\n ...apiConfig.merchantWalletAddresses,\r\n ...data.payment.merchantWallets\r\n };\r\n }\r\n \r\n return data;\r\n } catch (error) {\r\n console.error('Get payment error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Process a payment with enhanced error handling\r\n */\r\nexport const processPayment = async (processData) => {\r\n try {\r\n console.log('Processing payment with data:', processData);\r\n \r\n if (!processData.paymentId) {\r\n throw new Error('Payment ID is required');\r\n }\r\n \r\n if (!processData.transactionHash) {\r\n throw new Error('Transaction hash is required');\r\n }\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/process`, {\r\n method: 'POST',\r\n headers: getHeaders(),\r\n body: JSON.stringify(processData)\r\n });\r\n\r\n console.log('Process payment response status:', response.status);\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to process payment: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n console.error('Error processing payment:', errorData);\r\n throw new Error(errorData.error || `Failed to process payment: ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n console.log('Process payment response data:', data);\r\n return data;\r\n } catch (error) {\r\n console.error('Process payment error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get supported networks and tokens\r\n */\r\nexport const getSupportedNetworks = async () => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/networks`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get networks: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get networks: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Get supported networks error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get tokens for a specific network\r\n */\r\nexport const getNetworkTokens = async (networkId) => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/networks/${networkId}/tokens`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get network tokens: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get network tokens: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Get network tokens error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get merchant profile including all wallet addresses\r\n */\r\nexport const getMerchantProfile = async () => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/merchants/dashboard`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get merchant profile: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get merchant profile: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n \r\n // Update apiConfig with retrieved addresses\r\n if (data.merchant) {\r\n const walletAddresses = {};\r\n \r\n // Extract wallet addresses from merchant data\r\n if (data.merchant.walletAddress) {\r\n walletAddresses.ethereum = data.merchant.walletAddress;\r\n }\r\n \r\n if (data.merchant.solWalletAddress) {\r\n walletAddresses.solana = data.merchant.solWalletAddress;\r\n }\r\n \r\n if (data.merchant.merchantWallets) {\r\n Object.assign(walletAddresses, data.merchant.merchantWallets);\r\n }\r\n \r\n apiConfig.merchantWalletAddresses = {\r\n ...apiConfig.merchantWalletAddresses,\r\n ...walletAddresses\r\n };\r\n }\r\n \r\n return data;\r\n } catch (error) {\r\n console.error('Get merchant profile error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get merchant payments with filters\r\n */\r\nexport const getMerchantPayments = async (options = {}) => {\r\n try {\r\n const queryParams = new URLSearchParams();\r\n \r\n Object.entries(options).forEach(([key, value]) => {\r\n if (value !== null && value !== undefined) {\r\n queryParams.append(key, value);\r\n }\r\n });\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/merchant/list?${queryParams}`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get payments: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get payments: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Get merchant payments error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get payment statistics\r\n */\r\nexport const getMerchantPaymentStats = async () => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/merchant/stats`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get payment stats: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get payment stats: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Get payment stats error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Validate wallet address for specific network\r\n */\r\nexport const validateWalletAddress = async (address, network) => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/wallets/validate`, {\r\n method: 'POST',\r\n headers: getHeaders(),\r\n body: JSON.stringify({ address, network })\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to validate address: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to validate address: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Validate wallet address error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get current API configuration including wallet addresses\r\n */\r\nexport const getApiConfig = () => {\r\n return {\r\n ...apiConfig,\r\n // Return a copy to prevent external modification\r\n merchantWalletAddresses: { ...apiConfig.merchantWalletAddresses }\r\n };\r\n};\r\n\r\n/**\r\n * Update merchant wallet addresses in config\r\n */\r\nexport const updateMerchantWalletAddresses = (addresses) => {\r\n apiConfig.merchantWalletAddresses = {\r\n ...apiConfig.merchantWalletAddresses,\r\n ...addresses\r\n };\r\n console.log('Updated merchant wallet addresses:', apiConfig.merchantWalletAddresses);\r\n};\r\n\r\n/**\r\n * Generate mock transaction hash for testing\r\n */\r\nexport const generateMockTransactionHash = (network = 'ethereum') => {\r\n const prefixes = {\r\n ethereum: '0x',\r\n bsc: '0x',\r\n tron: '',\r\n algorand: ''\r\n };\r\n \r\n const prefix = prefixes[network] || '0x';\r\n const hash = Array.from({length: 64}, () => \r\n Math.floor(Math.random() * 16).toString(16)).join('');\r\n \r\n return `${prefix}${hash}`;\r\n};","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// src/context/ThemeContext.jsx\r\nimport React, { createContext, useState, useContext, useEffect } from 'react';\r\n\r\nconst ThemeContext = createContext();\r\n\r\nexport const useTheme = () => useContext(ThemeContext);\r\n\r\nexport const ThemeProvider = ({ initialTheme = 'light', children }) => {\r\n const [theme, setTheme] = useState(initialTheme);\r\n\r\n const toggleTheme = () => {\r\n setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');\r\n };\r\n\r\n useEffect(() => {\r\n document.documentElement.classList.remove('light', 'dark');\r\n document.documentElement.classList.add(theme);\r\n }, [theme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n","// src/context/CoinleyContext.jsx\r\nimport React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport { initializeApi } from '../services/api';\r\n\r\nconst CoinleyContext = createContext();\r\n\r\nexport const useCoinley = () => useContext(CoinleyContext);\r\n\r\nexport const CoinleyProvider = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl = 'https://coinleyserver-production.up.railway.app',\r\n merchantWalletAddress = null, // New prop for merchant wallet address\r\n merchantSolWalletAddress = null, // New prop for Solana wallet address\r\n debug = false,\r\n children\r\n}) => {\r\n const [isInitialized, setIsInitialized] = useState(false);\r\n const [error, setError] = useState(null);\r\n const [paymentData, setPaymentData] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!apiKey || !apiSecret) {\r\n setError('API key and secret are required');\r\n return;\r\n }\r\n\r\n try {\r\n initializeApi({ \r\n apiKey, \r\n apiSecret, \r\n apiUrl,\r\n merchantWalletAddress, // Pass wallet address to API service\r\n merchantSolWalletAddress\r\n });\r\n \r\n setIsInitialized(true);\r\n \r\n if (debug) {\r\n console.log('Coinley SDK initialized with:', { \r\n apiKey, \r\n apiUrl,\r\n merchantWalletAddress: merchantWalletAddress ? `${merchantWalletAddress.substring(0, 6)}...${merchantWalletAddress.substring(merchantWalletAddress.length - 4)}` : 'Not provided',\r\n merchantSolWalletAddress: merchantSolWalletAddress ? `${merchantSolWalletAddress.substring(0, 6)}...${merchantSolWalletAddress.substring(merchantSolWalletAddress.length - 4)}` : 'Not provided'\r\n });\r\n }\r\n } catch (err) {\r\n setError(err.message);\r\n if (debug) {\r\n console.error('Coinley SDK initialization error:', err);\r\n }\r\n }\r\n }, [apiKey, apiSecret, apiUrl, merchantWalletAddress, merchantSolWalletAddress, debug]);\r\n\r\n // Method to store payment data from responses for easy context access\r\n const storePaymentData = (data) => {\r\n setPaymentData(data);\r\n return data;\r\n };\r\n\r\n const value = {\r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n merchantWalletAddress,\r\n merchantSolWalletAddress,\r\n isInitialized,\r\n error,\r\n debug,\r\n paymentData,\r\n storePaymentData\r\n };\r\n\r\n return (\r\n <CoinleyContext.Provider value={value}>\r\n {children}\r\n </CoinleyContext.Provider>\r\n );\r\n};","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n","// src/components/QRCode.jsx\r\nimport React, { useEffect, useState } from 'react';\r\nimport { QRCodeSVG } from 'qrcode.react';\r\n\r\n/**\r\n * Enhanced QR Code component that generates network-specific payment QR codes\r\n */\r\nconst QRCode = ({ \r\n walletAddress, \r\n amount, \r\n currency, \r\n network,\r\n theme = 'light',\r\n size = 200 \r\n}) => {\r\n const [qrData, setQrData] = useState('');\r\n const [qrError, setQrError] = useState(null);\r\n \r\n useEffect(() => {\r\n if (!walletAddress || walletAddress === 'No address configured') {\r\n setQrError('No wallet address configured for this network');\r\n return;\r\n }\r\n \r\n try {\r\n let paymentData;\r\n \r\n // Format QR code data based on network and currency\r\n switch (network) {\r\n case 'tron':\r\n if (currency === 'TRX') {\r\n // Native TRX transfer\r\n paymentData = `tronlink://transfer?to=${walletAddress}&amount=${amount}`;\r\n } else {\r\n // TRC20 token transfer - just the address for manual entry\r\n paymentData = walletAddress;\r\n }\r\n break;\r\n \r\n case 'algorand':\r\n // Algorand payment URI\r\n paymentData = `algorand://${walletAddress}?amount=${Math.floor(parseFloat(amount) * 1000000)}`;\r\n break;\r\n \r\n case 'bsc':\r\n // BSC - similar to Ethereum but different network\r\n if (currency === 'BNB') {\r\n paymentData = `ethereum:${walletAddress}@56?value=${convertToWei(amount)}`;\r\n } else {\r\n // BEP20 tokens\r\n const tokenAddress = getTokenAddressForCurrency(currency, 'bsc');\r\n if (tokenAddress) {\r\n paymentData = `ethereum:${tokenAddress}/transfer?address=${walletAddress}&uint256=${convertToSmallestUnit(amount, currency)}@56`;\r\n } else {\r\n paymentData = walletAddress;\r\n }\r\n }\r\n break;\r\n \r\n case 'ethereum':\r\n default:\r\n if (currency === 'ETH') {\r\n // Native ETH transfer\r\n paymentData = `ethereum:${walletAddress}@1?value=${convertToWei(amount)}`;\r\n } else {\r\n // ERC20 token transfer\r\n const tokenAddress = getTokenAddressForCurrency(currency, 'ethereum');\r\n if (tokenAddress) {\r\n paymentData = `ethereum:${tokenAddress}/transfer?address=${walletAddress}&uint256=${convertToSmallestUnit(amount, currency)}`;\r\n } else {\r\n paymentData = walletAddress;\r\n }\r\n }\r\n break;\r\n }\r\n \r\n setQrData(paymentData);\r\n setQrError(null);\r\n } catch (err) {\r\n console.error('Error generating QR code:', err);\r\n setQrError('Error generating payment QR code');\r\n }\r\n }, [walletAddress, amount, currency, network]);\r\n \r\n // Helper function to get token contract address\r\n const getTokenAddressForCurrency = (currency, network) => {\r\n const tokenAddresses = {\r\n ethereum: {\r\n 'USDT': '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n 'USDC': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\r\n },\r\n bsc: {\r\n 'USDT': '0x55d398326f99059fF775485246999027B3197955',\r\n 'USDC': '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d'\r\n },\r\n tron: {\r\n 'USDT': 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\r\n 'USDC': 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8'\r\n }\r\n };\r\n \r\n return tokenAddresses[network]?.[currency] || '';\r\n };\r\n \r\n // Helper to convert amount to smallest unit based on currency\r\n const convertToSmallestUnit = (amount, currency) => {\r\n const decimals = currency === 'USDT' || currency === 'USDC' ? 6 : 18;\r\n return Math.floor(parseFloat(amount) * Math.pow(10, decimals)).toString();\r\n };\r\n \r\n // Helper to convert ETH to wei\r\n const convertToWei = (amount) => {\r\n return Math.floor(parseFloat(amount) * 1e18).toString();\r\n };\r\n\r\n // Get network display name\r\n const getNetworkDisplayName = (network) => {\r\n const names = {\r\n ethereum: 'Ethereum',\r\n bsc: 'BSC',\r\n tron: 'Tron',\r\n algorand: 'Algorand'\r\n };\r\n return names[network] || network;\r\n };\r\n\r\n // Get wallet app suggestions based on network\r\n const getWalletSuggestions = (network) => {\r\n const suggestions = {\r\n ethereum: ['MetaMask', 'Trust Wallet', 'Coinbase Wallet'],\r\n bsc: ['MetaMask', 'Trust Wallet', 'SafePal'],\r\n tron: ['TronLink', 'Trust Wallet'],\r\n algorand: ['Pera Wallet', 'MyAlgo Wallet']\r\n };\r\n return suggestions[network] || ['MetaMask', 'Trust Wallet'];\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col items-center\">\r\n {qrError ? (\r\n <div className=\"p-4 rounded-lg bg-red-100 mb-3 text-red-700 text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-8 w-8 mx-auto mb-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\r\n </svg>\r\n <p className=\"font-medium\">{qrError}</p>\r\n </div>\r\n ) : (\r\n <div className=\"p-4 rounded-lg bg-white mb-3 shadow-sm border\">\r\n {qrData && (\r\n <QRCodeSVG\r\n value={qrData}\r\n size={size}\r\n bgColor={theme === 'dark' ? '#374151' : '#FFFFFF'}\r\n fgColor={theme === 'dark' ? '#FFFFFF' : '#000000'}\r\n level=\"H\"\r\n includeMargin={true}\r\n />\r\n )}\r\n </div>\r\n )}\r\n \r\n <div className=\"text-center text-sm text-gray-700 mb-4\">\r\n <p className='font-semibold text-gray-800 flex items-center justify-center'>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M12 12h-4.01M12 12V8.01\" />\r\n </svg>\r\n Scan to Pay with {currency}\r\n </p>\r\n <p className=\"text-xs text-gray-500 mt-1\">\r\n Scan with your {getNetworkDisplayName(network)} wallet app\r\n </p>\r\n </div>\r\n \r\n {/* Payment Amount Display */}\r\n <div className=\"w-full mb-4 p-3 bg-gray-50 rounded-lg\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm font-medium text-gray-700\">Amount to Pay:</span>\r\n <span className=\"text-lg font-bold text-[#7042D2]\">{amount} {currency}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center mt-1\">\r\n <span className=\"text-xs text-gray-500\">Network:</span>\r\n <span className=\"text-xs font-medium text-gray-700\">{getNetworkDisplayName(network)}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Wallet Address Display */}\r\n {!qrError && (\r\n <div className=\"w-full mb-4\">\r\n <p className=\"text-xs text-gray-500 mb-1 text-center\">\r\n Or copy wallet address:\r\n </p>\r\n <div className=\"text-xs font-mono p-2 rounded bg-gray-100 text-gray-700 break-all text-center select-all cursor-pointer border\"\r\n onClick={() => navigator.clipboard?.writeText(walletAddress)}\r\n title=\"Click to copy\">\r\n {walletAddress}\r\n </div>\r\n </div>\r\n )}\r\n \r\n {/* Instructions */}\r\n <div className=\"w-full\">\r\n <div className=\"p-3 rounded bg-blue-50 border border-blue-200\">\r\n <h4 className=\"text-sm font-medium mb-2 text-blue-800 flex items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\r\n </svg>\r\n Payment Instructions\r\n </h4>\r\n <ol className=\"text-xs space-y-1 text-blue-700\">\r\n <li>1. Open your crypto wallet app ({getWalletSuggestions(network).join(', ')})</li>\r\n <li>2. Scan the QR code above or copy the wallet address</li>\r\n <li>3. Send exactly <strong>{amount} {currency}</strong> on {getNetworkDisplayName(network)} network</li>\r\n <li>4. Click \"I have sent the payment\" button below after sending</li>\r\n </ol>\r\n \r\n <div className=\"mt-3 p-2 bg-yellow-50 border border-yellow-200 rounded\">\r\n <p className=\"text-xs text-yellow-800\">\r\n <strong>Important:</strong> Make sure you're sending on the correct network ({getNetworkDisplayName(network)}) \r\n and using the exact amount shown above.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default QRCode;\r\n\r\n","// src/components/PaymentStatus.jsx\r\nimport React from 'react';\r\n\r\n/**\r\n * Component to display payment status\r\n */\r\nconst PaymentStatus = ({ status, message, theme = 'light' }) => {\r\n // Render different icons based on status\r\n const renderIcon = () => {\r\n switch (status) {\r\n case 'processing':\r\n return (\r\n <div className=\"animate-spin rounded-full h-12 w-12 border-4 border-t-blue-500 border-blue-500/20\"></div>\r\n );\r\n case 'success':\r\n return (\r\n <div className=\"rounded-full h-12 w-12 bg-green-100 flex items-center justify-center\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className=\"h-8 w-8 text-green-500\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </div>\r\n );\r\n case 'error':\r\n return (\r\n <div className=\"rounded-full h-12 w-12 bg-red-100 flex items-center justify-center\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className=\"h-8 w-8 text-red-500\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </div>\r\n );\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n // Get status title\r\n const getStatusTitle = () => {\r\n switch (status) {\r\n case 'processing':\r\n return 'Processing Payment';\r\n case 'success':\r\n return 'Payment Successful';\r\n case 'error':\r\n return 'Payment Failed';\r\n default:\r\n return 'Unknown Status';\r\n }\r\n };\r\n\r\n // Get appropriate text color for message\r\n const getMessageClasses = () => {\r\n switch (status) {\r\n case 'processing':\r\n return theme === 'dark' ? 'text-blue-300' : 'text-blue-600';\r\n case 'success':\r\n return theme === 'dark' ? 'text-green-300' : 'text-green-600';\r\n case 'error':\r\n return theme === 'dark' ? 'text-red-300' : 'text-red-600';\r\n default:\r\n return theme === 'dark' ? 'text-gray-300' : 'text-gray-600';\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-6\">\r\n <div className=\"mb-4\">{renderIcon()}</div>\r\n <h3 className={`text-xl font-bold mb-2 ${theme === 'dark' ? 'text-white' : 'text-gray-900'}`}>\r\n {getStatusTitle()}\r\n </h3>\r\n <p className={`text-center ${getMessageClasses()}`}>{message}</p>\r\n\r\n {status === 'processing' && (\r\n <div className={`mt-4 text-xs ${theme === 'dark' ? 'text-gray-400' : 'text-gray-500'}`}>\r\n This may take a few moments. Please do not close this window.\r\n </div>\r\n )}\r\n\r\n {status === 'success' && (\r\n <div className={`mt-4 p-2 rounded ${theme === 'dark' ? 'bg-gray-700' : 'bg-gray-100'}`}>\r\n <p className={`text-xs ${theme === 'dark' ? 'text-gray-300' : 'text-gray-600'}`}>\r\n Your payment has been successfully processed. You will receive a confirmation shortly.\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PaymentStatus;","// src/components/PaymentMethods.jsx\r\nimport React, { useState, useEffect } from 'react';\r\nimport { NETWORK_TYPES, TOKEN_CONFIG, detectWallets, WALLET_TYPES } from '../services/walletService';\r\n\r\n/**\r\n * Payment methods component with network dropdown and currency grid\r\n */\r\nconst PaymentMethods = ({ onSelect, selected, theme = 'light', supportedNetworks = [] }) => {\r\n const [selectedNetwork, setSelectedNetwork] = useState(NETWORK_TYPES.ETHEREUM);\r\n const [availableWallets, setAvailableWallets] = useState({});\r\n const [showMore, setShowMore] = useState(false);\r\n\r\n useEffect(() => {\r\n setAvailableWallets(detectWallets());\r\n }, []);\r\n\r\n // Available networks\r\n const networks = [\r\n {\r\n id: NETWORK_TYPES.ETHEREUM,\r\n name: 'Ethereum',\r\n description: 'ERC-20 tokens'\r\n },\r\n {\r\n id: NETWORK_TYPES.BSC,\r\n name: 'BSC (Binance Smart Chain)',\r\n description: 'BEP-20 tokens'\r\n },\r\n {\r\n id: NETWORK_TYPES.TRON,\r\n name: 'Tron',\r\n description: 'TRC-20 tokens'\r\n },\r\n {\r\n id: NETWORK_TYPES.ALGORAND,\r\n name: 'Algorand',\r\n description: 'ASA tokens'\r\n }\r\n ];\r\n\r\n // Payment methods based on selected network\r\n const getPaymentMethodsForNetwork = (network) => {\r\n const methods = [];\r\n \r\n switch (network) {\r\n case NETWORK_TYPES.ETHEREUM:\r\n methods.push(\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'PYUSD',\r\n name: 'PYUSD',\r\n description: 'PayPal USD',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/28492.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'FRAX',\r\n name: 'FRAX',\r\n description: 'Frax',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/6952.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'USDP',\r\n name: 'USDP',\r\n description: 'Pax Dollar',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/6662.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'DAI',\r\n name: 'DAI',\r\n description: 'Dai Stablecoin',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4943.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'ETH',\r\n name: 'ETH',\r\n description: 'Ethereum',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTcyJyRKN0dRJWVZqoLzYgkRHdJsxKGq8nHUw&s',\r\n network: NETWORK_TYPES.ETHEREUM\r\n }\r\n );\r\n break;\r\n \r\n case NETWORK_TYPES.BSC:\r\n methods.push(\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'BUSD',\r\n name: 'BUSD',\r\n description: 'Binance USD',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4687.png',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'FRAX',\r\n name: 'FRAX',\r\n description: 'Frax',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/6952.png',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'BNB',\r\n name: 'BNB',\r\n description: 'Binance Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRHSjyW2sSnBhwztCwVW97i1BtV40g7heMMxg&s',\r\n network: NETWORK_TYPES.BSC\r\n }\r\n );\r\n break;\r\n \r\n case NETWORK_TYPES.TRON:\r\n methods.push(\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.TRON\r\n },\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.TRON\r\n },\r\n {\r\n id: 'USDJ',\r\n name: 'USDJ',\r\n description: 'JUST Stablecoin',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5446.png',\r\n network: NETWORK_TYPES.TRON\r\n },\r\n {\r\n id: 'TRX',\r\n name: 'TRX',\r\n description: 'Tron',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQKLpLNsGRHbZfCUXAjZLPSp_YFZvX5dMnAoA&s',\r\n network: NETWORK_TYPES.TRON\r\n }\r\n );\r\n break;\r\n \r\n case NETWORK_TYPES.ALGORAND:\r\n methods.push(\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.ALGORAND\r\n },\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.ALGORAND\r\n },\r\n {\r\n id: 'ALGO',\r\n name: 'ALGO',\r\n description: 'Algorand',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4030.png',\r\n network: NETWORK_TYPES.ALGORAND\r\n }\r\n );\r\n break;\r\n \r\n default:\r\n break;\r\n }\r\n \r\n return methods;\r\n };\r\n\r\n const handleNetworkChange = (networkId) => {\r\n setSelectedNetwork(networkId);\r\n setShowMore(false); // Reset show more when network changes\r\n \r\n // Reset selection when network changes\r\n if (selected?.network !== networkId) {\r\n onSelect(null);\r\n }\r\n };\r\n\r\n const handleSelectPaymentMethod = (method) => {\r\n onSelect({\r\n currency: method.id,\r\n network: selectedNetwork,\r\n tokenConfig: TOKEN_CONFIG[method.id]?.[selectedNetwork],\r\n method: method\r\n });\r\n };\r\n\r\n const availableMethods = getPaymentMethodsForNetwork(selectedNetwork);\r\n const visibleMethods = showMore ? availableMethods : availableMethods.slice(0, 4);\r\n\r\n // Helper functions with correct wallet constants\r\n function getRequiredWallet(network) {\r\n switch (network) {\r\n case NETWORK_TYPES.ETHEREUM:\r\n case NETWORK_TYPES.BSC:\r\n return WALLET_TYPES.METAMASK; // Use the actual constant\r\n case NETWORK_TYPES.TRON:\r\n return WALLET_TYPES.TRONLINK; // Use the actual constant\r\n case NETWORK_TYPES.ALGORAND:\r\n return WALLET_TYPES.LUTE; // Use the actual constant\r\n default:\r\n return WALLET_TYPES.METAMASK;\r\n }\r\n }\r\n\r\n function getNetworkRequirement(network) {\r\n const wallet = getRequiredWallet(network);\r\n const isAvailable = availableWallets[wallet];\r\n \r\n const walletNames = {\r\n [WALLET_TYPES.METAMASK]: 'MetaMask',\r\n [WALLET_TYPES.TRONLINK]: 'TronLink',\r\n [WALLET_TYPES.TRUST_WALLET]: 'Trust Wallet',\r\n [WALLET_TYPES.LUTE]: 'Lute Wallet'\r\n };\r\n \r\n return isAvailable \r\n ? `${walletNames[wallet]} detected - Ready to pay`\r\n : `${walletNames[wallet]} required - Please install to continue`;\r\n }\r\n\r\n return (\r\n <div>\r\n <h3 className={`text-lg font-medium mb-4 ${theme === 'dark' ? 'text-white' : 'text-gray-800'}`}>\r\n Select Payment Method\r\n </h3>\r\n \r\n {/* Blockchain Network Dropdown */}\r\n <div className=\"mb-6\">\r\n <label className={`block text-sm font-medium mb-2 ${theme === 'dark' ? 'text-white' : 'text-gray-700'}`}>\r\n Blockchain Network\r\n </label>\r\n <select\r\n value={selectedNetwork}\r\n onChange={(e) => handleNetworkChange(e.target.value)}\r\n className={`w-full p-3 rounded-lg border transition-colors ${\r\n theme === 'dark'\r\n ? 'bg-gray-700 border-gray-600 text-white focus:border-[#7042D2]'\r\n : 'bg-white border-gray-300 text-gray-900 focus:border-[#7042D2]'\r\n } focus:outline-none focus:ring-2 focus:ring-[#7042D2] focus:ring-opacity-50`}\r\n >\r\n {networks\r\n .filter(network => supportedNetworks.length === 0 || supportedNetworks.includes(network.id))\r\n .map((network) => (\r\n <option key={network.id} value={network.id}>\r\n {network.name} - {network.description}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* Stablecoins/Tokens Grid */}\r\n <div className=\"mb-4\">\r\n <label className={`block text-sm font-medium mb-3 ${theme === 'dark' ? 'text-white' : 'text-gray-700'}`}>\r\n Choose Cryptocurrency\r\n </label>\r\n \r\n <div className=\"grid grid-cols-2 gap-3 mb-4\">\r\n {visibleMethods.map((method) => (\r\n <button\r\n key={`${method.id}-${method.network}`}\r\n onClick={() => handleSelectPaymentMethod(method)}\r\n className={`p-4 rounded-lg transition-all duration-200 border-2 ${\r\n selected?.currency === method.id && selected?.network === selectedNetwork\r\n ? theme === 'dark'\r\n ? 'bg-blue-900/30 border-[#7042D2] ring-2 ring-[#7042D2] ring-opacity-50'\r\n : 'bg-blue-50 border-[#7042D2] ring-2 ring-[#7042D2] ring-opacity-50'\r\n : theme === 'dark'\r\n ? 'bg-gray-700 hover:bg-gray-600 border-gray-600 hover:border-gray-500'\r\n : 'bg-white hover:bg-gray-50 border-gray-200 hover:border-gray-300'\r\n }`}\r\n >\r\n <div className=\"flex flex-col items-center text-center\">\r\n <div className=\"flex-shrink-0 h-10 w-10 bg-white rounded-full flex items-center justify-center mb-2 shadow-sm\">\r\n <img src={method.logo} alt={method.name} className=\"h-6 w-6\" />\r\n </div>\r\n <div>\r\n <h4 className={`font-medium text-sm ${theme === 'dark' ? 'text-white' : 'text-gray-900'}`}>\r\n {method.name}\r\n </h4>\r\n <p className={`text-xs ${theme === 'dark' ? 'text-gray-300' : 'text-gray-500'}`}>\r\n {method.description}\r\n </p>\r\n </div>\r\n {selected?.currency === method.id && selected?.network === selectedNetwork && (\r\n <div className=\"mt-2\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className=\"h-4 w-4 text-[#7042D2]\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"currentColor\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\r\n clipRule=\"evenodd\"\r\n />\r\n </svg>\r\n </div>\r\n )}\r\n </div>\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Show More/Less Button */}\r\n {availableMethods.length > 4 && (\r\n <button\r\n onClick={() => setShowMore(!showMore)}\r\n className={`w-full py-2 px-4 rounded-lg text-sm font-medium transition-colors ${\r\n theme === 'dark'\r\n ? 'bg-gray-700 text-gray-300 hover:bg-gray-600'\r\n : 'bg-gray-100 text-gray-600 hover:bg-gray-200'\r\n }`}\r\n >\r\n {showMore ? 'Show Less' : `Show More (${availableMethods.length - 4} more)`}\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* Network Info */}\r\n <div className={`p-3 rounded-lg text-sm ${\r\n theme === 'dark' ? 'bg-gray-800 text-gray-300' : 'bg-gray-50 text-gray-600'\r\n }`}>\r\n <div className=\"flex items-center\">\r\n <div className={`w-2 h-2 rounded-full mr-2 ${\r\n availableWallets[getRequiredWallet(selectedNetwork)] ? 'bg-green-500' : 'bg-red-500'\r\n }`}></div>\r\n <span className=\"text-xs\">\r\n {getNetworkRequirement(selectedNetwork)}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PaymentMethods;","export default \"data:image/png;base64,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\"","// src/components/CoinleyModal.jsx\r\nimport React, { useState, useEffect } from 'react';\r\nimport PaymentMethods from './PaymentMethods';\r\nimport PaymentStatus from './PaymentStatus';\r\nimport QRCode from './QRCode';\r\nimport { WALLET_TYPES, getWalletInstallUrl, detectWallets, debugWalletEnvironment } from '../services/walletService';\r\nimport logo from '../assets/Logo.png';\r\n\r\nconst CoinleyModal = ({\r\n isOpen,\r\n onClose,\r\n payment,\r\n paymentStatus,\r\n selectedPaymentMethod,\r\n onPaymentMethodSelect,\r\n onPayment,\r\n onBack,\r\n error,\r\n theme = 'light',\r\n merchantName,\r\n transactionHash,\r\n walletConnection,\r\n onConnectWallet,\r\n testMode = false,\r\n supportedNetworks = [],\r\n availableWallets = {},\r\n supportedWallets = [],\r\n step = 'select-currency',\r\n merchantWalletAddresses = {},\r\n debug = false\r\n}) => {\r\n const [paymentType, setPaymentType] = useState('wallet'); // 'wallet' or 'qrcode'\r\n\r\n // Get wallet address for current network\r\n const getWalletAddressForNetwork = () => {\r\n if (!selectedPaymentMethod) return 'No network selected';\r\n \r\n const networkAddress = merchantWalletAddresses[selectedPaymentMethod.network];\r\n if (networkAddress) {\r\n return networkAddress;\r\n }\r\n \r\n // Fallback to payment recipient wallet if available\r\n if (payment?.recipientWallet) {\r\n return payment.recipientWallet;\r\n }\r\n \r\n return 'No wallet address configured for this network';\r\n };\r\n\r\n // Utility functions\r\n const formatAmount = (amount) => {\r\n return parseFloat(amount).toFixed(2);\r\n };\r\n\r\n const formatTransactionHash = (hash) => {\r\n if (!hash) return '';\r\n if (hash.length <= 14) return hash;\r\n return `${hash.slice(0, 8)}...${hash.slice(-6)}`;\r\n };\r\n\r\n const getNetworkDisplayName = (network) => {\r\n const names = {\r\n ethereum: 'Ethereum',\r\n bsc: 'BSC',\r\n tron: 'Tron',\r\n algorand: 'Algorand'\r\n };\r\n return names[network] || network;\r\n };\r\n\r\n const getWalletDisplayName = (walletType) => {\r\n const names = {\r\n [WALLET_TYPES.METAMASK]: 'MetaMask',\r\n [WALLET_TYPES.TRONLINK]: 'TronLink',\r\n [WALLET_TYPES.TRUST_WALLET]: 'Trust Wallet',\r\n [WALLET_TYPES.LUTE]: 'Lute Wallet'\r\n };\r\n return names[walletType] || walletType;\r\n };\r\n\r\n const getWalletIcon = (walletType) => {\r\n const icons = {\r\n [WALLET_TYPES.METAMASK]: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT3ymr3UNKopfI0NmUY95Dr-0589vG-91KuAA&s',\r\n [WALLET_TYPES.TRONLINK]: 'https://www.tronlink.org/images/logo.png',\r\n [WALLET_TYPES.TRUST_WALLET]: 'https://trustwallet.com/assets/images/trust_logotype.svg',\r\n [WALLET_TYPES.LUTE]: 'https://lute.app/logo.png'\r\n };\r\n return icons[walletType] || '';\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 overflow-y-auto bg-black/50\">\r\n <div className=\"flex min-h-screen items-center justify-center p-4\">\r\n <div className=\"relative p-6 w-full max-w-md mx-auto rounded-lg shadow-xl bg-white text-gray-800\">\r\n {/* Header */}\r\n <div className=\"flex justify-between items-center mb-6 bg-[#F1ECFB] p-3 rounded-xl\">\r\n <div className=\"flex items-center\">\r\n <h2 className=\"text-xl font-bold text-gray-900\">\r\n <img src={logo} className='w-32' alt=\"Coinley Logo\" />\r\n </h2>\r\n </div>\r\n <button \r\n onClick={onClose}\r\n className=\"text-gray-500 hover:text-gray-700 focus:outline-none\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n \r\n {/* Content */}\r\n <div className=\"mb-6 bg-[#F1ECFB] p-3 rounded-xl\">\r\n {payment && (\r\n <div className=\"mb-6 p-4 rounded-lg\">\r\n <p className=\"text-lg text-gray-800 font-semibold\">\r\n PAY: {merchantName}\r\n </p>\r\n <div className=\"flex justify-between items-center mt-2 bg-gray-100 px-3 rounded-lg\">\r\n <span className=\"font-medium text-gray-700\">\r\n Amount:\r\n </span>\r\n <span className=\"font-bold text-xl text-[#7042D2]\">\r\n ${formatAmount(payment.totalAmount || payment.amount)}\r\n </span>\r\n </div>\r\n <div className=\"text-xs mt-1 text-right\">\r\n <span className=\"text-gray-500\">\r\n Payment ID: {payment.id ? payment.id.slice(0, 8) : ''}...\r\n </span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Debug Button - Only in debug mode */}\r\n {debug && (\r\n <div className=\"mb-2 text-right\">\r\n <button\r\n onClick={() => {\r\n console.log('=== DEBUG INFO ===');\r\n console.log('Current step:', step);\r\n console.log('Payment method:', selectedPaymentMethod);\r\n console.log('Wallet connection:', walletConnection);\r\n debugWalletEnvironment();\r\n }}\r\n className=\"text-xs bg-gray-200 p-1 rounded\"\r\n >\r\n Debug\r\n </button>\r\n </div>\r\n )}\r\n\r\n {/* Step: Select Currency/Network */}\r\n {step === 'select-currency' && (\r\n <div>\r\n <PaymentMethods \r\n onSelect={onPaymentMethodSelect} \r\n selected={selectedPaymentMethod}\r\n theme={theme}\r\n supportedNetworks={supportedNetworks}\r\n />\r\n \r\n {/* Proceed Button - Only show if a payment method is selected */}\r\n {selectedPaymentMethod && (\r\n <div className=\"mt-6\">\r\n <button\r\n onClick={() => {\r\n console.log('Proceed button clicked, calling onPaymentMethodSelect');\r\n onPaymentMethodSelect(selectedPaymentMethod);\r\n }}\r\n className=\"w-full py-3 px-4 bg-[#7042D2] hover:bg-[#7042D2] text-white font-medium rounded-lg transition-colors\"\r\n disabled={!selectedPaymentMethod}\r\n >\r\n Proceed with {selectedPaymentMethod.currency} on {getNetworkDisplayName(selectedPaymentMethod.network)}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Step: Confirm Payment */}\r\n {step === 'confirm' && selectedPaymentMethod && payment && (\r\n <div>\r\n <div className=\"p-4 rounded-lg mb-4 bg-gray-100\">\r\n <h3 className=\"text-lg font-medium mb-2 text-gray-800\">\r\n Payment Details\r\n </h3>\r\n <div className=\"space-y-2\">\r\n <div className=\"flex justify-between\">\r\n <span className=\"text-[#7042D2] font-semibold\">Currency:</span>\r\n <span className=\"font-medium\">{selectedPaymentMethod.currency}</span>\r\n </div>\r\n <div className=\"flex justify-between\">\r\n <span className=\"text-[#7042D2] font-semibold\">Network:</span>\r\n <span className=\"font-medium\">{getNetworkDisplayName(selectedPaymentMethod.network)}</span>\r\n </div>\r\n <div className=\"flex justify-between\">\r\n <span className=\"text-[#7042D2] font-semibold\">Fee:</span>\r\n <span className=\"font-medium\">1.75%</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Payment Method Tabs */}\r\n <div className=\"mb-4\">\r\n <div className=\"flex border-b border-gray-200\">\r\n <button\r\n onClick={() => setPaymentType('wallet')}\r\n className={`py-2 px-4 text-sm font-medium ${\r\n paymentType === 'wallet'\r\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\r\n : 'text-gray-500 hover:text-gray-700'\r\n }`}\r\n >\r\n Connect Wallet\r\n </button>\r\n <button\r\n onClick={() => setPaymentType('qrcode')}\r\n className={`py-2 px-4 text-sm font-medium ${\r\n paymentType === 'qrcode'\r\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\r\n : 'text-gray-500 hover:text-gray-700'\r\n }`}\r\n >\r\n QR Code\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {testMode ? (\r\n // Test mode payment option\r\n <div className=\"p-4 rounded-lg mb-4 bg-blue-50\">\r\n <div className=\"flex items-center\">\r\n <div className=\"bg-[#7042D2] rounded-full p-2 mr-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6 text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\r\n </svg>\r\n </div>\r\n <div>\r\n <h3 className=\"font-medium text-gray-800\">\r\n Test Mode Payment\r\n </h3>\r\n <p className=\"text-sm text-gray-600\">\r\n Click \"Pay Now\" to simulate a successful payment\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n ) : paymentType === 'qrcode' ? (\r\n // QR Code payment option\r\n <div className=\"mb-4\">\r\n <QRCode \r\n walletAddress={getWalletAddressForNetwork()} \r\n amount={payment.totalAmount || payment.amount}\r\n currency={selectedPaymentMethod.currency}\r\n network={selectedPaymentMethod.network}\r\n theme={theme}\r\n />\r\n </div>\r\n ) : (\r\n // Wallet connection option\r\n <div className=\"space-y-3 mb-4\">\r\n {supportedWallets.length === 0 ? (\r\n <div className=\"p-4 rounded-lg bg-yellow-50\">\r\n <div className=\"flex items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6 text-yellow-500 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\r\n </svg>\r\n <div>\r\n <h3 className=\"font-medium text-gray-800\">No Compatible Wallets</h3>\r\n <p className=\"text-sm text-gray-600\">\r\n No wallets detected for {getNetworkDisplayName(selectedPaymentMethod.network)} network\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n ) : (\r\n supportedWallets.map((walletType) => (\r\n <div key={walletType} className=\"p-4 rounded-lg bg-blue-50\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center\">\r\n <img \r\n src={getWalletIcon(walletType)} \r\n alt={getWalletDisplayName(walletType)}\r\n className=\"w-8 h-8 mr-3\"\r\n onError={(e) => {\r\n e.target.style.display = 'none';\r\n }}\r\n />\r\n <div>\r\n <h3 className=\"font-medium text-gray-800\">\r\n {getWalletDisplayName(walletType)}\r\n </h3>\r\n <p className=\"text-sm text-gray-600\">\r\n Pay with {getWalletDisplayName(walletType)}\r\n </p>\r\n </div>\r\n </div>\r\n \r\n {walletConnection?.walletType === walletType ? (\r\n <div className=\"flex items-center space-x-2\">\r\n <div className=\"w-2 h-2 bg-green-500 rounded-full\"></div>\r\n <span className=\"text-sm text-green-600\">Connected</span>\r\n </div>\r\n ) : (\r\n <button\r\n onClick={() => {\r\n console.log('Connect wallet button clicked for:', walletType);\r\n onConnectWallet(walletType);\r\n }}\r\n className=\"py-2 px-4 bg-[#7042D2] hover:bg-[#7042D2] text-white font-medium rounded-md text-sm\"\r\n >\r\n Connect\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n ))\r\n )}\r\n\r\n {/* Install wallet links for missing wallets */}\r\n <div className=\"space-y-2\">\r\n {Object.entries(availableWallets)\r\n .filter(([walletType, isAvailable]) => !isAvailable)\r\n .map(([walletType]) => (\r\n <div key={walletType} className=\"p-3 rounded-lg bg-gray-50\">\r\n <div className=\"flex items-center justify-between\">\r\n <span className=\"text-sm text-gray-600\">\r\n {getWalletDisplayName(walletType)} not detected\r\n </span>\r\n \r\n <a href={getWalletInstallUrl(walletType)}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-sm text-[#7042D2] hover:underline\"\r\n >\r\n Install\r\n </a>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Display any errors */}\r\n {error && (\r\n <div className=\"p-3 rounded-lg bg-red-50 mb-4 text-red-600 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n {/* Navigation buttons */}\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <button\r\n type=\"button\"\r\n onClick={onBack}\r\n className=\"w-full py-2 px-4 bg-gray-200 hover:bg-gray-300 text-[#7042D2] font-medium rounded-md\"\r\n >\r\n Back\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => onPayment(paymentType === 'qrcode')}\r\n className=\"w-full py-2 px-4 bg-[#7042D2] hover:bg-[#7042D2] text-white font-medium rounded-md\"\r\n disabled={!testMode && paymentType === 'wallet' && !walletConnection}\r\n >\r\n {paymentType === 'qrcode' ? 'I have sent the payment' : 'Pay Now'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Step: Processing */}\r\n {step === 'processing' && (\r\n <PaymentStatus \r\n status=\"processing\" \r\n theme={theme}\r\n message=\"Processing your payment...\"\r\n />\r\n )}\r\n\r\n {/* Step: Success */}\r\n {step === 'success' && (\r\n <div>\r\n <PaymentStatus \r\n status=\"success\" \r\n theme={theme}\r\n message=\"Payment successful!\"\r\n />\r\n {transactionHash && (\r\n <div className=\"mt-4 p-3 rounded-lg bg-gray-100\">\r\n <p className=\"text-xs text-gray-600 mb-1\">\r\n Transaction Hash:\r\n </p>\r\n <p className=\"text-sm font-mono break-all text-gray-800\">\r\n {formatTransactionHash(transactionHash)}\r\n </p>\r\n {selectedPaymentMethod && (\r\n <a \r\n href={`${getExplorerUrl(selectedPaymentMethod.network)}/${getExplorerPath(selectedPaymentMethod.network)}/${transactionHash}`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-xs text-[#7042D2] mt-2 inline-block\"\r\n >\r\n View on Explorer →\r\n </a>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Step: Error */}\r\n {step === 'error' && (\r\n <div>\r\n <PaymentStatus \r\n status=\"error\" \r\n theme={theme}\r\n message={error || \"An error occurred while processing your payment.\"}\r\n />\r\n <button\r\n type=\"button\"\r\n onClick={onBack}\r\n className=\"mt-4 w-full py-2 px-4 bg-gray-200 hover:bg-gray-300 text-gray-800 font-medium rounded-md\"\r\n >\r\n Try Again\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"text-center text-xs text-gray-500\">\r\n <p>Powered by <span className='text-[#7042D2]'>Coinley</span> - Secure Cryptocurrency Payments</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Helper functions\r\nconst getExplorerUrl = (network) => {\r\n const explorers = {\r\n ethereum: 'https://etherscan.io',\r\n bsc: 'https://bscscan.com',\r\n tron: 'https://tronscan.org',\r\n algorand: 'https://algoexplorer.io'\r\n };\r\n return explorers[network] || 'https://etherscan.io';\r\n};\r\n\r\nconst getExplorerPath = (network) => {\r\n const paths = {\r\n ethereum: 'tx',\r\n bsc: 'tx',\r\n tron: 'transaction',\r\n algorand: 'tx'\r\n };\r\n return paths[network] || 'tx';\r\n};\r\n\r\nexport default CoinleyModal;","// // src/components/CoinleyCheckout.jsx\r\n// import React, { forwardRef, useImperativeHandle, useState, useEffect } from 'react';\r\n// import { useCoinley } from '../context/CoinleyContext';\r\n// import { useTheme } from '../context/ThemeContext';\r\n// import CoinleyModal from './CoinleyModal';\r\n// import { createPayment, processPayment } from '../services/api';\r\n// import { \r\n// connectWallet, \r\n// sendTransaction, \r\n// detectWallets, \r\n// detectWalletsWithRetry,\r\n// getSupportedWalletsForNetwork,\r\n// debugWalletEnvironment,\r\n// NETWORK_TYPES,\r\n// WALLET_TYPES \r\n// } from '../services/walletService';\r\n\r\n// /**\r\n// * Enhanced Coinley checkout component with multi-network support\r\n// */\r\n// const CoinleyCheckout = forwardRef(({ \r\n// apiKey,\r\n// apiSecret,\r\n// apiUrl,\r\n// customerEmail,\r\n// merchantName = 'Merchant',\r\n// merchantWalletAddresses = {}, // Object with network-specific addresses\r\n// onSuccess,\r\n// onError,\r\n// onClose,\r\n// theme,\r\n// autoOpen = false,\r\n// debug = false,\r\n// testMode = false,\r\n// supportedNetworks = [], // Array of supported networks\r\n// preferredNetwork = NETWORK_TYPES.ETHEREUM,\r\n// preferredWallet = WALLET_TYPES.METAMASK\r\n// }, ref) => {\r\n// // Context\r\n// const coinleyContext = useCoinley();\r\n// const { theme: contextTheme } = useTheme();\r\n \r\n// // State\r\n// const [isOpen, setIsOpen] = useState(autoOpen);\r\n// const [payment, setPayment] = useState(null);\r\n// const [paymentStatus, setPaymentStatus] = useState('idle');\r\n// const [selectedPaymentMethod, setSelectedPaymentMethod] = useState(null);\r\n// const [error, setError] = useState(null);\r\n// const [transactionHash, setTransactionHash] = useState(null);\r\n// const [walletConnection, setWalletConnection] = useState(null);\r\n// const [availableWallets, setAvailableWallets] = useState({});\r\n// const [step, setStep] = useState('select-currency');\r\n \r\n// // Use the component props or fallback to context values\r\n// const effectiveApiKey = apiKey || coinleyContext?.apiKey;\r\n// const effectiveApiSecret = apiSecret || coinleyContext?.apiSecret;\r\n// const effectiveApiUrl = apiUrl || coinleyContext?.apiUrl;\r\n// const effectiveTheme = theme || contextTheme;\r\n// const effectiveDebug = debug || coinleyContext?.debug;\r\n// const effectiveSupportedNetworks = supportedNetworks.length > 0 \r\n// ? supportedNetworks \r\n// : [NETWORK_TYPES.ETHEREUM, NETWORK_TYPES.BSC, NETWORK_TYPES.TRON, NETWORK_TYPES.ALGORAND];\r\n\r\n// // Expose methods via ref\r\n// useImperativeHandle(ref, () => ({\r\n// open: (paymentDetails) => {\r\n// handleOpen(paymentDetails);\r\n// },\r\n// close: () => {\r\n// handleClose();\r\n// },\r\n// getPayment: () => payment,\r\n// getWalletConnection: () => walletConnection,\r\n// debugWallets: () => debugWalletEnvironment()\r\n// }));\r\n\r\n// // Debug logging helper\r\n// const log = (message, data) => {\r\n// if (effectiveDebug) {\r\n// console.log(`[Coinley SDK] ${message}`, data);\r\n// }\r\n// };\r\n\r\n// // Check available wallets on mount with retry\r\n// useEffect(() => {\r\n// if (typeof window !== 'undefined') {\r\n// const detectWalletsAsync = async () => {\r\n// // Use the retry version for more reliable detection\r\n// const wallets = await detectWalletsWithRetry(3, 1000);\r\n// setAvailableWallets(wallets);\r\n \r\n// log('Available wallets detected:', wallets);\r\n// };\r\n \r\n// detectWalletsAsync();\r\n// }\r\n// }, [effectiveDebug]);\r\n\r\n// // Handle opening the payment modal\r\n// const handleOpen = async (paymentDetails) => {\r\n// if (!paymentDetails || !paymentDetails.amount) {\r\n// setError('Payment amount is required');\r\n// if (onError) onError(new Error('Payment amount is required'));\r\n// return;\r\n// }\r\n\r\n// setPaymentStatus('loading');\r\n// setIsOpen(true);\r\n// setStep('select-currency');\r\n\r\n// try {\r\n// log('Creating payment with details:', paymentDetails);\r\n \r\n// // Create a payment on the Coinley backend\r\n// const paymentResponse = await createPayment({\r\n// amount: paymentDetails.amount,\r\n// currency: paymentDetails.currency || 'USDT',\r\n// network: paymentDetails.network || preferredNetwork,\r\n// customerEmail: paymentDetails.customerEmail || customerEmail,\r\n// callbackUrl: paymentDetails.callbackUrl,\r\n// metadata: paymentDetails.metadata || {},\r\n// merchantWalletAddresses: {\r\n// ...merchantWalletAddresses,\r\n// ...paymentDetails.merchantWalletAddresses\r\n// }\r\n// });\r\n\r\n// log('Payment created:', paymentResponse);\r\n \r\n// setPayment(paymentResponse.payment);\r\n// setPaymentStatus('idle');\r\n// setError(null);\r\n \r\n// log('Payment created and state updated');\r\n// } catch (err) {\r\n// log('Error creating payment:', err);\r\n// setError(err.message || 'Failed to create payment');\r\n// setPaymentStatus('error');\r\n// if (onError) onError(err);\r\n// }\r\n// };\r\n\r\n// // Handle closing the modal\r\n// const handleClose = () => {\r\n// setIsOpen(false);\r\n// setTransactionHash(null);\r\n// setWalletConnection(null);\r\n// setSelectedPaymentMethod(null);\r\n// setStep('select-currency');\r\n// if (onClose) onClose();\r\n// };\r\n\r\n// // Handle payment method selection\r\n// const handlePaymentMethodSelect = (paymentMethod) => {\r\n// console.log('=== PAYMENT METHOD SELECTION DEBUG ===');\r\n// console.log('1. Payment method selected:', paymentMethod);\r\n// console.log('2. Current step before:', step);\r\n \r\n// log('Payment method selected:', paymentMethod);\r\n// setSelectedPaymentMethod(paymentMethod);\r\n \r\n// // Move to confirm step after selection\r\n// setStep('confirm');\r\n \r\n// console.log('3. Step should now be: confirm');\r\n// console.log('=== END PAYMENT METHOD SELECTION DEBUG ===');\r\n// };\r\n\r\n// // Handle back navigation\r\n// const handleBack = () => {\r\n// if (step === 'confirm') {\r\n// setStep('select-currency');\r\n// setWalletConnection(null);\r\n// } else if (step === 'error') {\r\n// setStep('confirm');\r\n// }\r\n// };\r\n\r\n// // Enhanced wallet connection with retry and better debugging\r\n// const handleConnectWallet = async (walletType) => {\r\n// console.log('=== WALLET CONNECTION DEBUG ===');\r\n// console.log('1. Wallet type requested:', walletType);\r\n// console.log('2. Selected payment method:', selectedPaymentMethod);\r\n// console.log('3. Available wallets:', availableWallets);\r\n// console.log('4. Current step:', step);\r\n\r\n// if (!selectedPaymentMethod) {\r\n// console.error('No payment method selected');\r\n// setError('Please select a payment method first');\r\n// return;\r\n// }\r\n\r\n// try {\r\n// console.log('5. Attempting to connect wallet...');\r\n// setError(null); // Clear any previous errors\r\n \r\n// log('Connecting wallet:', { walletType, network: selectedPaymentMethod.network });\r\n \r\n// // Use the improved connectWallet function with retry (2 attempts)\r\n// const connection = await connectWallet(walletType, selectedPaymentMethod.network, 2);\r\n// setWalletConnection(connection);\r\n// setError(null);\r\n \r\n// console.log('6. Connection successful:', connection);\r\n// log('Wallet connected successfully:', connection);\r\n// } catch (err) {\r\n// console.error('7. Connection failed:', err);\r\n// log('Wallet connection error:', err);\r\n// setError(err.message || 'Failed to connect wallet');\r\n// }\r\n \r\n// console.log('=== END WALLET CONNECTION DEBUG ===');\r\n// };\r\n\r\n// // Handle payment submission\r\n// const handlePayment = async () => {\r\n// if (!payment || !selectedPaymentMethod) {\r\n// setError('Missing payment information');\r\n// return;\r\n// }\r\n\r\n// if (!walletConnection && !testMode) {\r\n// setError('Please connect your wallet first');\r\n// return;\r\n// }\r\n\r\n// log('Starting payment process...');\r\n// setPaymentStatus('loading');\r\n// setTransactionHash(null);\r\n// setStep('processing');\r\n\r\n// try {\r\n// let txHash;\r\n\r\n// if (testMode) {\r\n// // Test mode: Generate mock transaction\r\n// log('Test mode: Generating mock transaction...');\r\n// txHash = `test_${Date.now().toString(16)}_${Math.random().toString(16).substring(2, 10)}`;\r\n// } else {\r\n// // Real payment flow\r\n// const merchantAddress = merchantWalletAddresses[selectedPaymentMethod.network];\r\n// if (!merchantAddress) {\r\n// throw new Error(`No merchant wallet address configured for ${selectedPaymentMethod.network}`);\r\n// }\r\n\r\n// // Send transaction through wallet\r\n// log('Sending transaction through wallet...');\r\n \r\n// txHash = await sendTransaction(walletConnection, {\r\n// to: merchantAddress,\r\n// amount: payment.amount,\r\n// tokenAddress: selectedPaymentMethod.tokenConfig?.address,\r\n// tokenDecimals: selectedPaymentMethod.tokenConfig?.decimals,\r\n// currency: selectedPaymentMethod.currency,\r\n// network: selectedPaymentMethod.network\r\n// });\r\n// }\r\n\r\n// log('Transaction hash:', txHash);\r\n// setTransactionHash(txHash);\r\n\r\n// // Process the payment on the Coinley backend\r\n// log('Processing payment with backend...');\r\n// const processResponse = await processPayment({\r\n// paymentId: payment.id,\r\n// transactionHash: txHash,\r\n// network: selectedPaymentMethod.network,\r\n// currency: selectedPaymentMethod.currency,\r\n// senderAddress: walletConnection?.address\r\n// });\r\n\r\n// log('Payment processed successfully:', processResponse);\r\n\r\n// setPaymentStatus('success');\r\n// setStep('success');\r\n \r\n// // Call the onSuccess callback\r\n// if (onSuccess) {\r\n// log('Calling onSuccess callback...');\r\n// onSuccess(payment.id, txHash, {\r\n// network: selectedPaymentMethod.network,\r\n// currency: selectedPaymentMethod.currency,\r\n// amount: payment.amount\r\n// });\r\n// }\r\n\r\n// } catch (err) {\r\n// log('Payment error:', err);\r\n// setError(err.message || 'Failed to process payment');\r\n// setPaymentStatus('error');\r\n// setStep('error');\r\n// if (onError) onError(err);\r\n// }\r\n// };\r\n\r\n// // Get supported wallets for current network\r\n// const getSupportedWallets = () => {\r\n// if (!selectedPaymentMethod) return [];\r\n// return getSupportedWalletsForNetwork(selectedPaymentMethod.network);\r\n// };\r\n\r\n// return (\r\n// <>\r\n// {isOpen && (\r\n// <CoinleyModal\r\n// isOpen={isOpen}\r\n// onClose={handleClose}\r\n// payment={payment}\r\n// paymentStatus={paymentStatus}\r\n// selectedPaymentMethod={selectedPaymentMethod}\r\n// onPaymentMethodSelect={handlePaymentMethodSelect}\r\n// onPayment={handlePayment}\r\n// onBack={handleBack}\r\n// error={error}\r\n// theme={effectiveTheme}\r\n// merchantName={merchantName}\r\n// transactionHash={transactionHash}\r\n// walletConnection={walletConnection}\r\n// onConnectWallet={handleConnectWallet}\r\n// testMode={testMode}\r\n// supportedNetworks={effectiveSupportedNetworks}\r\n// availableWallets={availableWallets}\r\n// supportedWallets={getSupportedWallets()}\r\n// step={step}\r\n// merchantWalletAddresses={merchantWalletAddresses}\r\n// debug={effectiveDebug}\r\n// />\r\n// )}\r\n// </>\r\n// );\r\n// });\r\n\r\n// // Add display name for better debugging\r\n// CoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\n// export default CoinleyCheckout;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// src/components/CoinleyCheckout.jsx - ENHANCED VERSION\r\nimport React, { forwardRef, useImperativeHandle, useState, useEffect } from 'react';\r\nimport { useCoinley } from '../context/CoinleyContext';\r\nimport { useTheme } from '../context/ThemeContext';\r\nimport CoinleyModal from './CoinleyModal';\r\nimport { \r\n createPayment, \r\n processPayment, \r\n getPayment, \r\n fetchMerchantWalletAddresses,\r\n getApiConfig \r\n} from '../services/api';\r\nimport { \r\n connectWallet, \r\n sendTransaction, \r\n detectWallets, \r\n detectWalletsWithRetry,\r\n getSupportedWalletsForNetwork,\r\n debugWalletEnvironment,\r\n NETWORK_TYPES,\r\n WALLET_TYPES \r\n} from '../services/walletService';\r\n\r\n/**\r\n * Enhanced Coinley checkout component with improved wallet address handling\r\n */\r\nconst CoinleyCheckout = forwardRef(({ \r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n customerEmail,\r\n merchantName = 'Merchant',\r\n merchantWalletAddresses = {},\r\n onSuccess,\r\n onError,\r\n onClose,\r\n theme,\r\n autoOpen = false,\r\n debug = false,\r\n testMode = false,\r\n supportedNetworks = [],\r\n preferredNetwork = NETWORK_TYPES.ETHEREUM,\r\n preferredWallet = WALLET_TYPES.METAMASK\r\n}, ref) => {\r\n // Context\r\n const coinleyContext = useCoinley();\r\n const { theme: contextTheme } = useTheme();\r\n \r\n // State\r\n const [isOpen, setIsOpen] = useState(autoOpen);\r\n const [payment, setPayment] = useState(null);\r\n const [paymentStatus, setPaymentStatus] = useState('idle');\r\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState(null);\r\n const [error, setError] = useState(null);\r\n const [transactionHash, setTransactionHash] = useState(null);\r\n const [walletConnection, setWalletConnection] = useState(null);\r\n const [availableWallets, setAvailableWallets] = useState({});\r\n const [step, setStep] = useState('select-currency');\r\n const [merchantWallets, setMerchantWallets] = useState({});\r\n const [isLoadingWallets, setIsLoadingWallets] = useState(false);\r\n \r\n // Use the component props or fallback to context values\r\n const effectiveApiKey = apiKey || coinleyContext?.apiKey;\r\n const effectiveApiSecret = apiSecret || coinleyContext?.apiSecret;\r\n const effectiveApiUrl = apiUrl || coinleyContext?.apiUrl;\r\n const effectiveTheme = theme || contextTheme;\r\n const effectiveDebug = debug || coinleyContext?.debug;\r\n const effectiveSupportedNetworks = supportedNetworks.length > 0 \r\n ? supportedNetworks \r\n : [NETWORK_TYPES.ETHEREUM, NETWORK_TYPES.BSC, NETWORK_TYPES.TRON, NETWORK_TYPES.ALGORAND];\r\n\r\n // Expose methods via ref\r\n useImperativeHandle(ref, () => ({\r\n open: (paymentDetails) => {\r\n handleOpen(paymentDetails);\r\n },\r\n close: () => {\r\n handleClose();\r\n },\r\n getPayment: () => payment,\r\n getWalletConnection: () => walletConnection,\r\n getMerchantWallets: () => merchantWallets,\r\n debugWallets: () => debugWalletEnvironment()\r\n }));\r\n\r\n // Debug logging helper\r\n const log = (message, data) => {\r\n if (effectiveDebug) {\r\n console.log(`[Coinley SDK] ${message}`, data);\r\n }\r\n };\r\n\r\n // Check available wallets on mount with retry\r\n useEffect(() => {\r\n if (typeof window !== 'undefined') {\r\n const detectWalletsAsync = async () => {\r\n const wallets = await detectWalletsWithRetry(3, 1000);\r\n setAvailableWallets(wallets);\r\n log('Available wallets detected:', wallets);\r\n };\r\n \r\n detectWalletsAsync();\r\n }\r\n }, [effectiveDebug]);\r\n\r\n // Fetch merchant wallet addresses on mount\r\n useEffect(() => {\r\n const loadMerchantWallets = async () => {\r\n if (!effectiveApiKey || !effectiveApiSecret) {\r\n log('No API credentials available for wallet address fetching');\r\n return;\r\n }\r\n\r\n setIsLoadingWallets(true);\r\n \r\n try {\r\n // First try to get from API config\r\n const apiConfig = getApiConfig();\r\n if (apiConfig.merchantWalletAddresses && Object.keys(apiConfig.merchantWalletAddresses).length > 0) {\r\n setMerchantWallets(apiConfig.merchantWalletAddresses);\r\n log('Loaded wallet addresses from API config:', apiConfig.merchantWalletAddresses);\r\n } else {\r\n // Fetch fresh wallet addresses\r\n const walletAddresses = await fetchMerchantWalletAddresses();\r\n if (walletAddresses && Object.keys(walletAddresses).length > 0) {\r\n setMerchantWallets(walletAddresses);\r\n log('Fetched wallet addresses from API:', walletAddresses);\r\n } else {\r\n log('No wallet addresses found in API response');\r\n }\r\n }\r\n \r\n // Also include any manually provided wallet addresses\r\n if (merchantWalletAddresses && Object.keys(merchantWalletAddresses).length > 0) {\r\n setMerchantWallets(prev => ({\r\n ...prev,\r\n ...merchantWalletAddresses\r\n }));\r\n log('Added manual wallet addresses:', merchantWalletAddresses);\r\n }\r\n } catch (error) {\r\n log('Error loading merchant wallet addresses:', error);\r\n console.warn('Could not load merchant wallet addresses:', error.message);\r\n \r\n // Fallback to manual addresses if provided\r\n if (merchantWalletAddresses && Object.keys(merchantWalletAddresses).length > 0) {\r\n setMerchantWallets(merchantWalletAddresses);\r\n log('Using fallback manual wallet addresses:', merchantWalletAddresses);\r\n }\r\n } finally {\r\n setIsLoadingWallets(false);\r\n }\r\n };\r\n\r\n loadMerchantWallets();\r\n }, [effectiveApiKey, effectiveApiSecret, merchantWalletAddresses, effectiveDebug]);\r\n\r\n // Handle opening the payment modal\r\n const handleOpen = async (paymentDetails) => {\r\n if (!paymentDetails || !paymentDetails.amount) {\r\n setError('Payment amount is required');\r\n if (onError) onError(new Error('Payment amount is required'));\r\n return;\r\n }\r\n\r\n setPaymentStatus('loading');\r\n setIsOpen(true);\r\n setStep('select-currency');\r\n\r\n try {\r\n log('Creating payment with details:', paymentDetails);\r\n \r\n // Ensure we have wallet addresses before creating payment\r\n let finalWalletAddresses = { ...merchantWallets };\r\n \r\n if (Object.keys(finalWalletAddresses).length === 0) {\r\n log('No wallet addresses available, attempting to fetch...');\r\n try {\r\n const fetchedWallets = await fetchMerchantWalletAddresses();\r\n if (fetchedWallets) {\r\n finalWalletAddresses = fetchedWallets;\r\n setMerchantWallets(fetchedWallets);\r\n }\r\n } catch (fetchError) {\r\n log('Failed to fetch wallet addresses:', fetchError);\r\n }\r\n }\r\n \r\n // Include wallet addresses from props as well\r\n if (paymentDetails.merchantWalletAddresses) {\r\n finalWalletAddresses = {\r\n ...finalWalletAddresses,\r\n ...paymentDetails.merchantWalletAddresses\r\n };\r\n }\r\n \r\n if (merchantWalletAddresses) {\r\n finalWalletAddresses = {\r\n ...finalWalletAddresses,\r\n ...merchantWalletAddresses\r\n };\r\n }\r\n \r\n log('Final wallet addresses for payment:', finalWalletAddresses);\r\n \r\n // Create a payment on the Coinley backend\r\n const paymentResponse = await createPayment({\r\n amount: paymentDetails.amount,\r\n currency: paymentDetails.currency || 'USDT',\r\n network: paymentDetails.network || preferredNetwork,\r\n customerEmail: paymentDetails.customerEmail || customerEmail,\r\n callbackUrl: paymentDetails.callbackUrl,\r\n metadata: {\r\n ...paymentDetails.metadata,\r\n sdkVersion: '1.0.0',\r\n merchantWallets: finalWalletAddresses\r\n },\r\n merchantWalletAddresses: finalWalletAddresses\r\n });\r\n\r\n log('Payment created:', paymentResponse);\r\n \r\n if (paymentResponse.payment) {\r\n setPayment(paymentResponse.payment);\r\n \r\n // Update merchant wallets from response if available\r\n if (paymentResponse.merchantConfig && paymentResponse.merchantConfig.walletAddresses) {\r\n setMerchantWallets(prev => ({\r\n ...prev,\r\n ...paymentResponse.merchantConfig.walletAddresses\r\n }));\r\n log('Updated wallet addresses from payment response:', paymentResponse.merchantConfig.walletAddresses);\r\n }\r\n \r\n setPaymentStatus('idle');\r\n setError(null);\r\n } else {\r\n throw new Error('Invalid payment response structure');\r\n }\r\n \r\n log('Payment created and state updated successfully');\r\n } catch (err) {\r\n log('Error creating payment:', err);\r\n setError(err.message || 'Failed to create payment');\r\n setPaymentStatus('error');\r\n if (onError) onError(err);\r\n }\r\n };\r\n\r\n // Handle closing the modal\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n setTransactionHash(null);\r\n setWalletConnection(null);\r\n setSelectedPaymentMethod(null);\r\n setStep('select-currency');\r\n setError(null);\r\n if (onClose) onClose();\r\n };\r\n\r\n // Handle payment method selection\r\n const handlePaymentMethodSelect = (paymentMethod) => {\r\n log('Payment method selected:', paymentMethod);\r\n setSelectedPaymentMethod(paymentMethod);\r\n setStep('confirm');\r\n };\r\n\r\n // Handle back navigation\r\n const handleBack = () => {\r\n if (step === 'confirm') {\r\n setStep('select-currency');\r\n setWalletConnection(null);\r\n setError(null);\r\n } else if (step === 'error') {\r\n setStep('confirm');\r\n setError(null);\r\n }\r\n };\r\n\r\n // Enhanced wallet connection with better error handling\r\n const handleConnectWallet = async (walletType) => {\r\n if (!selectedPaymentMethod) {\r\n setError('Please select a payment method first');\r\n return;\r\n }\r\n\r\n try {\r\n setError(null);\r\n log('Connecting wallet:', { walletType, network: selectedPaymentMethod.network });\r\n \r\n const connection = await connectWallet(walletType, selectedPaymentMethod.network, 2);\r\n setWalletConnection(connection);\r\n setError(null);\r\n \r\n log('Wallet connected successfully:', connection);\r\n } catch (err) {\r\n log('Wallet connection error:', err);\r\n setError(err.message || 'Failed to connect wallet');\r\n }\r\n };\r\n\r\n // Get recipient address for current payment method\r\n const getRecipientAddress = () => {\r\n if (!selectedPaymentMethod) return null;\r\n \r\n const network = selectedPaymentMethod.network;\r\n \r\n // Priority order:\r\n // 1. From payment object (if available)\r\n // 2. From merchant wallets state\r\n // 3. From component props\r\n \r\n if (payment && payment.recipientWallet) {\r\n return payment.recipientWallet;\r\n }\r\n \r\n if (merchantWallets[network]) {\r\n return merchantWallets[network];\r\n }\r\n \r\n if (merchantWalletAddresses[network]) {\r\n return merchantWalletAddresses[network];\r\n }\r\n \r\n return null;\r\n };\r\n\r\n // Handle payment submission\r\n const handlePayment = async () => {\r\n if (!payment || !selectedPaymentMethod) {\r\n setError('Missing payment information');\r\n return;\r\n }\r\n\r\n const recipientAddress = getRecipientAddress();\r\n \r\n if (!recipientAddress && !testMode) {\r\n setError(`No recipient wallet address configured for ${selectedPaymentMethod.network} network`);\r\n return;\r\n }\r\n\r\n if (!walletConnection && !testMode) {\r\n setError('Please connect your wallet first');\r\n return;\r\n }\r\n\r\n log('Starting payment process...');\r\n setPaymentStatus('loading');\r\n setTransactionHash(null);\r\n setStep('processing');\r\n\r\n try {\r\n let txHash;\r\n\r\n if (testMode) {\r\n // Test mode: Generate mock transaction\r\n log('Test mode: Generating mock transaction...');\r\n txHash = `test_${Date.now().toString(16)}_${Math.random().toString(16).substring(2, 10)}`;\r\n } else {\r\n // Real payment flow\r\n log('Sending transaction through wallet...', {\r\n recipientAddress,\r\n amount: payment.totalAmount || payment.amount,\r\n network: selectedPaymentMethod.network\r\n });\r\n \r\n // Get token configuration for this currency and network\r\n const tokenConfig = payment.token || selectedPaymentMethod.tokenConfig;\r\n \r\n txHash = await sendTransaction(walletConnection, {\r\n to: recipientAddress,\r\n amount: payment.totalAmount || payment.amount,\r\n tokenAddress: tokenConfig?.contractAddress,\r\n tokenDecimals: tokenConfig?.decimals,\r\n currency: selectedPaymentMethod.currency,\r\n network: selectedPaymentMethod.network,\r\n tokenConfig: tokenConfig\r\n });\r\n }\r\n\r\n log('Transaction hash:', txHash);\r\n setTransactionHash(txHash);\r\n\r\n // Process the payment on the Coinley backend\r\n log('Processing payment with backend...');\r\n const processResponse = await processPayment({\r\n paymentId: payment.id,\r\n transactionHash: txHash,\r\n network: selectedPaymentMethod.network,\r\n currency: selectedPaymentMethod.currency,\r\n senderAddress: walletConnection?.address\r\n });\r\n\r\n log('Payment processed successfully:', processResponse);\r\n\r\n setPaymentStatus('success');\r\n setStep('success');\r\n \r\n // Call the onSuccess callback\r\n if (onSuccess) {\r\n log('Calling onSuccess callback...');\r\n onSuccess(payment.id, txHash, {\r\n network: selectedPaymentMethod.network,\r\n currency: selectedPaymentMethod.currency,\r\n amount: payment.totalAmount || payment.amount,\r\n recipientAddress: recipientAddress\r\n });\r\n }\r\n\r\n } catch (err) {\r\n log('Payment error:', err);\r\n \r\n // Enhanced error messages\r\n let errorMessage = err.message || 'Failed to process payment';\r\n \r\n if (errorMessage.includes('User rejected') || errorMessage.includes('user rejected')) {\r\n errorMessage = 'Transaction was rejected by user';\r\n } else if (errorMessage.includes('insufficient funds')) {\r\n errorMessage = 'Insufficient funds in wallet';\r\n } else if (errorMessage.includes('network')) {\r\n errorMessage = 'Network error. Please check your connection and try again';\r\n } else if (errorMessage.includes('recipient') || errorMessage.includes('address')) {\r\n errorMessage = 'Invalid recipient address. Please contact support';\r\n }\r\n \r\n setError(errorMessage);\r\n setPaymentStatus('error');\r\n setStep('error');\r\n if (onError) onError(new Error(errorMessage));\r\n }\r\n };\r\n\r\n // Get supported wallets for current network\r\n const getSupportedWallets = () => {\r\n if (!selectedPaymentMethod) return [];\r\n return getSupportedWalletsForNetwork(selectedPaymentMethod.network);\r\n };\r\n\r\n // Show loading state if fetching wallet addresses\r\n if (isLoadingWallets) {\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\r\n <div className=\"bg-white p-6 rounded-lg shadow-xl\">\r\n <div className=\"flex items-center space-x-3\">\r\n <div className=\"animate-spin rounded-full h-6 w-6 border-2 border-blue-500 border-t-transparent\"></div>\r\n <span className=\"text-gray-700\">Loading payment gateway...</span>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <CoinleyModal\r\n isOpen={isOpen}\r\n onClose={handleClose}\r\n payment={payment}\r\n paymentStatus={paymentStatus}\r\n selectedPaymentMethod={selectedPaymentMethod}\r\n onPaymentMethodSelect={handlePaymentMethodSelect}\r\n onPayment={handlePayment}\r\n onBack={handleBack}\r\n error={error}\r\n theme={effectiveTheme}\r\n merchantName={merchantName}\r\n transactionHash={transactionHash}\r\n walletConnection={walletConnection}\r\n onConnectWallet={handleConnectWallet}\r\n testMode={testMode}\r\n supportedNetworks={effectiveSupportedNetworks}\r\n availableWallets={availableWallets}\r\n supportedWallets={getSupportedWallets()}\r\n step={step}\r\n merchantWalletAddresses={merchantWallets}\r\n recipientAddress={getRecipientAddress()}\r\n debug={effectiveDebug}\r\n />\r\n )}\r\n </>\r\n );\r\n});\r\n\r\n// Add display name for better debugging\r\nCoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\nexport default CoinleyCheckout;","// src/index.js\r\n// Import styles first\r\nimport './styles.css';\r\n\r\n// Export wallet service utilities and constants\r\nexport { \r\n connectWallet,\r\n sendTransaction,\r\n detectWallets,\r\n getSupportedWalletsForNetwork,\r\n getWalletInstallUrl,\r\n NETWORK_TYPES,\r\n WALLET_TYPES,\r\n TOKEN_CONFIG,\r\n NETWORK_CONFIG\r\n} from './services/walletService';\r\n\r\n// Export API functions\r\nexport { \r\n createPayment, \r\n getPayment, \r\n processPayment,\r\n getSupportedNetworks,\r\n getMerchantProfile,\r\n validateWalletAddress,\r\n generateMockTransactionHash\r\n} from './services/api';\r\n\r\n// Export context providers\r\nexport { ThemeProvider } from './context/ThemeContext';\r\nexport { CoinleyProvider, useCoinley } from './context/CoinleyContext';\r\n\r\n// Export components\r\nexport { default as QRCode } from './components/QRCode';\r\nexport { default as PaymentStatus } from './components/PaymentStatus';\r\nexport { default as PaymentMethods } from './components/PaymentMethods';\r\nexport { default as CoinleyModal } from './components/CoinleyModal';\r\nexport { default as CoinleyCheckout } from './components/CoinleyCheckout';\r\n\r\n// Export constants\r\nexport const DEFAULT_CONFIG = {\r\n apiUrl: 'https://coinleyserver-production.up.railway.app',\r\n debug: false,\r\n testMode: false,\r\n theme: 'light',\r\n supportedNetworks: ['ethereum', 'bsc', 'tron', 'algorand']\r\n};\r\n"],"names":["k","bytes","BN_0","BN_1","mask","output","_guard","b","_format","passProperties","names","args","_names","_data","_a","n","l","_offset","throwError","internal","result","value","type","indexed","name","p","inputs","PanicReasons","f","m","blockNumber","receipt","_iface","fragment","t","listener","addr","target","code","ethers.parseEther","ethers.utils","ethers.parseUnits","ethers.Contract","require$$0","jsxRuntimeModule","jsx","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","_QrCode","version","assert","_QrSegment","currency","network","amount","jsxs","apiConfig","error"],"mappings":"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E,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,KAAK,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,KAAK,GAAG;AAAE,WAAOA,IAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAInC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,MAAM,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIrC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,OAAO,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,IAAI,GAAG;AAAE,WAAOA,IAAE,GAAG,IAAI;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,OAAO,GAAG;AAAE,WAAO,EAAE,GAAG,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIpC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,IAAI,OAAM,QAAQ,WAAW,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAI7D,OAAO,KAAK,GAAG;AAAE,WAAO,IAAI,OAAM,QAAQ,QAAQ,CAAC,CAAC,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIzD,OAAO,MAAM,GAAG;AAAE,WAAO,IAAI,OAAM,QAAQ,SAAS,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIzD,OAAO,OAAO,GAAG;AAAE,WAAO,IAAI,OAAM,QAAQ,UAAU,CAAC;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAI3D,OAAO,MAAM,GAAG,SAAS;AACrB,UAAM,IAAI,MAAM,qBAAqB;AAAA,EAExC;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,MAAM,GAAG,MAAM;AAClB,UAAM,IAAI,MAAM,qBAAqB;AAAA,EAExC;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,UAAU,GAAG;AAChB,WAAO,IAAI,OAAM,QAAQ,aAAa,OAAO,OAAO,CAAA,GAAI,CAAC,CAAC;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ,OAAO;AAClB,WAAQ,SACD,OAAQ,UAAW,YACnB,kBAAkB,SAClB,MAAM,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,OAAO,YAAY,OAAO,MAAM;AAC5B,QAAI,OAAM,QAAQ,KAAK,GAAG;AACtB,UAAI,MAAM,SAAS,MAAM;AACrB,cAAM,IAAI,MAAM,0BAA0B,IAAI,SAAS,MAAM,IAAI,EAAE;AAAA,MACtE;AACD,aAAO,MAAM;AAAA,IAChB;AACD,WAAO;AAAA,EACV;AACL;AA9iBI;AATG,IAAM,QAAN;AC1BA,MAAM,qBAAqB,MAAM;AAAA,EACpC,YAAY,WAAW;AACnB,UAAM,WAAW,WAAW,WAAW,KAAK;AAAA,EAC/C;AAAA,EACD,eAAe;AACX,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ,QAAQ;AACnB,QAAI,QAAQ,MAAM,YAAY,QAAQ,QAAQ;AAC9C,QAAI;AACA,cAAQ,WAAW,KAAK;AAAA,IAC3B,SACM,OAAO;AACV,aAAO,KAAK,YAAY,MAAM,SAAS,MAAM;AAAA,IAChD;AACD,WAAO,OAAO,WAAW,KAAK;AAAA,EACjC;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,WAAW,QAAQ,OAAO,UAAW,GAAE,EAAE,CAAC;AAAA,EACpD;AACL;ACrBO,MAAM,uBAAuB,MAAM;AAAA,EAEtC,YAAY,OAAO;AACf,UAAM,MAAM,MAAM,MAAM,MAAM,KAAK,MAAM,OAAO;AAFpD;AAGI,SAAK,QAAQ;AAAA,EAChB;AAAA,EACD,eAAe;AACX,WAAO,KAAK,MAAM;EACrB;AAAA,EACD,OAAO,QAAQ,OAAO;AAClB,WAAO,KAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,EACzC;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,KAAK,MAAM,OAAO,MAAM;AAAA,EAClC;AACL;ACdO,SAAS,KAAK,QAAQ,QAAQ,QAAQ;AACzC,MAAI,cAAc,CAAA;AAClB,MAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,kBAAc;AAAA,EACjB,WACQ,UAAU,OAAQ,WAAY,UAAU;AAC7C,QAAI,SAAS,CAAA;AACb,kBAAc,OAAO,IAAI,CAAC,UAAU;AAChC,YAAM,OAAO,MAAM;AACnB,aAAO,MAAM,yDAAyD,oBAAoB,EAAE,UAAU,UAAU,MAAM,EAAE,MAAO,GAAE,OAAO,OAAQ,CAAA;AAChJ,aAAO,CAAC,OAAO,IAAI,GAAG,2DAA2D,oBAAoB,EAAE,UAAU,UAAU,MAAM,EAAE,MAAK,GAAI,OAAO,OAAQ,CAAA;AAC3J,aAAO,IAAI,IAAI;AACf,aAAO,OAAO,IAAI;AAAA,IAC9B,CAAS;AAAA,EACJ,OACI;AACD,mBAAe,OAAO,uBAAuB,SAAS,MAAM;AAAA,EAC/D;AACD,iBAAe,OAAO,WAAW,YAAY,QAAQ,+BAA+B,SAAS,MAAM;AACnG,MAAI,eAAe,IAAI;AACvB,MAAI,gBAAgB,IAAI;AACxB,MAAI,cAAc,CAAA;AAClB,SAAO,QAAQ,CAAC,OAAO,UAAU;AAC7B,QAAI,QAAQ,YAAY,KAAK;AAC7B,QAAI,MAAM,SAAS;AAEf,UAAI,gBAAgB,cAAc;AAElC,YAAM,OAAO,eAAe,KAAK;AAEjC,UAAI,aAAa,aAAa;AAC9B,kBAAY,KAAK,CAAC,eAAe;AAC7B,mBAAW,aAAa,aAAa;AAAA,MACrD,CAAa;AAAA,IACJ,OACI;AACD,YAAM,OAAO,cAAc,KAAK;AAAA,IACnC;AAAA,EACT,CAAK;AAED,cAAY,QAAQ,CAAC,SAAS;AAAE,SAAK,aAAa,MAAM;AAAA,EAAE,CAAE;AAC5D,MAAI,SAAS,OAAO,aAAa,YAAY;AAC7C,YAAU,OAAO,aAAa,aAAa;AAC3C,SAAO;AACX;AAIO,SAAS,OAAO,QAAQ,QAAQ;AACnC,MAAI,SAAS,CAAA;AACb,MAAI,OAAO,CAAA;AAEX,MAAI,aAAa,OAAO,UAAU,CAAC;AACnC,SAAO,QAAQ,CAAC,UAAU;AACtB,QAAI,QAAQ;AACZ,QAAI,MAAM,SAAS;AACf,UAAI,SAAS,OAAO;AACpB,UAAI,eAAe,WAAW,UAAU,MAAM;AAC9C,UAAI;AACA,gBAAQ,MAAM,OAAO,YAAY;AAAA,MACpC,SACM,OAAO;AAEV,YAAI,QAAQ,OAAO,gBAAgB,GAAG;AAClC,gBAAM;AAAA,QACT;AACD,gBAAQ;AACR,cAAM,WAAW,MAAM;AACvB,cAAM,OAAO,MAAM;AACnB,cAAM,OAAO,MAAM;AAAA,MACtB;AAAA,IACJ,OACI;AACD,UAAI;AACA,gBAAQ,MAAM,OAAO,MAAM;AAAA,MAC9B,SACM,OAAO;AAEV,YAAI,QAAQ,OAAO,gBAAgB,GAAG;AAClC,gBAAM;AAAA,QACT;AACD,gBAAQ;AACR,cAAM,WAAW,MAAM;AACvB,cAAM,OAAO,MAAM;AACnB,cAAM,OAAO,MAAM;AAAA,MACtB;AAAA,IACJ;AACD,QAAI,SAAS,QAAW;AACpB,YAAM,IAAI,MAAM,aAAa;AAAA,IAChC;AACD,WAAO,KAAK,KAAK;AACjB,SAAK,KAAK,MAAM,aAAa,IAAI;AAAA,EACzC,CAAK;AACD,SAAO,OAAO,UAAU,QAAQ,IAAI;AACxC;AAIO,MAAM,mBAAmB,MAAM;AAAA,EAGlC,YAAY,OAAO,QAAQ,WAAW;AAClC,UAAM,OAAQ,MAAM,OAAO,OAAO,UAAU,IAAI,SAAS,MAAM;AAC/D,UAAM,UAAW,WAAW,MAAM,MAAM;AACxC,UAAM,SAAS,MAAM,WAAW,OAAO;AAL3C;AACA;AAKI,qBAAiB,MAAM,EAAE,OAAO,OAAQ,CAAA;AAAA,EAC3C;AAAA,EACD,eAAe;AAEX,UAAM,eAAe,KAAK,MAAM,aAAY;AAC5C,UAAM,SAAS,CAAA;AACf,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,aAAO,KAAK,YAAY;AAAA,IAC3B;AACD,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ,QAAQ;AACnB,UAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO;AAC/C,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,WAAK,YAAY,wBAAwB,KAAK;AAAA,IACjD;AACD,QAAI,QAAQ,KAAK;AACjB,QAAI,UAAU,IAAI;AACd,cAAQ,MAAM;AACd,aAAO,WAAW,MAAM,MAAM;AAAA,IACjC;AACD,wBAAoB,MAAM,QAAQ,OAAO,iBAAiB,KAAK,YAAa,MAAM,KAAK,YAAa,GAAG;AACvG,QAAI,SAAS,CAAA;AACb,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,aAAO,KAAK,KAAK,KAAK;AAAA,IACzB;AACD,WAAO,KAAK,QAAQ,QAAQ,KAAK;AAAA,EACpC;AAAA,EACD,OAAO,QAAQ;AACX,QAAI,QAAQ,KAAK;AACjB,QAAI,UAAU,IAAI;AACd,cAAQ,OAAO;AAMf,aAAO,QAAQ,YAAY,OAAO,YAAY,4BAA4B,kBAAkB,EAAE,QAAQ,OAAO,OAAO,QAAQ,QAAQ,UAAU,QAAQ,OAAO,WAAU,CAAE;AAAA,IAC5K;AACD,QAAI,SAAS,CAAA;AACb,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,aAAO,KAAK,IAAI,eAAe,KAAK,KAAK,CAAC;AAAA,IAC7C;AACD,WAAO,OAAO,QAAQ,MAAM;AAAA,EAC/B;AACL;ACxJO,MAAM,qBAAqB,MAAM;AAAA,EACpC,YAAY,WAAW;AACnB,UAAM,QAAQ,QAAQ,WAAW,KAAK;AAAA,EACzC;AAAA,EACD,eAAe;AACX,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ,QAAQ;AACnB,UAAM,QAAQ,MAAM,YAAY,QAAQ,MAAM;AAC9C,WAAO,OAAO,WAAW,QAAQ,IAAI,CAAC;AAAA,EACzC;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,CAAC,CAAC,OAAO;EACnB;AACL;ACdO,MAAM,0BAA0B,MAAM;AAAA,EACzC,YAAY,MAAM,WAAW;AACzB,UAAM,MAAM,MAAM,WAAW,IAAI;AAAA,EACpC;AAAA,EACD,eAAe;AACX,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ,OAAO;AAClB,YAAQ,aAAa,KAAK;AAC1B,QAAI,SAAS,OAAO,WAAW,MAAM,MAAM;AAC3C,cAAU,OAAO,WAAW,KAAK;AACjC,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,OAAO,UAAU,OAAO,UAAW,GAAE,IAAI;AAAA,EACnD;AACL;AAIO,MAAM,mBAAmB,kBAAkB;AAAA,EAC9C,YAAY,WAAW;AACnB,UAAM,SAAS,SAAS;AAAA,EAC3B;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,QAAQ,MAAM,OAAO,MAAM,CAAC;AAAA,EACtC;AACL;AC1BO,MAAM,wBAAwB,MAAM;AAAA,EAEvC,YAAY,MAAM,WAAW;AACzB,QAAI,OAAO,UAAU,OAAO,IAAI;AAChC,UAAM,MAAM,MAAM,WAAW,KAAK;AAHtC;AAII,qBAAiB,MAAM,EAAE,KAAI,GAAI,EAAE,MAAM,SAAQ,CAAE;AAAA,EACtD;AAAA,EACD,eAAe;AACX,WAAQ,qEAAsE,UAAU,GAAG,IAAI,KAAK,OAAO,CAAC;AAAA,EAC/G;AAAA,EACD,OAAO,QAAQ,QAAQ;AACnB,QAAI,OAAO,aAAa,MAAM,YAAY,QAAQ,KAAK,IAAI,CAAC;AAC5D,QAAI,KAAK,WAAW,KAAK,MAAM;AAC3B,WAAK,YAAY,yBAAyB,MAAM;AAAA,IACnD;AACD,WAAO,OAAO,WAAW,IAAI;AAAA,EAChC;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,QAAQ,OAAO,UAAU,KAAK,IAAI,CAAC;AAAA,EAC7C;AACL;ACzBA,MAAM,QAAQ,IAAI,WAAW,CAAA,CAAE;AAIxB,MAAM,kBAAkB,MAAM;AAAA,EACjC,YAAY,WAAW;AACnB,UAAM,QAAQ,IAAI,WAAW,KAAK;AAAA,EACrC;AAAA,EACD,eAAe;AACX,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ,OAAO;AAClB,QAAI,SAAS,MAAM;AACf,WAAK,YAAY,YAAY,KAAK;AAAA,IACrC;AACD,WAAO,OAAO,WAAW,KAAK;AAAA,EACjC;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,UAAU,CAAC;AAClB,WAAO;AAAA,EACV;AACL;ACnBA,MAAMb,SAAO,OAAO,CAAC;AACrB,MAAM,OAAO,OAAO,CAAC;AACrB,MAAM,iBAAiB,OAAO,oEAAoE;AAI3F,MAAM,oBAAoB,MAAM;AAAA,EAGnC,YAAY,MAAM,QAAQ,WAAW;AACjC,UAAM,QAAS,SAAS,QAAQ,UAAW,OAAO;AAClD,UAAM,MAAM,MAAM,WAAW,KAAK;AAJtC;AACA;AAII,qBAAiB,MAAM,EAAE,MAAM,OAAQ,GAAE,EAAE,MAAM,UAAU,QAAQ,UAAS,CAAE;AAAA,EACjF;AAAA,EACD,eAAe;AACX,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ,QAAQ;AACnB,QAAI,QAAQ,UAAU,MAAM,YAAY,QAAQ,KAAK,IAAI,CAAC;AAE1D,QAAI,eAAe,KAAK,gBAAgB,WAAW,CAAC;AACpD,QAAI,KAAK,QAAQ;AACb,UAAI,SAAS,KAAK,cAAe,KAAK,OAAO,IAAK,CAAC;AACnD,UAAI,QAAQ,UAAU,QAAQ,EAAE,SAAS,OAAO;AAC5C,aAAK,YAAY,uBAAuB,MAAM;AAAA,MACjD;AACD,cAAQ,OAAO,OAAO,IAAI,QAAQ;AAAA,IACrC,WACQ,QAAQA,UAAQ,QAAQ,KAAK,cAAc,KAAK,OAAO,CAAC,GAAG;AAChE,WAAK,YAAY,uBAAuB,MAAM;AAAA,IACjD;AACD,WAAO,OAAO,WAAW,KAAK;AAAA,EACjC;AAAA,EACD,OAAO,QAAQ;AACX,QAAI,QAAQ,KAAK,OAAO,UAAW,GAAE,KAAK,OAAO,CAAC;AAClD,QAAI,KAAK,QAAQ;AACb,cAAQ,SAAS,OAAO,KAAK,OAAO,CAAC;AAAA,IACxC;AACD,WAAO;AAAA,EACV;AACL;ACrCO,MAAM,oBAAoB,kBAAkB;AAAA,EAC/C,YAAY,WAAW;AACnB,UAAM,UAAU,SAAS;AAAA,EAC5B;AAAA,EACD,eAAe;AACX,WAAO;AAAA,EACV;AAAA,EACD,OAAO,QAAQ,QAAQ;AACnB,WAAO,MAAM,OAAO,QAAQ,YAAY,MAAM,YAAY,QAAQ,QAAQ,CAAC,CAAC;AAAA,EAC/E;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,aAAa,MAAM,OAAO,MAAM,CAAC;AAAA,EAC3C;AACL;ACZO,MAAM,mBAAmB,MAAM;AAAA,EAElC,YAAY,QAAQ,WAAW;AAC3B,QAAI,UAAU;AACd,UAAM,QAAQ,CAAA;AACd,WAAO,QAAQ,CAAC,UAAU;AACtB,UAAI,MAAM,SAAS;AACf,kBAAU;AAAA,MACb;AACD,YAAM,KAAK,MAAM,IAAI;AAAA,IACjC,CAAS;AACD,UAAM,OAAQ,WAAW,MAAM,KAAK,GAAG,IAAI;AAC3C,UAAM,SAAS,MAAM,WAAW,OAAO;AAX3C;AAYI,qBAAiB,MAAM,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,EAAC,CAAE;AAAA,EACnE;AAAA,EACD,eAAe;AACX,UAAM,SAAS,CAAA;AACf,SAAK,OAAO,QAAQ,CAAC,UAAU;AAC3B,aAAO,KAAK,MAAM,aAAc,CAAA;AAAA,IAC5C,CAAS;AAED,UAAM,cAAc,KAAK,OAAO,OAAO,CAAC,OAAO,UAAU;AACrD,YAAM,OAAO,MAAM;AACnB,UAAI,MAAM;AACN,YAAI,CAAC,MAAM,IAAI,GAAG;AACd,gBAAM,IAAI,IAAI;AAAA,QACjB;AACD,cAAM,IAAI;AAAA,MACb;AACD,aAAO;AAAA,IACV,GAAE,CAAE,CAAA;AAEL,SAAK,OAAO,QAAQ,CAAC,OAAO,UAAU;AAClC,UAAI,OAAO,MAAM;AACjB,UAAI,CAAC,QAAQ,YAAY,IAAI,MAAM,GAAG;AAClC;AAAA,MACH;AACD,UAAI,SAAS,UAAU;AACnB,eAAO;AAAA,MACV;AACD,UAAI,OAAO,IAAI,KAAK,MAAM;AACtB;AAAA,MACH;AACD,aAAO,IAAI,IAAI,OAAO,KAAK;AAAA,IACvC,CAAS;AACD,WAAO,OAAO,OAAO,MAAM;AAAA,EAC9B;AAAA,EACD,OAAO,QAAQ,QAAQ;AACnB,UAAM,QAAQ,MAAM,YAAY,QAAQ,OAAO;AAC/C,WAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAAA,EACzC;AAAA,EACD,OAAO,QAAQ;AACX,WAAO,OAAO,QAAQ,KAAK,MAAM;AAAA,EACpC;AACL;AC3DA,SAAS,aAAa,MAAM,aAAa;AACrC,SAAO;AAAA,IACH,SAAS,WAAW,IAAI;AAAA,IACxB,aAAa,YAAY,IAAI,CAAC,YAAY,UAAU;AAChD,qBAAe,YAAY,YAAY,EAAE,GAAG,gBAAgB,eAAe,KAAK,KAAK,UAAU;AAC/F,aAAO,WAAW;IAC9B,CAAS;AAAA,EACT;AACA;AAIO,SAAS,cAAc,OAAO;AACjC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,WAAO,MAAM,IAAI,CAAC,KAAK,UAAU;AAC7B,UAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,uBAAe,IAAI,WAAW,GAAG,oBAAoB,SAAS,KAAK,KAAK,GAAG;AAC3E,eAAO,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,MACrC;AACD,qBAAe,OAAO,QAAQ,OAAQ,QAAS,UAAU,4BAA4B,SAAS,KAAK;AACnG,aAAO,aAAa,IAAI,SAAS,IAAI,WAAW;AAAA,IAC5D,CAAS;AAAA,EACJ;AACD,iBAAe,SAAS,QAAQ,OAAQ,UAAW,UAAU,uBAAuB,SAAS,KAAK;AAClG,QAAM,SAAS,OAAO,KAAK,KAAK,EAAE,IAAI,CAAC,SAAS;AAC5C,UAAM,cAAc,MAAM,IAAI,EAAE,OAAO,CAAC,OAAO,eAAe;AAC1D,YAAM,UAAU,IAAI;AACpB,aAAO;AAAA,IACV,GAAE,CAAE,CAAA;AACL,WAAO,aAAa,MAAM,OAAO,KAAK,WAAW,EAAE,KAAI,CAAE;AAAA,EACjE,CAAK;AACD,SAAO,KAAK,CAAC,GAAGK,OAAO,EAAE,QAAQ,cAAcA,GAAE,OAAO,CAAE;AAC1D,SAAO;AACX;ACtBO,SAAS,GAAG,OAAO;AACtB,SAAO,UAAU,YAAY,KAAK,CAAC;AACvC;ACAA,SAAS,OAAO,OAAO;AACnB,QAAM,SAAS,oBAAI;AACnB,QAAM,QAAQ,CAACP,OAAM,OAAO,IAAIA,EAAC,CAAC;AAClC,SAAO,OAAO,OAAO,MAAM;AAC/B;AACA,MAAM,iBAAiB;AACvB,MAAM,gBAAgB,OAAO,eAAe,MAAM,GAAG,CAAC;AAEtD,MAAM,WAAW;AACjB,MAAM,UAAU,OAAO,SAAS,MAAM,GAAG,CAAC;AAC1C,MAAM,WAAW;AACjB,MAAM,UAAU,OAAO,SAAS,MAAM,GAAG,CAAC;AAC1C,MAAM,eAAe;AACrB,MAAM,cAAc,OAAO,aAAa,MAAM,GAAG,CAAC;AAClD,MAAM,WAAW;AAEjB,MAAM,YAAY,CAAC,UAAU,cAAc,UAAU,QAAQ,EAAE,KAAK,GAAG;AACvE,MAAM,WAAW,OAAO,UAAU,MAAM,GAAG,CAAC;AAE5C,MAAM,eAAe;AAAA,EACjB,KAAK;AAAA,EAAc,KAAK;AAAA,EACxB,KAAK;AAAA,EAAgB,KAAK;AAAA,EAC1B,KAAK;AAAA,EAAS,KAAK;AACvB;AAEA,MAAM,wBAAwB,IAAI,OAAO,SAAS;AAClD,MAAM,oBAAoB,IAAI,OAAO,WAAW;AAChD,MAAM,gBAAgB,IAAI,OAAO,6BAA6B;AAE9D,MAAM,UAAU,IAAI,OAAO,8BAA8B;AACzD,MAAM,YAAY,IAAI,OAAO,qDAAqD;AAClF,MAAM,eAAN,MAAM,aAAY;AAAA,EAKd,YAAY,QAAQ;AAMpB;AAVA,uBAAAiB,UAAA;AACA;AAII,uBAAKA,UAAU;AACf,uBAAK,SAAU,OAAO;EACzB;AAAA,EALD,IAAI,SAAS;AAAE,WAAO,mBAAKA;AAAA,EAAU;AAAA,EACrC,IAAI,SAAS;AAAE,WAAO,mBAAK,SAAQ,SAAS,mBAAKA;AAAA,EAAU;AAAA,EAK3D,QAAQ;AAAE,WAAO,IAAI,aAAY,mBAAK,QAAO;AAAA,EAAI;AAAA,EACjD,QAAQ;AAAE,uBAAKA,UAAU;AAAA,EAAI;AAAA;AAAA,EAW7B,WAAW,SAAS;AAChB,UAAM,MAAM,KAAK;AACjB,QAAI,IAAI,SAAS,aAAa,CAAC,QAAQ,IAAI,IAAI,IAAI,GAAG;AAClD,YAAM,IAAI,MAAM,oBAAoB,IAAI,IAAI,EAAE;AAAA,IACjD;AACD,WAAO,KAAK,IAAK,EAAC;AAAA,EACrB;AAAA;AAAA,EAED,QAAQ,MAAM;AACV,QAAI,KAAK,OAAO,SAAS,MAAM;AAC3B,YAAM,MAAM,KAAK;AACjB,YAAM,IAAI,MAAM,YAAY,IAAI,SAAS,IAAI,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,EAAE;AAAA,IAClF;AACD,WAAO,KAAK,IAAK,EAAC;AAAA,EACrB;AAAA;AAAA,EAED,WAAW;AACP,UAAM,MAAM,KAAK;AACjB,QAAI,IAAI,SAAS,cAAc;AAC3B,YAAM,IAAI,MAAM,WAAW;AAAA,IAC9B;AACD,UAAM,SAAS,sBAAK,oCAAL,WAAqB,mBAAKA,YAAU,GAAG,IAAI,QAAQ;AAClE,uBAAKA,UAAU,IAAI,QAAQ;AAC3B,WAAO;AAAA,EACV;AAAA;AAAA,EAED,YAAY;AACR,UAAM,MAAM,KAAK;AACjB,QAAI,IAAI,SAAS,cAAc;AAC3B,YAAM,IAAI,MAAM,WAAW;AAAA,IAC9B;AACD,UAAM,SAAS,CAAA;AACf,WAAO,mBAAKA,YAAU,IAAI,QAAQ,GAAG;AACjC,YAAM,OAAO,KAAK,KAAI,EAAG;AACzB,aAAO,KAAK,sBAAK,oCAAL,WAAqB,mBAAKA,YAAU,GAAG,KAAK;AACxD,yBAAKA,UAAU;AAAA,IAClB;AACD,uBAAKA,UAAU,IAAI,QAAQ;AAC3B,WAAO;AAAA,EACV;AAAA;AAAA,EAED,OAAO;AACH,QAAI,mBAAKA,aAAW,mBAAK,SAAQ,QAAQ;AACrC,YAAM,IAAI,MAAM,eAAe;AAAA,IAClC;AACD,WAAO,mBAAK,SAAQ,mBAAKA,SAAO;AAAA,EACnC;AAAA;AAAA,EAED,YAAY,SAAS;AACjB,UAAM,MAAM,KAAK,SAAS,SAAS;AACnC,WAAQ,OAAO,QAAQ,QAAQ,IAAI,GAAG,IAAK,MAAM;AAAA,EACpD;AAAA;AAAA,EAED,SAAS,MAAM;AACX,QAAI,KAAK,WAAW,GAAG;AACnB,aAAO;AAAA,IACV;AACD,UAAM,MAAM,KAAK;AACjB,WAAQ,IAAI,SAAS,OAAQ,IAAI,OAAO;AAAA,EAC3C;AAAA;AAAA,EAED,MAAM;AACF,UAAM,SAAS,KAAK;AACpB,2BAAKA,UAAL;AACA,WAAO;AAAA,EACV;AAAA,EACD,WAAW;AACP,UAAM,SAAS,CAAA;AACf,aAAS,IAAI,mBAAKA,WAAS,IAAI,mBAAK,SAAQ,QAAQ,KAAK;AACrD,YAAM,QAAQ,mBAAK,SAAQ,CAAC;AAC5B,aAAO,KAAK,GAAG,MAAM,IAAI,IAAI,MAAM,IAAI,EAAE;AAAA,IAC5C;AACD,WAAO,gBAAgB,OAAO,KAAK,GAAG,CAAC;AAAA,EAC1C;AACL;AA9FIA,WAAA;AACA;AASA;AAAA,oBAAe,SAAC,OAAO,GAAG,KAAK,GAAG;AAC9B,SAAO,IAAI,aAAY,mBAAK,SAAQ,MAAM,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM;AAC3D,WAAO,OAAO,OAAO,OAAO,OAAO,CAAA,GAAI,GAAG;AAAA,MACtC,OAAQ,EAAE,QAAQ;AAAA,MAClB,UAAW,EAAE,WAAW;AAAA,MACxB,UAAW,EAAE,WAAW;AAAA,IAC3B,CAAA,CAAC;AAAA,EACL,CAAA,CAAC;AACL;AAnBL,IAAM,cAAN;AAgGA,SAAS,IAAI,MAAM;AACf,QAAM,SAAS,CAAA;AACf,QAAMC,cAAa,CAAC,YAAY;AAC5B,UAAM,QAAS,SAAS,KAAK,SAAU,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI;AACtE,UAAM,IAAI,MAAM,iBAAiB,KAAK,OAAO,MAAM,KAAK,OAAO,EAAE;AAAA,EACzE;AACI,MAAI,WAAW,CAAA;AACf,MAAI,SAAS,CAAA;AACb,MAAI,SAAS;AACb,SAAO,SAAS,KAAK,QAAQ;AAEzB,QAAI,MAAM,KAAK,UAAU,MAAM;AAC/B,QAAI,QAAQ,IAAI,MAAM,qBAAqB;AAC3C,QAAI,OAAO;AACP,gBAAU,MAAM,CAAC,EAAE;AACnB,YAAM,KAAK,UAAU,MAAM;AAAA,IAC9B;AACD,UAAM,QAAQ,EAAE,OAAO,SAAS,QAAQ,UAAU,IAAI,UAAU,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,OAAO;AAClH,WAAO,KAAK,KAAK;AACjB,QAAI,OAAQ,aAAa,IAAI,CAAC,CAAC,KAAK;AACpC,QAAI,MAAM;AACN,YAAM,OAAO;AACb,YAAM,OAAO,IAAI,CAAC;AAClB;AACA,UAAI,SAAS,cAAc;AACvB,iBAAS,KAAK,OAAO,SAAS,CAAC;AAC/B,eAAO,KAAK,OAAO,SAAS,CAAC;AAAA,MAChC,WACQ,QAAQ,eAAe;AAC5B,YAAI,SAAS,WAAW,GAAG;AACvB,UAAAA,YAAW,0BAA0B;AAAA,QACxC;AACD,cAAM,QAAQ,SAAS;AACvB,QAAC,OAAO,MAAM,KAAK,EAAG,QAAQ,OAAO,SAAS;AAC9C,cAAM;AACN,cAAM,WAAW,OAAO;AACxB,QAAC,OAAO,MAAM,QAAQ,EAAG,WAAW,OAAO,SAAS;AAAA,MACvD,WACQ,SAAS,SAAS;AACvB,cAAM,WAAW,OAAO;AACxB,QAAC,OAAO,MAAM,QAAQ,EAAG,WAAW,OAAO,SAAS;AACpD,eAAO,KAAK,OAAO,SAAS,CAAC;AAAA,MAChC,WACQ,SAAS,gBAAgB;AAC9B,cAAM,OAAO;AAAA,MAChB,WACQ,SAAS,iBAAiB;AAE/B,YAAI,SAAS,OAAO,IAAG,EAAG;AAC1B,YAAI,OAAO,SAAS,KAAK,OAAO,OAAO,SAAS,CAAC,EAAE,SAAS,UAAU;AAClE,gBAAM,QAAQ,OAAO,IAAG,EAAG;AAC3B,mBAAS,QAAQ;AACjB,UAAC,OAAO,OAAO,SAAS,CAAC,EAAG,QAAQ,UAAU,KAAK;AAAA,QACtD;AACD,YAAI,OAAO,WAAW,KAAK,OAAO,OAAO,SAAS,CAAC,EAAE,SAAS,WAAW;AACrE,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC5C;AACD,QAAC,OAAO,OAAO,SAAS,CAAC,EAAG,QAAQ;AAAA,MACvC;AACD;AAAA,IACH;AACD,YAAQ,IAAI,MAAM,aAAa;AAC/B,QAAI,OAAO;AACP,YAAM,OAAO,MAAM,CAAC;AACpB,gBAAU,MAAM,KAAK;AACrB,UAAI,SAAS,IAAI,MAAM,IAAI,GAAG;AAC1B,cAAM,OAAO;AACb;AAAA,MACH;AACD,UAAI,MAAM,KAAK,MAAM,SAAS,GAAG;AAC7B,cAAM,OAAO;AACb;AAAA,MACH;AACD,YAAM,OAAO;AACb;AAAA,IACH;AACD,YAAQ,IAAI,MAAM,iBAAiB;AACnC,QAAI,OAAO;AACP,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,OAAO;AACb,gBAAU,MAAM,KAAK;AACrB;AAAA,IACH;AACD,UAAM,IAAI,MAAM,oBAAoB,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,gBAAgB,MAAM,EAAE;AAAA,EACrF;AACD,SAAO,IAAI,YAAY,OAAO,IAAI,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC,CAAC;AAC9D;AAEA,SAAS,YAAY,KAAK,SAAS;AAC/B,MAAI,WAAW,CAAA;AACf,aAAW,OAAO,QAAQ,QAAQ;AAC9B,QAAI,IAAI,IAAI,GAAG,GAAG;AACd,eAAS,KAAK,GAAG;AAAA,IACpB;AAAA,EACJ;AACD,MAAI,SAAS,SAAS,GAAG;AACrB,UAAM,IAAI,MAAM,sBAAsB,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,EAC9D;AACL;AAGA,SAAS,YAAY,MAAM,QAAQ;AAC/B,MAAI,OAAO,YAAY,OAAO,GAAG;AAC7B,UAAM,UAAU,OAAO,IAAG,EAAG;AAC7B,QAAI,YAAY,MAAM;AAClB,YAAM,IAAI,MAAM,YAAY,IAAI,SAAS,OAAO,EAAE;AAAA,IACrD;AAAA,EACJ;AACD,SAAO,OAAO,QAAQ,IAAI;AAC9B;AAEA,SAAS,gBAAgB,QAAQ,SAAS;AACtC,QAAM,WAAW,oBAAI;AACrB,SAAO,MAAM;AACT,UAAM,UAAU,OAAO,SAAS,SAAS;AACzC,QAAI,WAAW,QAAS,WAAW,CAAC,QAAQ,IAAI,OAAO,GAAI;AACvD;AAAA,IACH;AACD,WAAO,IAAG;AACV,QAAI,SAAS,IAAI,OAAO,GAAG;AACvB,YAAM,IAAI,MAAM,uBAAuB,KAAK,UAAU,OAAO,CAAC,EAAE;AAAA,IACnE;AACD,aAAS,IAAI,OAAO;AAAA,EACvB;AACD,SAAO,OAAO,OAAO,QAAQ;AACjC;AAEA,SAAS,kBAAkB,QAAQ;AAC/B,MAAI,YAAY,gBAAgB,QAAQ,OAAO;AAE/C,cAAY,WAAW,OAAO,8BAA8B,MAAM,GAAG,CAAC,CAAC;AACvE,cAAY,WAAW,OAAO,+BAA+B,MAAM,GAAG,CAAC,CAAC;AAExE,MAAI,UAAU,IAAI,MAAM,GAAG;AACvB,WAAO;AAAA,EACV;AACD,MAAI,UAAU,IAAI,MAAM,GAAG;AACvB,WAAO;AAAA,EACV;AACD,MAAI,UAAU,IAAI,SAAS,GAAG;AAC1B,WAAO;AAAA,EACV;AACD,MAAI,UAAU,IAAI,YAAY,GAAG;AAC7B,WAAO;AAAA,EACV;AAED,MAAI,UAAU,IAAI,UAAU,GAAG;AAC3B,WAAO;AAAA,EACV;AACD,SAAO;AACX;AAEA,SAAS,cAAc,QAAQ,cAAc;AACzC,SAAO,OAAO,YAAY,IAAI,CAAC,MAAM,UAAU,KAAK,GAAG,YAAY,CAAC;AACxE;AAEA,SAAS,WAAW,QAAQ;AACxB,MAAI,OAAO,SAAS,IAAI,GAAG;AACvB,WAAO,IAAG;AACV,QAAI,OAAO,SAAS,QAAQ,GAAG;AAC3B,aAAO,UAAU,OAAO,IAAK,EAAC,IAAI;AAAA,IACrC;AACD,UAAM,IAAI,MAAM,aAAa;AAAA,EAChC;AACD,SAAO;AACX;AACA,SAAS,WAAW,QAAQ;AACxB,MAAI,OAAO,QAAQ;AACf,UAAM,IAAI,MAAM,+BAA+B,OAAO,MAAM,KAAK,OAAO,UAAU,EAAE;AAAA,EACvF;AACL;AACA,MAAM,iBAAiB,IAAI,OAAO,oBAAoB;AACtD,SAAS,gBAAgB,MAAM;AAC3B,QAAM,QAAQ,KAAK,MAAM,SAAS;AAClC,iBAAe,OAAO,gBAAgB,QAAQ,IAAI;AAClD,MAAI,SAAS,QAAQ;AACjB,WAAO;AAAA,EACV;AACD,MAAI,SAAS,OAAO;AAChB,WAAO;AAAA,EACV;AACD,MAAI,MAAM,CAAC,GAAG;AAEV,UAAM,SAAS,SAAS,MAAM,CAAC,CAAC;AAChC,mBAAe,WAAW,KAAK,UAAU,IAAI,wBAAwB,QAAQ,IAAI;AAAA,EACpF,WACQ,MAAM,CAAC,GAAG;AAEf,UAAM,OAAO,SAAS,MAAM,CAAC,CAAC;AAC9B,mBAAe,SAAS,KAAK,QAAQ,OAAQ,OAAO,MAAO,GAAG,yBAAyB,QAAQ,IAAI;AAAA,EACtG;AACD,SAAO;AACX;AAEA,MAAM,SAAS,CAAA;AACf,MAAMC,aAAW,OAAO,IAAI,kBAAkB;AAC9C,MAAM,oBAAoB;AAC1B,MAAM,wBAAwB;AAC9B,MAAM,wBAAwB;AAC9B,MAAM,8BAA8B;AACpC,MAAM,2BAA2B;AACjC,MAAM,2BAA2B;AACjC,MAAM,yBAAyB;AAIxB,MAAM,aAAN,MAAM,WAAU;AAAA;AAAA;AAAA;AAAA,EAyCnB,YAAY,OAAO,MAAM,MAAM,UAAU,SAAS,YAAY,aAAa,eAAe;AA2I1F;AAhLA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKI,kBAAc,OAAO,QAAQ,WAAW;AACxC,WAAO,eAAe,MAAMA,YAAU,EAAE,OAAO,kBAAiB,CAAE;AAClE,QAAI,YAAY;AACZ,mBAAa,OAAO,OAAO,WAAW,MAAO,CAAA;AAAA,IAChD;AACD,QAAI,aAAa,SAAS;AACtB,UAAI,eAAe,QAAQ,iBAAiB,MAAM;AAC9C,cAAM,IAAI,MAAM,EAAE;AAAA,MACrB;AAAA,IACJ,WACQ,eAAe,QAAQ,iBAAiB,MAAM;AACnD,YAAM,IAAI,MAAM,EAAE;AAAA,IACrB;AACD,QAAI,aAAa,SAAS;AACtB,UAAI,cAAc,MAAM;AACpB,cAAM,IAAI,MAAM,EAAE;AAAA,MACrB;AAAA,IACJ,WACQ,cAAc,MAAM;AACzB,YAAM,IAAI,MAAM,EAAE;AAAA,IACrB;AACD,qBAAiB,MAAM;AAAA,MACnB;AAAA,MAAM;AAAA,MAAM;AAAA,MAAU;AAAA,MAAS;AAAA,MAAY;AAAA,MAAa;AAAA,IACpE,CAAS;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,OAAO,QAAQ;AACX,QAAI,UAAU,MAAM;AAChB,eAAS;AAAA,IACZ;AACD,QAAI,WAAW,QAAQ;AACnB,YAAM,OAAO,KAAK,QAAQ;AAC1B,UAAI,KAAK,WAAW;AAChB,cAAMC,UAAS,KAAK,MAAM,KAAK,cAAc,OAAO,MAAM,CAAC;AAC3D,QAAAA,QAAO,OAAO;AACd,QAAAA,QAAO,QAAQ,IAAK,KAAK,cAAc,IAAI,KAAK,OAAO,KAAK,WAAW,CAAC;AACxE,eAAO,KAAK,UAAUA,OAAM;AAAA,MAC/B;AACD,YAAMA,UAAS;AAAA,QACX,MAAQ,KAAK,aAAa,UAAW,UAAU,KAAK;AAAA,QACpD;AAAA,MAChB;AACY,UAAI,OAAQ,KAAK,YAAa,WAAW;AACrC,QAAAA,QAAO,UAAU,KAAK;AAAA,MACzB;AACD,UAAI,KAAK,WAAW;AAChB,QAAAA,QAAO,aAAa,KAAK,WAAW,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;AAAA,MAC9E;AACD,aAAO,KAAK,UAAUA,OAAM;AAAA,IAC/B;AACD,QAAI,SAAS;AAEb,QAAI,KAAK,WAAW;AAChB,gBAAU,KAAK,cAAc,OAAO,MAAM;AAC1C,gBAAU,IAAK,KAAK,cAAc,IAAI,KAAK,OAAO,KAAK,WAAW,CAAC;AAAA,IACtE,OACI;AACD,UAAI,KAAK,WAAW;AAChB,kBAAU,MAAM,KAAK,WAAW,IAAI,CAAC,SAAS,KAAK,OAAO,MAAM,CAAC,EAAE,KAAM,WAAW,SAAU,OAAO,GAAG,IAAI;AAAA,MAC/G,OACI;AACD,kBAAU,KAAK;AAAA,MAClB;AAAA,IACJ;AACD,QAAI,WAAW,WAAW;AACtB,UAAI,KAAK,YAAY,MAAM;AACvB,kBAAU;AAAA,MACb;AACD,UAAI,WAAW,UAAU,KAAK,MAAM;AAChC,kBAAU,MAAM,KAAK;AAAA,MACxB;AAAA,IACJ;AACD,WAAO;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,UAAU;AACN,WAAQ,KAAK,aAAa;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,UAAU;AACN,WAAQ,KAAK,aAAa;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,cAAc;AACV,WAAQ,KAAK,WAAW;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,KAAK,OAAO,SAAS;AACjB,QAAI,KAAK,WAAW;AAChB,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACxC;AACD,UAAI,KAAK,gBAAgB,MAAM,MAAM,WAAW,KAAK,aAAa;AAC9D,cAAM,IAAI,MAAM,uBAAuB;AAAA,MAC1C;AACD,YAAM,QAAQ;AACd,aAAO,MAAM,IAAI,CAAC,MAAO,MAAM,cAAc,KAAK,GAAG,OAAO,CAAE;AAAA,IACjE;AACD,QAAI,KAAK,WAAW;AAChB,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACxC;AACD,UAAI,MAAM,WAAW,KAAK,WAAW,QAAQ;AACzC,cAAM,IAAI,MAAM,uBAAuB;AAAA,MAC1C;AACD,YAAM,QAAQ;AACd,aAAO,MAAM,IAAI,CAAC,GAAG,MAAO,MAAM,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,CAAE;AAAA,IACpE;AACD,WAAO,QAAQ,KAAK,MAAM,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkEK,UAAU,OAAO,SAAS;AAAA;AAC5B,YAAM,WAAW,CAAA;AACjB,YAAM,SAAS,CAAC,KAAK;AACrB,4BAAK,0BAAL,WAAgB,UAAU,OAAO,SAAS,CAACC,WAAU;AACjD,eAAO,CAAC,IAAIA;AAAA,MACxB;AACQ,UAAI,SAAS,QAAQ;AACjB,cAAM,QAAQ,IAAI,QAAQ;AAAA,MAC7B;AACD,aAAO,OAAO,CAAC;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,OAAO,KAAK,KAAK,cAAc;AAC3B,QAAI,WAAU,YAAY,GAAG,GAAG;AAC5B,aAAO;AAAA,IACV;AACD,QAAI,OAAQ,QAAS,UAAU;AAC3B,UAAI;AACA,eAAO,WAAU,KAAK,IAAI,GAAG,GAAG,YAAY;AAAA,MAC/C,SACM,OAAO;AACV,uBAAe,OAAO,sBAAsB,OAAO,GAAG;AAAA,MACzD;AAAA,IACJ,WACQ,eAAe,aAAa;AACjC,UAAIC,QAAO,IAAI,WAAW;AAC1B,UAAI,QAAQ;AACZ,UAAI,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,OAAO,KAAK,IAAI,SAAS,YAAY,GAAG;AAEpF,mBAAW;AACX,gBAAQ,IAAI,UAAS,EAAG,IAAI,CAAC,MAAM,WAAU,KAAK,CAAC,CAAC;AACpD,QAAAA,QAAO,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE,OAAQ,CAAA,EAAE,KAAK,GAAG,CAAC;AAAA,MACzD,OACI;AAED,QAAAA,QAAO,gBAAgB,IAAI,QAAQ,MAAM,CAAC;AAC1C,mBAAWA;AAAA,MACd;AAED,UAAI,gBAAgB;AACpB,UAAI,cAAc;AAClB,aAAO,IAAI,UAAU,IAAI,SAAS,SAAS,GAAG;AAC1C,cAAM,UAAU,IAAI;AACpB,wBAAgB,IAAI,WAAU,QAAQ,IAAIA,OAAM,UAAU,MAAM,OAAO,aAAa,aAAa;AACjG,sBAAc,QAAQ;AACtB,QAAAA,SAAQ,QAAQ;AAChB,mBAAW;AACX,gBAAQ;AAAA,MACX;AACD,UAAIC,WAAU;AACd,YAAM,WAAW,gBAAgB,KAAK,WAAW;AACjD,UAAI,SAAS,IAAI,SAAS,GAAG;AACzB,YAAI,CAAC,cAAc;AACf,gBAAM,IAAI,MAAM,EAAE;AAAA,QACrB;AACD,QAAAA,WAAU;AAAA,MACb;AACD,YAAMC,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,IAAK,EAAC,OAAO;AACpD,UAAI,IAAI,QAAQ;AACZ,cAAM,IAAI,MAAM,iBAAiB;AAAA,MACpC;AACD,aAAO,IAAI,WAAU,QAAQA,OAAMF,OAAM,UAAUC,UAAS,OAAO,aAAa,aAAa;AAAA,IAChG;AACD,UAAM,OAAO,IAAI;AACjB,mBAAe,CAAC,QAAS,OAAQ,SAAU,YAAY,KAAK,MAAM,OAAO,GAAI,gBAAgB,YAAY,IAAI;AAC7G,QAAI,UAAU,IAAI;AAClB,QAAI,WAAW,MAAM;AACjB,qBAAe,cAAc,+BAA+B,eAAe,IAAI,OAAO;AACtF,gBAAU,CAAC,CAAC;AAAA,IACf;AACD,QAAI,OAAO,IAAI;AACf,QAAI,aAAa,KAAK,MAAM,cAAc;AAC1C,QAAI,YAAY;AACZ,YAAM,cAAc,SAAS,WAAW,CAAC,KAAK,IAAI;AAClD,YAAM,gBAAgB,WAAU,KAAK;AAAA,QACjC,MAAM,WAAW,CAAC;AAAA,QAClB,YAAY,IAAI;AAAA,MAChC,CAAa;AACD,aAAO,IAAI,WAAU,QAAQ,QAAQ,IAAI,MAAM,SAAS,SAAS,MAAM,aAAa,aAAa;AAAA,IACpG;AACD,QAAI,SAAS,WAAW,KAAK;AAAA,MAAW;AAAA;AAAA,IAAQ,KAAkB,KAAK;AAAA,MAAW;AAAA;AAAA,OAAmB;AACjG,YAAM,QAAS,IAAI,cAAc,OAAQ,IAAI,WAAW,IAAI,CAAC,MAAM,WAAU,KAAK,CAAC,CAAC,IAAI;AACxF,YAAM,QAAQ,IAAI,WAAU,QAAQ,QAAQ,IAAI,MAAM,SAAS,SAAS,OAAO,MAAM,IAAI;AAEzF,aAAO;AAAA,IACV;AACD,WAAO,gBAAgB,IAAI,IAAI;AAC/B,WAAO,IAAI,WAAU,QAAQ,QAAQ,IAAI,MAAM,MAAM,SAAS,MAAM,MAAM,IAAI;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,YAAY,OAAO;AACtB,WAAQ,SAAS,MAAMJ,UAAQ,MAAM;AAAA,EACxC;AACL;AArKI;AAAA,eAAU,SAAC,UAAU,OAAO,SAAS,UAAU;AAC3C,MAAI,KAAK,WAAW;AAChB,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACxC;AACD,QAAI,KAAK,gBAAgB,MAAM,MAAM,WAAW,KAAK,aAAa;AAC9D,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC1C;AACD,UAAM,YAAY,KAAK;AACvB,UAAMC,UAAS,MAAM;AACrB,IAAAA,QAAO,QAAQ,CAACC,QAAO,UAAU;;AAC7B,sBAAAP,MAAA,WAAU,0BAAV,KAAAA,KAAqB,UAAUO,QAAO,SAAS,CAACA,WAAU;AACtD,QAAAD,QAAO,KAAK,IAAIC;AAAA,MACpC;AAAA,IACA,CAAa;AACD,aAASD,OAAM;AACf;AAAA,EACH;AACD,MAAI,KAAK,WAAW;AAChB,UAAM,aAAa,KAAK;AAExB,QAAIA;AACJ,QAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,MAAAA,UAAS,MAAM;IAClB,OACI;AACD,UAAI,SAAS,QAAQ,OAAQ,UAAW,UAAU;AAC9C,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACxC;AACD,MAAAA,UAAS,WAAW,IAAI,CAAC,UAAU;AAC/B,YAAI,CAAC,MAAM,MAAM;AACb,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACpE;AACD,YAAI,EAAE,MAAM,QAAQ,QAAQ;AACxB,gBAAM,IAAI,MAAM,+BAA+B,MAAM,IAAI,EAAE;AAAA,QAC9D;AACD,eAAO,MAAM,MAAM,IAAI;AAAA,MAC3C,CAAiB;AAAA,IACJ;AACD,QAAIA,QAAO,WAAW,KAAK,WAAW,QAAQ;AAC1C,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC1C;AACD,IAAAA,QAAO,QAAQ,CAACC,QAAO,UAAU;;AAC7B,sBAAAP,MAAA,WAAW,KAAK,GAAE,0BAAlB,KAAAA,KAA6B,UAAUO,QAAO,SAAS,CAACA,WAAU;AAC9D,QAAAD,QAAO,KAAK,IAAIC;AAAA,MACpC;AAAA,IACA,CAAa;AACD,aAASD,OAAM;AACf;AAAA,EACH;AACD,QAAM,SAAS,QAAQ,KAAK,MAAM,KAAK;AACvC,MAAI,OAAO,MAAM;AACb,aAAS,KAAM,WAAkB;AAAA;AAAE,iBAAS,MAAM,MAAM;AAAA,MAAI;AAAA,MAAA,CAAG;AAAA,EAClE,OACI;AACD,aAAS,MAAM;AAAA,EAClB;AACJ;AA7OE,IAAM,YAAN;AA6VA,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA,EAYlB,YAAY,OAAO,MAAM,QAAQ;AARjC;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKI,kBAAc,OAAO,QAAQ,UAAU;AACvC,aAAS,OAAO,OAAO,OAAO,MAAO,CAAA;AACrC,qBAAiB,MAAM,EAAE,MAAM,OAAQ,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,KAAK,KAAK;AACb,QAAI,OAAQ,QAAS,UAAU;AAE3B,UAAI;AACA,iBAAS,KAAK,KAAK,MAAM,GAAG,CAAC;AAAA,MAChC,SACM,GAAG;AAAA,MAAG;AAEb,aAAO,SAAS,KAAK,IAAI,GAAG,CAAC;AAAA,IAChC;AACD,QAAI,eAAe,aAAa;AAE5B,YAAM,OAAO,IAAI,YAAY,OAAO;AACpC,cAAQ,MAAI;AAAA,QACR,KAAK;AAAe,iBAAO,oBAAoB,KAAK,GAAG;AAAA,QACvD,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;AAAA,QAC3C,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;AAAA,QAC3C,KAAK;AAAA,QACL,KAAK;AACD,iBAAO,iBAAiB,KAAK,GAAG;AAAA,QACpC,KAAK;AAAY,iBAAO,iBAAiB,KAAK,GAAG;AAAA,QACjD,KAAK;AAAU,iBAAO,eAAe,KAAK,GAAG;AAAA,MAChD;AAAA,IACJ,WACQ,OAAQ,QAAS,UAAU;AAEhC,cAAQ,IAAI,MAAI;AAAA,QACZ,KAAK;AAAe,iBAAO,oBAAoB,KAAK,GAAG;AAAA,QACvD,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;AAAA,QAC3C,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;AAAA,QAC3C,KAAK;AAAA,QACL,KAAK;AACD,iBAAO,iBAAiB,KAAK,GAAG;AAAA,QACpC,KAAK;AAAY,iBAAO,iBAAiB,KAAK,GAAG;AAAA,QACjD,KAAK;AAAU,iBAAO,eAAe,KAAK,GAAG;AAAA,MAChD;AACD,aAAO,OAAO,qBAAqB,IAAI,IAAI,IAAI,yBAAyB;AAAA,QACpE,WAAW;AAAA,MAC3B,CAAa;AAAA,IACJ;AACD,mBAAe,OAAO,+BAA+B,OAAO,GAAG;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,cAAc,OAAO;AACxB,WAAO,oBAAoB,WAAW,KAAK;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ,OAAO;AAClB,WAAO,cAAc,WAAW,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ,OAAO;AAClB,WAAO,cAAc,WAAW,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,WAAW,OAAO;AACrB,WAAO,iBAAiB,WAAW,KAAK;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,SAAS,OAAO;AACnB,WAAO,eAAe,WAAW,KAAK;AAAA,EACzC;AACL;AAKO,MAAM,sBAAsB,SAAS;AAAA;AAAA;AAAA;AAAA,EAQxC,YAAY,OAAO,MAAM,MAAM,QAAQ;AACnC,UAAM,OAAO,MAAM,MAAM;AAL7B;AAAA;AAAA;AAAA;AAMI,mBAAe,OAAQ,SAAU,YAAY,KAAK,MAAM,OAAO,GAAG,sBAAsB,QAAQ,IAAI;AACpG,aAAS,OAAO,OAAO,OAAO,MAAO,CAAA;AACrC,qBAAiB,MAAM,EAAE,KAAI,CAAE;AAAA,EAClC;AACL;AACA,SAAS,WAAW,QAAQ,QAAQ;AAChC,SAAO,MAAM,OAAO,IAAI,CAACK,OAAMA,GAAE,OAAO,MAAM,CAAC,EAAE,KAAM,WAAW,SAAU,OAAO,GAAG,IAAI;AAC9F;AAIO,MAAM,sBAAsB,cAAc;AAAA;AAAA;AAAA;AAAA,EAI7C,YAAY,OAAO,MAAM,QAAQ;AAC7B,UAAM,OAAO,SAAS,MAAM,MAAM;AAClC,WAAO,eAAe,MAAMN,YAAU,EAAE,OAAO,sBAAqB,CAAE;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,WAAW;AACX,WAAO,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE,UAAU,GAAG,EAAE;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ;AACX,QAAI,UAAU,MAAM;AAChB,eAAS;AAAA,IACZ;AACD,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,MAAM,OAAO,MAAM,CAAC,CAAC;AAAA,MACnF,CAAa;AAAA,IACJ;AACD,UAAM,SAAS,CAAA;AACf,QAAI,WAAW,WAAW;AACtB,aAAO,KAAK,OAAO;AAAA,IACtB;AACD,WAAO,KAAK,KAAK,OAAO,WAAW,QAAQ,KAAK,MAAM,CAAC;AACvD,WAAO,OAAO,KAAK,GAAG;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,KAAK,KAAK;AACb,QAAI,cAAc,WAAW,GAAG,GAAG;AAC/B,aAAO;AAAA,IACV;AACD,QAAI,OAAQ,QAAS,UAAU;AAC3B,aAAO,cAAc,KAAK,IAAI,GAAG,CAAC;AAAA,IACrC,WACQ,eAAe,aAAa;AACjC,YAAM,OAAO,YAAY,SAAS,GAAG;AACrC,YAAM,SAAS,cAAc,GAAG;AAChC,iBAAW,GAAG;AACd,aAAO,IAAI,cAAc,QAAQ,MAAM,MAAM;AAAA,IAChD;AACD,WAAO,IAAI,cAAc,QAAQ,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAI,CAAE,CAAA;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,WAAW,OAAO;AACrB,WAAQ,SAAS,MAAMA,UAAQ,MAAM;AAAA,EACxC;AACL;AAIO,MAAM,sBAAsB,cAAc;AAAA;AAAA;AAAA;AAAA,EAQ7C,YAAY,OAAO,MAAM,QAAQ,WAAW;AACxC,UAAM,OAAO,SAAS,MAAM,MAAM;AALtC;AAAA;AAAA;AAAA;AAMI,WAAO,eAAe,MAAMA,YAAU,EAAE,OAAO,sBAAqB,CAAE;AACtE,qBAAiB,MAAM,EAAE,UAAS,CAAE;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,YAAY;AACZ,WAAO,GAAG,KAAK,OAAO,SAAS,CAAC;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ;AACX,QAAI,UAAU,MAAM;AAChB,eAAS;AAAA,IACZ;AACD,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;AAAA,MAC3E,CAAa;AAAA,IACJ;AACD,UAAM,SAAS,CAAA;AACf,QAAI,WAAW,WAAW;AACtB,aAAO,KAAK,OAAO;AAAA,IACtB;AACD,WAAO,KAAK,KAAK,OAAO,WAAW,QAAQ,KAAK,MAAM,CAAC;AACvD,QAAI,WAAW,aAAa,KAAK,WAAW;AACxC,aAAO,KAAK,WAAW;AAAA,IAC1B;AACD,WAAO,OAAO,KAAK,GAAG;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,aAAa,MAAM,QAAQ;AAC9B,cAAU,UAAU,CAAA,GAAI,IAAI,CAACM,OAAM,UAAU,KAAKA,EAAC,CAAC;AACpD,UAAM,WAAW,IAAI,cAAc,QAAQ,MAAM,QAAQ,KAAK;AAC9D,WAAO,SAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,KAAK,KAAK;AACb,QAAI,cAAc,WAAW,GAAG,GAAG;AAC/B,aAAO;AAAA,IACV;AACD,QAAI,OAAQ,QAAS,UAAU;AAC3B,UAAI;AACA,eAAO,cAAc,KAAK,IAAI,GAAG,CAAC;AAAA,MACrC,SACM,OAAO;AACV,uBAAe,OAAO,0BAA0B,OAAO,GAAG;AAAA,MAC7D;AAAA,IACJ,WACQ,eAAe,aAAa;AACjC,YAAM,OAAO,YAAY,SAAS,GAAG;AACrC,YAAM,SAAS,cAAc,KAAK,IAAI;AACtC,YAAM,YAAY,CAAC,CAAC,gBAAgB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,WAAW;AAC/E,iBAAW,GAAG;AACd,aAAO,IAAI,cAAc,QAAQ,MAAM,QAAQ,SAAS;AAAA,IAC3D;AACD,WAAO,IAAI,cAAc,QAAQ,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,CAACA,OAAM,UAAU,KAAKA,IAAG,IAAI,CAAC,IAAI,CAAA,GAAI,CAAC,CAAC,IAAI,SAAS;AAAA,EAC/H;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,WAAW,OAAO;AACrB,WAAQ,SAAS,MAAMN,UAAQ,MAAM;AAAA,EACxC;AACL;AAIO,MAAM,4BAA4B,SAAS;AAAA;AAAA;AAAA;AAAA,EAY9C,YAAY,OAAO,MAAM,QAAQ,SAAS,KAAK;AAC3C,UAAM,OAAO,MAAM,MAAM;AAT7B;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMI,WAAO,eAAe,MAAMA,YAAU,EAAE,OAAO,4BAA2B,CAAE;AAC5E,qBAAiB,MAAM,EAAE,SAAS,IAAK,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ;AACX,WAAO,UAAU,QAAQ,WAAW,WAAW,2CAA2C,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AACnJ,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,iBAAkB,KAAK,UAAU,YAAY;AAAA,QAC7C,SAAS,KAAK;AAAA,QACd,KAAO,KAAK,OAAO,OAAQ,KAAK,MAAM;AAAA,QACtC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;AAAA,MAC3E,CAAa;AAAA,IACJ;AACD,UAAM,SAAS,CAAC,cAAc,WAAW,QAAQ,KAAK,MAAM,CAAC,EAAE;AAC/D,QAAI,KAAK,SAAS;AACd,aAAO,KAAK,SAAS;AAAA,IACxB;AACD,QAAI,KAAK,OAAO,MAAM;AAClB,aAAO,KAAK,IAAI,KAAK,IAAI,SAAQ,CAAE,EAAE;AAAA,IACxC;AACD,WAAO,OAAO,KAAK,GAAG;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,KAAK,KAAK;AACb,QAAI,oBAAoB,WAAW,GAAG,GAAG;AACrC,aAAO;AAAA,IACV;AACD,QAAI,OAAQ,QAAS,UAAU;AAC3B,UAAI;AACA,eAAO,oBAAoB,KAAK,IAAI,GAAG,CAAC;AAAA,MAC3C,SACM,OAAO;AACV,uBAAe,OAAO,+BAA+B,OAAO,GAAG;AAAA,MAClE;AAAA,IACJ,WACQ,eAAe,aAAa;AACjC,sBAAgB,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5C,YAAM,SAAS,cAAc,GAAG;AAChC,YAAM,UAAU,CAAC,CAAC,gBAAgB,KAAK,aAAa,EAAE,IAAI,SAAS;AACnE,YAAM,MAAM,WAAW,GAAG;AAC1B,iBAAW,GAAG;AACd,aAAO,IAAI,oBAAoB,QAAQ,eAAe,QAAQ,SAAS,GAAG;AAAA,IAC7E;AACD,WAAO,IAAI,oBAAoB,QAAQ,eAAe,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAI,CAAE,GAAE,CAAC,CAAC,IAAI,SAAU,IAAI,OAAO,OAAQ,IAAI,MAAM,IAAI;AAAA,EAC5J;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,WAAW,OAAO;AACrB,WAAQ,SAAS,MAAMA,UAAQ,MAAM;AAAA,EACxC;AACL;AAIO,MAAM,yBAAyB,SAAS;AAAA,EAK3C,YAAY,OAAO,QAAQ,SAAS;AAChC,UAAM,OAAO,YAAY,MAAM;AAFnC;AAAA;AAAA;AAAA;AAGI,WAAO,eAAe,MAAMA,YAAU,EAAE,OAAO,yBAAwB,CAAE;AACzE,qBAAiB,MAAM,EAAE,QAAO,CAAE;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ;AACX,UAAM,OAAS,KAAK,OAAO,WAAW,IAAK,YAAY;AACvD,QAAI,WAAW,QAAQ;AACnB,YAAM,kBAAmB,KAAK,UAAU,YAAY;AACpD,aAAO,KAAK,UAAU,EAAE,MAAM,gBAAiB,CAAA;AAAA,IAClD;AACD,WAAO,GAAG,IAAI,KAAK,KAAK,UAAU,aAAa,EAAE;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,KAAK,KAAK;AACb,QAAI,iBAAiB,WAAW,GAAG,GAAG;AAClC,aAAO;AAAA,IACV;AACD,QAAI,OAAQ,QAAS,UAAU;AAC3B,UAAI;AACA,eAAO,iBAAiB,KAAK,IAAI,GAAG,CAAC;AAAA,MACxC,SACM,OAAO;AACV,uBAAe,OAAO,6BAA6B,OAAO,GAAG;AAAA,MAChE;AAAA,IACJ,WACQ,eAAe,aAAa;AACjC,YAAM,WAAW,IAAI;AACrB,YAAM,aAAa,IAAI,YAAY,OAAO,CAAC,YAAY,SAAS,CAAC,CAAC;AAClE,qBAAe,YAAY,oCAAoC,OAAO,QAAQ;AAC9E,YAAM,OAAO,IAAI,WAAW,OAAO,CAAC,YAAY,SAAS,CAAC,CAAC;AAE3D,UAAI,SAAS,WAAW;AACpB,cAAMO,UAAS,cAAc,GAAG;AAChC,uBAAeA,QAAO,WAAW,GAAG,iCAAiC,cAAcA,OAAM;AACzF,wBAAgB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AACxC,mBAAW,GAAG;AACd,eAAO,IAAI,iBAAiB,QAAQ,CAAE,GAAE,IAAI;AAAA,MAC/C;AAGD,UAAI,SAAS,cAAc,GAAG;AAC9B,UAAI,OAAO,QAAQ;AACf,uBAAe,OAAO,WAAW,KAAK,OAAO,CAAC,EAAE,SAAS,SAAS,2BAA2B,cAAc,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MAC/J,OACI;AACD,iBAAS,CAAC,UAAU,KAAK,OAAO,CAAC;AAAA,MACpC;AACD,YAAM,aAAa,kBAAkB,GAAG;AACxC,qBAAe,eAAe,gBAAgB,eAAe,WAAW,gCAAgC,uBAAuB,UAAU;AACzI,UAAI,gBAAgB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG;AAC1D,cAAM,UAAU,cAAc,GAAG;AACjC,uBAAe,QAAQ,WAAW,KAAK,QAAQ,CAAC,EAAE,SAAS,SAAS,4BAA4B,eAAe,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MACpK;AACD,iBAAW,GAAG;AACd,aAAO,IAAI,iBAAiB,QAAQ,QAAQ,eAAe,SAAS;AAAA,IACvE;AACD,QAAI,IAAI,SAAS,WAAW;AACxB,aAAO,IAAI,iBAAiB,QAAQ,CAAE,GAAE,IAAI;AAAA,IAC/C;AACD,QAAI,IAAI,SAAS,YAAY;AACzB,YAAM,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC;AACvC,YAAM,UAAW,IAAI,oBAAoB;AACzC,aAAO,IAAI,iBAAiB,QAAQ,QAAQ,OAAO;AAAA,IACtD;AACD,mBAAe,OAAO,gCAAgC,OAAO,GAAG;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,WAAW,OAAO;AACrB,WAAQ,SAAS,MAAMP,UAAQ,MAAM;AAAA,EACxC;AACL;AAIO,MAAM,yBAAyB,cAAc;AAAA;AAAA;AAAA;AAAA,EAyBhD,YAAY,OAAO,MAAM,iBAAiB,QAAQ,SAAS,KAAK;AAC5D,UAAM,OAAO,YAAY,MAAM,MAAM;AAtBzC;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMI,WAAO,eAAe,MAAMA,YAAU,EAAE,OAAO,yBAAwB,CAAE;AACzE,cAAU,OAAO,OAAO,QAAQ,MAAO,CAAA;AACvC,UAAM,WAAY,oBAAoB,UAAU,oBAAoB;AACpE,UAAM,UAAW,oBAAoB;AACrC,qBAAiB,MAAM,EAAE,UAAU,KAAK,SAAS,SAAS,gBAAe,CAAE;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,WAAW;AACX,WAAO,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE,UAAU,GAAG,EAAE;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,QAAQ;AACX,QAAI,UAAU,MAAM;AAChB,eAAS;AAAA,IACZ;AACD,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,UAAU,KAAK;AAAA,QACf,iBAAmB,KAAK,oBAAoB,eAAgB,KAAK,kBAAkB;AAAA,QACnF,SAAS,KAAK;AAAA,QACd,KAAO,KAAK,OAAO,OAAQ,KAAK,MAAM;AAAA,QACtC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;AAAA,QAC3D,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;AAAA,MAC7E,CAAa;AAAA,IACJ;AACD,UAAM,SAAS,CAAA;AACf,QAAI,WAAW,WAAW;AACtB,aAAO,KAAK,UAAU;AAAA,IACzB;AACD,WAAO,KAAK,KAAK,OAAO,WAAW,QAAQ,KAAK,MAAM,CAAC;AACvD,QAAI,WAAW,WAAW;AACtB,UAAI,KAAK,oBAAoB,cAAc;AACvC,eAAO,KAAK,KAAK,eAAe;AAAA,MACnC;AACD,UAAI,KAAK,WAAW,KAAK,QAAQ,QAAQ;AACrC,eAAO,KAAK,SAAS;AACrB,eAAO,KAAK,WAAW,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC/C;AACD,UAAI,KAAK,OAAO,MAAM;AAClB,eAAO,KAAK,IAAI,KAAK,IAAI,SAAQ,CAAE,EAAE;AAAA,MACxC;AAAA,IACJ;AACD,WAAO,OAAO,KAAK,GAAG;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,YAAY,MAAM,QAAQ;AAC7B,cAAU,UAAU,CAAA,GAAI,IAAI,CAACM,OAAM,UAAU,KAAKA,EAAC,CAAC;AACpD,UAAM,WAAW,IAAI,iBAAiB,QAAQ,MAAM,QAAQ,QAAQ,IAAI,IAAI;AAC5E,WAAO,SAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,KAAK,KAAK;AACb,QAAI,iBAAiB,WAAW,GAAG,GAAG;AAClC,aAAO;AAAA,IACV;AACD,QAAI,OAAQ,QAAS,UAAU;AAC3B,UAAI;AACA,eAAO,iBAAiB,KAAK,IAAI,GAAG,CAAC;AAAA,MACxC,SACM,OAAO;AACV,uBAAe,OAAO,6BAA6B,OAAO,GAAG;AAAA,MAChE;AAAA,IACJ,WACQ,eAAe,aAAa;AACjC,YAAM,OAAO,YAAY,YAAY,GAAG;AACxC,YAAM,SAAS,cAAc,GAAG;AAChC,YAAM,aAAa,kBAAkB,GAAG;AACxC,UAAI,UAAU,CAAA;AACd,UAAI,gBAAgB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG;AAC1D,kBAAU,cAAc,GAAG;AAAA,MAC9B;AACD,YAAM,MAAM,WAAW,GAAG;AAC1B,iBAAW,GAAG;AACd,aAAO,IAAI,iBAAiB,QAAQ,MAAM,YAAY,QAAQ,SAAS,GAAG;AAAA,IAC7E;AACD,QAAI,kBAAkB,IAAI;AAE1B,QAAI,mBAAmB,MAAM;AACzB,wBAAkB;AAClB,UAAI,OAAQ,IAAI,aAAc,WAAW;AACrC,0BAAkB;AAClB,YAAI,CAAC,IAAI,UAAU;AACf,4BAAkB;AAClB,cAAI,OAAQ,IAAI,YAAa,aAAa,CAAC,IAAI,SAAS;AACpD,8BAAkB;AAAA,UACrB;AAAA,QACJ;AAAA,MACJ,WACQ,OAAQ,IAAI,YAAa,aAAa,CAAC,IAAI,SAAS;AACzD,0BAAkB;AAAA,MACrB;AAAA,IACJ;AAGD,WAAO,IAAI,iBAAiB,QAAQ,IAAI,MAAM,iBAAiB,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAI,CAAE,GAAE,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAA,GAAK,IAAI,OAAO,OAAQ,IAAI,MAAM,IAAI;AAAA,EAC1M;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,WAAW,OAAO;AACrB,WAAQ,SAAS,MAAMN,UAAQ,MAAM;AAAA,EACxC;AACL;AAIO,MAAM,uBAAuB,cAAc;AAAA;AAAA;AAAA;AAAA,EAI9C,YAAY,OAAO,MAAM,QAAQ;AAC7B,UAAM,OAAO,UAAU,MAAM,MAAM;AACnC,WAAO,eAAe,MAAMA,YAAU,EAAE,OAAO,uBAAsB,CAAE;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAID,SAAS;AACL,UAAM,IAAI,MAAM,OAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,KAAK,KAAK;AACb,QAAI,OAAQ,QAAS,UAAU;AAC3B,UAAI;AACA,eAAO,eAAe,KAAK,IAAI,GAAG,CAAC;AAAA,MACtC,SACM,OAAO;AACV,uBAAe,OAAO,2BAA2B,OAAO,GAAG;AAAA,MAC9D;AAAA,IACJ,WACQ,eAAe,aAAa;AACjC,YAAM,OAAO,YAAY,UAAU,GAAG;AACtC,YAAM,SAAS,cAAc,GAAG;AAChC,iBAAW,GAAG;AACd,aAAO,IAAI,eAAe,QAAQ,MAAM,MAAM;AAAA,IACjD;AACD,WAAO,IAAI,eAAe,QAAQ,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAI,CAAE,CAAA;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,WAAW,OAAO;AACrB,WAAQ,SAAS,MAAMA,UAAQ,MAAM;AAAA,EACxC;AACL;ACzwCA,MAAMQ,iBAAe,oBAAI;AACzBA,eAAa,IAAI,GAAM,eAAe;AACtCA,eAAa,IAAI,GAAM,cAAc;AACrCA,eAAa,IAAI,IAAM,UAAU;AACjCA,eAAa,IAAI,IAAM,gBAAgB;AACvCA,eAAa,IAAI,IAAM,kBAAkB;AACzCA,eAAa,IAAI,IAAM,kBAAkB;AACzCA,eAAa,IAAI,IAAM,iBAAiB;AACxCA,eAAa,IAAI,IAAM,mBAAmB;AAC1CA,eAAa,IAAI,IAAM,eAAe;AACtCA,eAAa,IAAI,IAAM,6BAA6B;AACpD,MAAM,iBAAiB,IAAI,OAAO,iBAAiB;AACnD,MAAM,kBAAkB,IAAI,OAAO,mBAAmB;AACtD,IAAI,eAAe;AACnB,IAAI,sBAAsB;AAC1B,SAAS,wBAAwB,QAAQ,IAAI,MAAM,UAAU;AACzD,MAAI,UAAU;AACd,MAAI,SAAS;AACb,QAAM,aAAa;AACnB,MAAI,SAAS;AACb,MAAI,MAAM;AACN,cAAU;AACV,UAAM1B,SAAQ,SAAS,IAAI;AAC3B,WAAO,QAAQ,IAAI;AACnB,QAAIA,OAAM,WAAW,GAAG;AACpB,iBAAW;AACX,eAAS;AAAA,IACZ,WACQA,OAAM,SAAS,OAAO,GAAG;AAC9B,iBAAW;AAAA,IACd,WACQ,QAAQA,OAAM,MAAM,GAAG,CAAC,CAAC,MAAM,cAAc;AAElD,UAAI;AACA,iBAAS,SAAS,OAAO,CAAC,QAAQ,GAAGA,OAAM,MAAM,CAAC,CAAC,EAAE,CAAC;AACtD,iBAAS;AAAA,UACL,WAAW;AAAA,UACX,MAAM;AAAA,UACN,MAAM,CAAC,MAAM;AAAA,QACjC;AACgB,mBAAW,KAAK,KAAK,UAAU,MAAM,CAAC;AAAA,MACzC,SACM,OAAO;AACV,mBAAW;AAAA,MACd;AAAA,IACJ,WACQ,QAAQA,OAAM,MAAM,GAAG,CAAC,CAAC,MAAM,cAAc;AAElD,UAAI;AACA,cAAM,OAAO,OAAO,SAAS,OAAO,CAAC,SAAS,GAAGA,OAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACnE,iBAAS;AAAA,UACL,WAAW;AAAA,UACX,MAAM;AAAA,UACN,MAAM,CAAC,IAAI;AAAA,QAC/B;AACgB,iBAAS,gBAAgB0B,eAAa,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI;AACpE,mBAAW,KAAK,MAAM;AAAA,MACzB,SACM,OAAO;AACV,mBAAW;AAAA,MACd;AAAA,IACJ,OACI;AACD,iBAAW;AAAA,IACd;AAAA,EACJ;AACD,QAAM,cAAc;AAAA,IAChB,IAAK,GAAG,KAAK,WAAW,GAAG,EAAE,IAAI;AAAA,IACjC,MAAO,GAAG,QAAQ;AAAA,EAC1B;AACI,MAAI,GAAG,MAAM;AACT,gBAAY,OAAO,WAAW,GAAG,IAAI;AAAA,EACxC;AACD,SAAO,UAAU,SAAS,kBAAkB;AAAA,IACxC;AAAA,IAAQ;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAa;AAAA,IAAY;AAAA,EACvD,CAAK;AACL;AAKO,MAAM,YAAN,MAAM,UAAS;AAAA,EAAf;AACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyCA,gBAAgB,OAAO;AACnB,UAAM,SAAS,MAAM,IAAI,CAAC,SAAS,sBAAK,wBAAL,WAAe,UAAU,KAAK,IAAI,EAAE;AACvE,UAAM,QAAQ,IAAI,WAAW,QAAQ,GAAG;AACxC,WAAO,MAAM;EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,OAAO,QAAQ;AAClB,wBAAoB,OAAO,QAAQ,MAAM,QAAQ,8BAA8B;AAC/E,UAAM,SAAS,MAAM,IAAI,CAAC,SAAS,sBAAK,wBAAL,WAAe,UAAU,KAAK,IAAI,EAAE;AACvE,UAAM,QAAS,IAAI,WAAW,QAAQ,GAAG;AACzC,UAAM,SAAS,IAAI;AACnB,UAAM,OAAO,QAAQ,MAAM;AAC3B,WAAO,OAAO;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,OAAO,OAAO,MAAM,OAAO;AACvB,UAAM,SAAS,MAAM,IAAI,CAAC,SAAS,sBAAK,wBAAL,WAAe,UAAU,KAAK,IAAI,EAAE;AACvE,UAAM,QAAQ,IAAI,WAAW,QAAQ,GAAG;AACxC,WAAO,MAAM,OAAO,IAAI,OAAO,MAAM,OAAO,mBAAmB,CAAC;AAAA,EACnE;AAAA,EACD,OAAO,wBAAwB,OAAO;AAClC,mBAAe,OAAQ,UAAW,YAAY,OAAO,UAAU,KAAK,GAAG,sCAAsC,SAAS,KAAK;AAC3H,0BAAsB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,kBAAkB;AACrB,QAAI,gBAAgB,MAAM;AACtB,qBAAe,IAAI;IACtB;AACD,WAAO;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,wBAAwB,QAAQ,IAAI,MAAM;AAC7C,WAAO,wBAAwB,QAAQ,IAAI,MAAM,UAAS,gBAAe,CAAE;AAAA,EAC9E;AACL;AA9FI;AAAA,cAAS,SAAC,OAAO;AACb,MAAI,MAAM,WAAW;AACjB,WAAO,IAAI,WAAW,sBAAK,wBAAL,WAAe,MAAM,gBAAgB,MAAM,aAAa,MAAM,IAAI;AAAA,EAC3F;AACD,MAAI,MAAM,WAAW;AACjB,WAAO,IAAI,WAAW,MAAM,WAAW,IAAI,CAAC,MAAM,sBAAK,wBAAL,WAAe,EAAE,GAAG,MAAM,IAAI;AAAA,EACnF;AACD,UAAQ,MAAM,UAAQ;AAAA,IAClB,KAAK;AACD,aAAO,IAAI,aAAa,MAAM,IAAI;AAAA,IACtC,KAAK;AACD,aAAO,IAAI,aAAa,MAAM,IAAI;AAAA,IACtC,KAAK;AACD,aAAO,IAAI,YAAY,MAAM,IAAI;AAAA,IACrC,KAAK;AACD,aAAO,IAAI,WAAW,MAAM,IAAI;AAAA,IACpC,KAAK;AACD,aAAO,IAAI,UAAU,MAAM,IAAI;AAAA,EACtC;AAED,MAAI,QAAQ,MAAM,KAAK,MAAM,eAAe;AAC5C,MAAI,OAAO;AACP,QAAI,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK;AACrC,mBAAe,SAAS,KAAK,QAAQ,OAAQ,OAAO,MAAO,GAAG,aAAa,MAAM,CAAC,IAAI,eAAe,SAAS,KAAK;AACnH,WAAO,IAAI,YAAY,OAAO,GAAI,MAAM,CAAC,MAAM,OAAQ,MAAM,IAAI;AAAA,EACpE;AAED,UAAQ,MAAM,KAAK,MAAM,cAAc;AACvC,MAAI,OAAO;AACP,QAAI,OAAO,SAAS,MAAM,CAAC,CAAC;AAC5B,mBAAe,SAAS,KAAK,QAAQ,IAAI,wBAAwB,SAAS,KAAK;AAC/E,WAAO,IAAI,gBAAgB,MAAM,MAAM,IAAI;AAAA,EAC9C;AACD,iBAAe,OAAO,gBAAgB,QAAQ,MAAM,IAAI;AAC3D;AAnCE,IAAM,WAAN;ACtFA,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,EAwBxB,YAAY,UAAU,OAAO,MAAM;AApBnC;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKI,UAAM,OAAO,SAAS,MAAM,YAAY,SAAS;AACjD,qBAAiB,MAAM;AAAA,MACnB;AAAA,MAAU;AAAA,MAAM;AAAA,MAAW;AAAA,MAAO;AAAA,IAC9C,CAAS;AAAA,EACJ;AACL;AAMO,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA,EA4BhC,YAAY,UAAU,UAAU,MAAM,OAAO;AAxB7C;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKI,UAAM,OAAO,SAAS,MAAM,YAAY,SAAS;AACjD,qBAAiB,MAAM;AAAA,MACnB;AAAA,MAAU;AAAA,MAAM;AAAA,MAAM;AAAA,MAAW;AAAA,MAAU;AAAA,IACvD,CAAS;AAAA,EACJ;AACL;AAKO,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAwB1B,YAAY,UAAU,UAAU,MAAM;AApBtC;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKI,UAAM,OAAO,SAAS,MAAM,YAAY,SAAS;AACjD,qBAAiB,MAAM;AAAA,MACnB;AAAA,MAAU;AAAA,MAAM;AAAA,MAAM;AAAA,MAAW;AAAA,IAC7C,CAAS;AAAA,EACJ;AACL;AAOO,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,EAoBjB,YAAY,MAAM;AAhBlB;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAaI,qBAAiB,MAAM,EAAE,MAAM,YAAY,KAAM,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EARD,OAAO,UAAU,OAAO;AACpB,WAAO,CAAC,EAAE,SAAS,MAAM;AAAA,EAC5B;AAOL;AAEA,MAAM,eAAe;AAAA,EACjB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACV;AACA,MAAM,gBAAgB;AAAA,EAClB,cAAc;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,QAAQ,CAAC,QAAQ;AAAA,IACjB,QAAQ,CAAC,YAAY;AACjB,aAAO,+BAA+B,KAAK,UAAU,OAAO,CAAC;AAAA,IAChE;AAAA,EACJ;AAAA,EACD,cAAc;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,QAAQ,CAAC,SAAS;AAAA,IAClB,QAAQ,CAAC,SAAS;AACd,UAAI,SAAS;AACb,UAAI,QAAQ,KAAK,QAAQ,OAAQ,aAAa,KAAK,SAAQ,CAAE,GAAG;AAC5D,iBAAS,aAAa,KAAK,SAAU,CAAA;AAAA,MACxC;AACD,aAAO,8BAA8B,KAAK,SAAS,EAAE,CAAC,KAAK,MAAM;AAAA,IACpE;AAAA,EACJ;AACL;AAWO,MAAM,aAAN,MAAM,WAAU;AAAA;AAAA;AAAA;AAAA,EAyBnB,YAAY,WAAW;AA0GvB;AAAA;AA+HA;AAAA;AA9PA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAKI,QAAI,MAAM,CAAA;AACV,QAAI,OAAQ,cAAe,UAAU;AACjC,YAAM,KAAK,MAAM,SAAS;AAAA,IAC7B,OACI;AACD,YAAM;AAAA,IACT;AACD,uBAAK,YAAa,oBAAI;AACtB,uBAAK,SAAU,oBAAI;AACnB,uBAAK,SAAU,oBAAI;AAEnB,UAAM,QAAQ,CAAA;AACd,eAAW,KAAK,KAAK;AACjB,UAAI;AACA,cAAM,KAAK,SAAS,KAAK,CAAC,CAAC;AAAA,MAC9B,SACM,OAAO;AACV,gBAAQ,IAAI,8BAA8B,KAAK,UAAU,CAAC,CAAC,KAAK,MAAM,OAAO;AAAA,MAChF;AAAA,IACJ;AACD,qBAAiB,MAAM;AAAA,MACnB,WAAW,OAAO,OAAO,KAAK;AAAA,IAC1C,CAAS;AACD,QAAI,WAAW;AACf,QAAI,UAAU;AACd,uBAAK,WAAY,KAAK;AAEtB,SAAK,UAAU,QAAQ,CAAC,UAAU,UAAU;AACxC,UAAI;AACJ,cAAQ,SAAS,MAAI;AAAA,QACjB,KAAK;AACD,cAAI,KAAK,QAAQ;AACb,oBAAQ,IAAI,oCAAoC;AAChD;AAAA,UACH;AAED,2BAAiB,MAAM,EAAE,QAAQ,SAAU,CAAA;AAC3C;AAAA,QACJ,KAAK;AACD,cAAI,SAAS,OAAO,WAAW,GAAG;AAC9B,sBAAU;AAAA,UACb,OACI;AACD,2BAAe,CAAC,YAAY,SAAS,YAAY,SAAS,SAAS,kCAAkC,aAAa,KAAK,KAAK,QAAQ;AACpI,uBAAW;AACX,sBAAU,SAAS;AAAA,UACtB;AACD;AAAA,QACJ,KAAK;AAGD,mBAAS,mBAAK;AACd;AAAA,QACJ,KAAK;AAED,mBAAS,mBAAK;AACd;AAAA,QACJ,KAAK;AACD,mBAAS,mBAAK;AACd;AAAA,QACJ;AACI;AAAA,MACP;AAED,YAAM,YAAY,SAAS;AAC3B,UAAI,OAAO,IAAI,SAAS,GAAG;AACvB;AAAA,MACH;AACD,aAAO,IAAI,WAAW,QAAQ;AAAA,IAC1C,CAAS;AAED,QAAI,CAAC,KAAK,QAAQ;AACd,uBAAiB,MAAM;AAAA,QACnB,QAAQ,oBAAoB,KAAK,eAAe;AAAA,MAChE,CAAa;AAAA,IACJ;AACD,qBAAiB,MAAM,EAAE,UAAU,QAAS,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,SAAS;AACZ,UAAM,SAAU,UAAU,YAAY;AACtC,UAAM,MAAM,KAAK,UAAU,IAAI,CAACC,OAAMA,GAAE,OAAO,MAAM,CAAC;AACtD,WAAO;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,aAAa;AACT,UAAM,MAAM,KAAK,UAAU,IAAI,CAACA,OAAMA,GAAE,OAAO,MAAM,CAAC;AAEtD,WAAO,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,cAAc;AACV,WAAO,SAAS;EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAyFD,gBAAgB,KAAK;AACjB,UAAM,WAAW,sBAAK,8BAAL,WAAkB,KAAK,MAAM;AAC9C,mBAAe,UAAU,wBAAwB,OAAO,GAAG;AAC3D,WAAO,SAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,YAAY,KAAK;AACb,WAAO,CAAC,CAAC,sBAAK,8BAAL,WAAkB,KAAK,MAAM;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,YAAY,KAAK,QAAQ;AACrB,WAAO,sBAAK,8BAAL,WAAkB,KAAK,UAAU,MAAM;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAID,gBAAgB,UAAU;AACtB,UAAMlB,SAAQ,MAAM,KAAK,mBAAK,YAAW,KAAI,CAAE;AAC/C,IAAAA,OAAM,KAAK,CAAC,GAAGH,OAAM,EAAE,cAAcA,EAAC,CAAC;AACvC,aAAS,IAAI,GAAG,IAAIG,OAAM,QAAQ,KAAK;AACnC,YAAM,OAAOA,OAAM,CAAC;AACpB,eAAU,mBAAK,YAAW,IAAI,IAAI,GAAI,CAAC;AAAA,IAC1C;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAgED,aAAa,KAAK;AACd,UAAM,WAAW,sBAAK,wBAAL,WAAe,KAAK,MAAM;AAC3C,mBAAe,UAAU,qBAAqB,OAAO,GAAG;AACxD,WAAO,SAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,SAAS,KAAK;AACV,WAAO,CAAC,CAAC,sBAAK,wBAAL,WAAe,KAAK,MAAM;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,SAAS,KAAK,QAAQ;AAClB,WAAO,sBAAK,wBAAL,WAAe,KAAK,UAAU,MAAM;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAID,aAAa,UAAU;AACnB,UAAMA,SAAQ,MAAM,KAAK,mBAAK,SAAQ,KAAI,CAAE;AAC5C,IAAAA,OAAM,KAAK,CAAC,GAAGH,OAAM,EAAE,cAAcA,EAAC,CAAC;AACvC,aAAS,IAAI,GAAG,IAAIG,OAAM,QAAQ,KAAK;AACnC,YAAM,OAAOA,OAAM,CAAC;AACpB,eAAU,mBAAK,SAAQ,IAAI,IAAI,GAAI,CAAC;AAAA,IACvC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,SAAS,KAAK,QAAQ;AAClB,QAAI,YAAY,GAAG,GAAG;AAClB,YAAM,WAAW,IAAI;AACrB,UAAI,cAAc,QAAQ,GAAG;AACzB,eAAO,cAAc,KAAK,cAAc,QAAQ,EAAE,SAAS;AAAA,MAC9D;AACD,iBAAW,YAAY,mBAAK,SAAQ,OAAM,GAAI;AAC1C,YAAI,aAAa,SAAS,UAAU;AAChC,iBAAO;AAAA,QACV;AAAA,MACJ;AACD,aAAO;AAAA,IACV;AAED,QAAI,IAAI,QAAQ,GAAG,MAAM,IAAI;AACzB,YAAM,WAAW,CAAA;AACjB,iBAAW,CAAC,MAAM,QAAQ,KAAK,mBAAK,UAAS;AACzC,YAAI,KAAK;AAAA,UAAM;AAAA;AAAA,QAAgB,EAAC,CAAC,MAAM,KAAK;AACxC,mBAAS,KAAK,QAAQ;AAAA,QACzB;AAAA,MACJ;AACD,UAAI,SAAS,WAAW,GAAG;AACvB,YAAI,QAAQ,SAAS;AACjB,iBAAO,cAAc,KAAK,qBAAqB;AAAA,QAClD;AACD,YAAI,QAAQ,SAAS;AACjB,iBAAO,cAAc,KAAK,sBAAsB;AAAA,QACnD;AACD,eAAO;AAAA,MACV,WACQ,SAAS,SAAS,GAAG;AAC1B,cAAM,WAAW,SAAS,IAAI,CAACmB,OAAM,KAAK,UAAUA,GAAE,OAAQ,CAAA,CAAC,EAAE,KAAK,IAAI;AAC1E,uBAAe,OAAO,qCAAqC,QAAQ,KAAK,QAAQ,GAAG;AAAA,MACtF;AACD,aAAO,SAAS,CAAC;AAAA,IACpB;AAED,UAAM,cAAc,KAAK,GAAG,EAAE,OAAM;AACpC,QAAI,QAAQ,iBAAiB;AACzB,aAAO,cAAc,KAAK,qBAAqB;AAAA,IAClD;AACD,QAAI,QAAQ,kBAAkB;AAC1B,aAAO,cAAc,KAAK,sBAAsB;AAAA,IACnD;AACD,UAAM,SAAS,mBAAK,SAAQ,IAAI,GAAG;AACnC,QAAI,QAAQ;AACR,aAAO;AAAA,IACV;AACD,WAAO;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAID,aAAa,UAAU;AACnB,UAAMnB,SAAQ,MAAM,KAAK,mBAAK,SAAQ,KAAI,CAAE;AAC5C,IAAAA,OAAM,KAAK,CAAC,GAAGH,OAAM,EAAE,cAAcA,EAAC,CAAC;AACvC,aAAS,IAAI,GAAG,IAAIG,OAAM,QAAQ,KAAK;AACnC,YAAM,OAAOA,OAAM,CAAC;AACpB,eAAU,mBAAK,SAAQ,IAAI,IAAI,GAAI,CAAC;AAAA,IACvC;AAAA,EACJ;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,EA6BD,cAAc,QAAQ,MAAM;AACxB,WAAO,mBAAK,WAAU,OAAO,QAAQ,IAAI;AAAA,EAC5C;AAAA,EACD,cAAc,QAAQ,QAAQ;AAC1B,WAAO,mBAAK,WAAU,OAAO,QAAQ,MAAM;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,aAAa,QAAQ;AACjB,WAAO,KAAK,cAAc,KAAK,OAAO,QAAQ,UAAU,CAAA,CAAE;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,kBAAkB,UAAU,MAAM;AAC9B,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMkB,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,YAAY,QAAQ;AACvD,iBAAWA;AAAA,IACd;AACD,mBAAe,UAAU,MAAM,GAAG,CAAC,MAAM,SAAS,UAAU,uCAAuC,SAAS,IAAI,KAAK,QAAQ,IAAI;AACjI,WAAO,KAAK,cAAc,SAAS,QAAQ,UAAU,MAAM,CAAC,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,kBAAkB,UAAU,QAAQ;AAChC,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMA,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,YAAY,QAAQ;AACvD,iBAAWA;AAAA,IACd;AACD,WAAO,OAAO;AAAA,MACV,SAAS;AAAA,MACT,KAAK,cAAc,SAAS,QAAQ,UAAU,CAAA,CAAE;AAAA,IAC5D,CAAS;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,mBAAmB,UAAU,MAAM;AAC/B,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMA,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;AAAA,IACd;AACD,mBAAe,UAAU,MAAM,GAAG,CAAC,MAAM,SAAS,UAAU,0CAA0C,SAAS,IAAI,KAAK,QAAQ,IAAI;AACpI,WAAO,KAAK,cAAc,SAAS,QAAQ,UAAU,MAAM,CAAC,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,mBAAmB,UAAU,QAAQ;AACjC,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMA,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;AAAA,IACd;AACD,WAAO,OAAO;AAAA,MACV,SAAS;AAAA,MACT,KAAK,cAAc,SAAS,QAAQ,UAAU,CAAA,CAAE;AAAA,IAC5D,CAAS;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,qBAAqB,UAAU,MAAM;AACjC,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMA,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;AAAA,IACd;AACD,QAAI,UAAU;AACd,UAAM3B,SAAQ,aAAa,IAAI;AAC/B,QAAKA,OAAM,SAAS,OAAQ,GAAG;AAC3B,UAAI;AACA,eAAO,mBAAK,WAAU,OAAO,SAAS,SAASA,MAAK;AAAA,MACvD,SACM,OAAO;AACV,kBAAU;AAAA,MACb;AAAA,IACJ;AAED,WAAO,OAAO,SAAS,YAAY;AAAA,MAC/B,OAAO,QAAQA,MAAK;AAAA,MACpB,MAAM,EAAE,QAAQ,SAAS,MAAM,WAAW,SAAS,SAAU;AAAA,IACzE,CAAS;AAAA,EACJ;AAAA,EACD,UAAUY,QAAO,IAAI;AACjB,UAAM,OAAO,SAASA,QAAO,MAAM;AACnC,UAAM,QAAQ,SAAS,wBAAwB,QAAQ,IAAI,IAAI;AAE/D,UAAM,eAAe;AACrB,QAAI,MAAM,QAAQ,WAAW,YAAY,GAAG;AACxC,YAAM,WAAW,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC;AACzC,YAAM,KAAK,KAAK,SAAS,QAAQ;AACjC,UAAI,IAAI;AACJ,YAAI;AACA,gBAAM,OAAO,mBAAK,WAAU,OAAO,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC;AAC3D,gBAAM,SAAS;AAAA,YACX,MAAM,GAAG;AAAA,YAAM,WAAW,GAAG,OAAM;AAAA,YAAI;AAAA,UAC/D;AACoB,gBAAM,SAAS,MAAM,OAAO;AAC5B,gBAAM,UAAU,uBAAuB,MAAM,MAAM;AAAA,QACtD,SACM,GAAG;AACN,gBAAM,UAAU;AAAA,QACnB;AAAA,MACJ;AAAA,IACJ;AAED,UAAM,SAAS,KAAK,iBAAiB,EAAE;AACvC,QAAI,QAAQ;AACR,YAAM,aAAa;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,WAAW,OAAO;AAAA,QAClB,MAAM,OAAO;AAAA,MAC7B;AAAA,IACS;AACD,WAAO;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,qBAAqB,UAAU,QAAQ;AACnC,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMe,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;AAAA,IACd;AACD,WAAO,QAAQ,mBAAK,WAAU,OAAO,SAAS,SAAS,UAAU,CAAE,CAAA,CAAC;AAAA,EACvE;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,EAgCD,mBAAmB,UAAU,QAAQ;AACjC,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMA,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,iBAAiB,QAAQ;AAC5D,iBAAWA;AAAA,IACd;AACD,WAAO,OAAO,UAAU,SAAS,OAAO,QAAQ,0BAA0B,SAAS,OAAQ,CAAA,IAAI,uBAAuB,EAAE,OAAO,OAAO,QAAQ,eAAe,SAAS,OAAO,OAAM,CAAE;AACrL,UAAM,SAAS,CAAA;AACf,QAAI,CAAC,SAAS,WAAW;AACrB,aAAO,KAAK,SAAS,SAAS;AAAA,IACjC;AAED,UAAM,cAAc,CAAC,OAAO,UAAU;AAClC,UAAI,MAAM,SAAS,UAAU;AACzB,eAAO,GAAG,KAAK;AAAA,MAClB,WACQ,MAAM,SAAS,SAAS;AAC7B,eAAO,UAAU,QAAQ,KAAK,CAAC;AAAA,MAClC;AACD,UAAI,MAAM,SAAS,UAAU,OAAQ,UAAW,WAAW;AACvD,gBAAS,QAAQ,SAAS;AAAA,MAC7B,WACQ,MAAM,KAAK,MAAM,QAAQ,GAAG;AACjC,gBAAQ,QAAQ,KAAK;AAAA,MACxB,WACQ,MAAM,KAAK,MAAM,QAAQ,GAAG;AACjC,gBAAQ,aAAa,OAAO,EAAE;AAAA,MACjC,WACQ,MAAM,SAAS,WAAW;AAE/B,2BAAK,WAAU,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;AAAA,MAC7C;AACD,aAAO,aAAa,QAAQ,KAAK,GAAG,EAAE;AAAA,IAClD;AACQ,WAAO,QAAQ,CAAC,OAAO,UAAU;AAC7B,YAAM,QAAQ,SAAS,OAAO,KAAK;AACnC,UAAI,CAAC,MAAM,SAAS;AAChB,uBAAe,SAAS,MAAM,sDAAuD,cAAc,MAAM,MAAO,KAAK;AACrH;AAAA,MACH;AACD,UAAI,SAAS,MAAM;AACf,eAAO,KAAK,IAAI;AAAA,MACnB,WACQ,MAAM,aAAa,WAAW,MAAM,aAAa,SAAS;AAC/D,uBAAe,OAAO,iDAAkD,cAAc,MAAM,MAAO,KAAK;AAAA,MAC3G,WACQ,MAAM,QAAQ,KAAK,GAAG;AAC3B,eAAO,KAAK,MAAM,IAAI,CAACP,WAAU,YAAY,OAAOA,MAAK,CAAC,CAAC;AAAA,MAC9D,OACI;AACD,eAAO,KAAK,YAAY,OAAO,KAAK,CAAC;AAAA,MACxC;AAAA,IACb,CAAS;AAED,WAAO,OAAO,UAAU,OAAO,OAAO,SAAS,CAAC,MAAM,MAAM;AACxD,aAAO,IAAG;AAAA,IACb;AACD,WAAO;AAAA,EACV;AAAA,EACD,eAAe,UAAU,QAAQ;AAC7B,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMO,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,iBAAiB,QAAQ;AAC5D,iBAAWA;AAAA,IACd;AACD,UAAM,SAAS,CAAA;AACf,UAAM,YAAY,CAAA;AAClB,UAAM,aAAa,CAAA;AACnB,QAAI,CAAC,SAAS,WAAW;AACrB,aAAO,KAAK,SAAS,SAAS;AAAA,IACjC;AACD,mBAAe,OAAO,WAAW,SAAS,OAAO,QAAQ,mCAAmC,UAAU,MAAM;AAC5G,aAAS,OAAO,QAAQ,CAAC,OAAO,UAAU;AACtC,YAAM,QAAQ,OAAO,KAAK;AAC1B,UAAI,MAAM,SAAS;AACf,YAAI,MAAM,SAAS,UAAU;AACzB,iBAAO,KAAK,GAAG,KAAK,CAAC;AAAA,QACxB,WACQ,MAAM,SAAS,SAAS;AAC7B,iBAAO,KAAK,UAAU,KAAK,CAAC;AAAA,QAC/B,WACQ,MAAM,aAAa,WAAW,MAAM,aAAa,SAAS;AAE/D,gBAAM,IAAI,MAAM,iBAAiB;AAAA,QACpC,OACI;AACD,iBAAO,KAAK,mBAAK,WAAU,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AAAA,QAC3D;AAAA,MACJ,OACI;AACD,kBAAU,KAAK,KAAK;AACpB,mBAAW,KAAK,KAAK;AAAA,MACxB;AAAA,IACb,CAAS;AACD,WAAO;AAAA,MACH,MAAM,mBAAK,WAAU,OAAO,WAAW,UAAU;AAAA,MACjD;AAAA,IACZ;AAAA,EACK;AAAA;AAAA,EAED,eAAe,UAAU,MAAM,QAAQ;AACnC,QAAI,OAAQ,aAAc,UAAU;AAChC,YAAMA,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,iBAAiB,QAAQ;AAC5D,iBAAWA;AAAA,IACd;AACD,QAAI,UAAU,QAAQ,CAAC,SAAS,WAAW;AACvC,YAAM,aAAa,SAAS;AAC5B,qBAAe,YAAY,OAAO,CAAC,GAAG,EAAE,KAAK,OAAO,CAAC,EAAE,YAAW,MAAO,YAAY,2BAA2B,aAAa,OAAO,CAAC,CAAC;AACtI,eAAS,OAAO,MAAM,CAAC;AAAA,IAC1B;AACD,UAAM,UAAU,CAAA;AAChB,UAAM,aAAa,CAAA;AACnB,UAAM,UAAU,CAAA;AAChB,aAAS,OAAO,QAAQ,CAAC,OAAO,UAAU;AACtC,UAAI,MAAM,SAAS;AACf,YAAI,MAAM,SAAS,YAAY,MAAM,SAAS,WAAW,MAAM,aAAa,WAAW,MAAM,aAAa,SAAS;AAC/G,kBAAQ,KAAK,UAAU,KAAK,EAAE,MAAM,WAAW,MAAM,MAAM,KAAI,CAAE,CAAC;AAClE,kBAAQ,KAAK,IAAI;AAAA,QACpB,OACI;AACD,kBAAQ,KAAK,KAAK;AAClB,kBAAQ,KAAK,KAAK;AAAA,QACrB;AAAA,MACJ,OACI;AACD,mBAAW,KAAK,KAAK;AACrB,gBAAQ,KAAK,KAAK;AAAA,MACrB;AAAA,IACb,CAAS;AACD,UAAM,gBAAiB,UAAU,OAAQ,mBAAK,WAAU,OAAO,SAAS,OAAO,MAAM,CAAC,IAAI;AAC1F,UAAM,mBAAmB,mBAAK,WAAU,OAAO,YAAY,MAAM,IAAI;AAErE,UAAM,SAAS,CAAA;AACf,UAAM,OAAO,CAAA;AACb,QAAI,kBAAkB,GAAG,eAAe;AACxC,aAAS,OAAO,QAAQ,CAAC,OAAO,UAAU;AACtC,UAAI,QAAQ;AACZ,UAAI,MAAM,SAAS;AACf,YAAI,iBAAiB,MAAM;AACvB,kBAAQ,IAAI,QAAQ,IAAI;AAAA,QAC3B,WACQ,QAAQ,KAAK,GAAG;AACrB,kBAAQ,IAAI,QAAQ,cAAc,cAAc,CAAC;AAAA,QACpD,OACI;AACD,cAAI;AACA,oBAAQ,cAAc,cAAc;AAAA,UACvC,SACM,OAAO;AACV,oBAAQ;AAAA,UACX;AAAA,QACJ;AAAA,MACJ,OACI;AACD,YAAI;AACA,kBAAQ,iBAAiB,iBAAiB;AAAA,QAC7C,SACM,OAAO;AACV,kBAAQ;AAAA,QACX;AAAA,MACJ;AACD,aAAO,KAAK,KAAK;AACjB,WAAK,KAAK,MAAM,QAAQ,IAAI;AAAA,IACxC,CAAS;AACD,WAAO,OAAO,UAAU,QAAQ,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,iBAAiB,IAAI;AACjB,UAAM,OAAO,SAAS,GAAG,MAAM,SAAS;AACxC,UAAM,QAAQ,UAAW,GAAG,SAAS,OAAQ,GAAG,QAAQ,GAAG,UAAU;AACrE,UAAM,WAAW,KAAK,YAAY,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3D,QAAI,CAAC,UAAU;AACX,aAAO;AAAA,IACV;AACD,UAAM,OAAO,mBAAK,WAAU,OAAO,SAAS,QAAQ,KAAK,MAAM,CAAC,CAAC;AACjE,WAAO,IAAI,uBAAuB,UAAU,SAAS,UAAU,MAAM,KAAK;AAAA,EAC7E;AAAA,EACD,gBAAgB,MAAM;AAClB,UAAM,IAAI,MAAM,OAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,KAAK;AACV,UAAM,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC;AAC5C,QAAI,CAAC,YAAY,SAAS,WAAW;AACjC,aAAO;AAAA,IACV;AAID,WAAO,IAAI,eAAe,UAAU,SAAS,WAAW,KAAK,eAAe,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC;AAAA,EAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,WAAW,MAAM;AACb,UAAM,UAAU,QAAQ,IAAI;AAC5B,UAAM,WAAW,KAAK,SAAS,UAAU,SAAS,GAAG,CAAC,CAAC;AACvD,QAAI,CAAC,UAAU;AACX,aAAO;AAAA,IACV;AACD,UAAM,OAAO,mBAAK,WAAU,OAAO,SAAS,QAAQ,UAAU,SAAS,CAAC,CAAC;AACzE,WAAO,IAAI,iBAAiB,UAAU,SAAS,UAAU,IAAI;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,OAAO,KAAK,OAAO;AAEf,QAAI,iBAAiB,YAAW;AAC5B,aAAO;AAAA,IACV;AAED,QAAI,OAAQ,UAAW,UAAU;AAC7B,aAAO,IAAI,WAAU,KAAK,MAAM,KAAK,CAAC;AAAA,IACzC;AAED,QAAI,OAAQ,MAAM,eAAgB,YAAY;AAC1C,aAAO,IAAI,WAAU,MAAM,WAAY,CAAA;AAAA,IAC1C;AAED,QAAI,OAAQ,MAAM,WAAY,YAAY;AACtC,aAAO,IAAI,WAAU,MAAM,OAAO,MAAM,CAAC;AAAA,IAC5C;AAED,WAAO,IAAI,WAAU,KAAK;AAAA,EAC7B;AACL;AA92BI;AACA;AACA;AAEA;AA8GA;AAAA,iBAAY,SAAC,KAAK,QAAQ,aAAa;AAEnC,MAAI,YAAY,GAAG,GAAG;AAClB,UAAM,WAAW,IAAI;AACrB,eAAW,YAAY,mBAAK,YAAW,OAAM,GAAI;AAC7C,UAAI,aAAa,SAAS,UAAU;AAChC,eAAO;AAAA,MACV;AAAA,IACJ;AACD,WAAO;AAAA,EACV;AAED,MAAI,IAAI,QAAQ,GAAG,MAAM,IAAI;AACzB,UAAM,WAAW,CAAA;AACjB,eAAW,CAAC,MAAM,QAAQ,KAAK,mBAAK,aAAY;AAC5C,UAAI,KAAK;AAAA,QAAM;AAAA;AAAA,MAAgB,EAAC,CAAC,MAAM,KAAK;AACxC,iBAAS,KAAK,QAAQ;AAAA,MACzB;AAAA,IACJ;AACD,QAAI,QAAQ;AACR,YAAM,YAAa,OAAO,SAAS,IAAK,OAAO,OAAO,SAAS,CAAC,IAAI;AACpE,UAAI,cAAc,OAAO;AACzB,UAAI,eAAe;AACnB,UAAI,MAAM,QAAQ,SAAS,KAAK,UAAU,SAAS,aAAa;AAC5D,uBAAe;AACf;AAAA,MACH;AAGD,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,cAAM,SAAS,SAAS,CAAC,EAAE,OAAO;AAClC,YAAI,WAAW,gBAAgB,CAAC,gBAAgB,WAAW,cAAc,IAAI;AACzE,mBAAS,OAAO,GAAG,CAAC;AAAA,QACvB;AAAA,MACJ;AAED,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,cAAM,SAAS,SAAS,CAAC,EAAE;AAC3B,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAEpC,cAAI,CAAC,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AAC3B;AAAA,UACH;AAED,cAAI,KAAK,OAAO,QAAQ;AACpB,gBAAI,OAAO,CAAC,EAAE,SAAS,aAAa;AAChC;AAAA,YACH;AACD,qBAAS,OAAO,GAAG,CAAC;AACpB;AAAA,UACH;AAED,cAAI,OAAO,CAAC,EAAE,SAAS,OAAO,CAAC,EAAE,UAAU;AACvC,qBAAS,OAAO,GAAG,CAAC;AACpB;AAAA,UACH;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAGD,QAAI,SAAS,WAAW,KAAK,UAAU,OAAO,WAAW,SAAS,CAAC,EAAE,OAAO,QAAQ;AAChF,YAAM,UAAU,OAAO,OAAO,SAAS,CAAC;AACxC,UAAI,WAAW,QAAQ,MAAM,QAAQ,OAAO,KAAK,OAAQ,YAAa,UAAU;AAC5E,iBAAS,OAAO,GAAG,CAAC;AAAA,MACvB;AAAA,IACJ;AACD,QAAI,SAAS,WAAW,GAAG;AACvB,aAAO;AAAA,IACV;AACD,QAAI,SAAS,SAAS,KAAK,aAAa;AACpC,YAAM,WAAW,SAAS,IAAI,CAACC,OAAM,KAAK,UAAUA,GAAE,OAAQ,CAAA,CAAC,EAAE,KAAK,IAAI;AAC1E,qBAAe,OAAO,gDAAgD,QAAQ,KAAK,OAAO,GAAG;AAAA,IAChG;AACD,WAAO,SAAS,CAAC;AAAA,EACpB;AAED,QAAM,SAAS,mBAAK,YAAW,IAAI,iBAAiB,KAAK,GAAG,EAAE,OAAM,CAAE;AACtE,MAAI,QAAQ;AACR,WAAO;AAAA,EACV;AACD,SAAO;AACV;AA6CD;AAAA,cAAS,SAAC,KAAK,QAAQ,aAAa;AAEhC,MAAI,YAAY,GAAG,GAAG;AAClB,UAAM,aAAa,IAAI;AACvB,eAAW,YAAY,mBAAK,SAAQ,OAAM,GAAI;AAC1C,UAAI,eAAe,SAAS,WAAW;AACnC,eAAO;AAAA,MACV;AAAA,IACJ;AACD,WAAO;AAAA,EACV;AAED,MAAI,IAAI,QAAQ,GAAG,MAAM,IAAI;AACzB,UAAM,WAAW,CAAA;AACjB,eAAW,CAAC,MAAM,QAAQ,KAAK,mBAAK,UAAS;AACzC,UAAI,KAAK;AAAA,QAAM;AAAA;AAAA,MAAgB,EAAC,CAAC,MAAM,KAAK;AACxC,iBAAS,KAAK,QAAQ;AAAA,MACzB;AAAA,IACJ;AACD,QAAI,QAAQ;AAER,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAI,SAAS,CAAC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAC3C,mBAAS,OAAO,GAAG,CAAC;AAAA,QACvB;AAAA,MACJ;AAED,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,cAAM,SAAS,SAAS,CAAC,EAAE;AAC3B,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAEpC,cAAI,CAAC,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AAC3B;AAAA,UACH;AAED,cAAI,OAAO,CAAC,EAAE,SAAS,OAAO,CAAC,EAAE,UAAU;AACvC,qBAAS,OAAO,GAAG,CAAC;AACpB;AAAA,UACH;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACD,QAAI,SAAS,WAAW,GAAG;AACvB,aAAO;AAAA,IACV;AACD,QAAI,SAAS,SAAS,KAAK,aAAa;AACpC,YAAM,WAAW,SAAS,IAAI,CAACA,OAAM,KAAK,UAAUA,GAAE,OAAQ,CAAA,CAAC,EAAE,KAAK,IAAI;AAC1E,qBAAe,OAAO,6CAA6C,QAAQ,KAAK,OAAO,GAAG;AAAA,IAC7F;AACD,WAAO,SAAS,CAAC;AAAA,EACpB;AAED,QAAM,SAAS,mBAAK,SAAQ,IAAI,cAAc,KAAK,GAAG,EAAE,OAAM,CAAE;AAChE,MAAI,QAAQ;AACR,WAAO;AAAA,EACV;AACD,SAAO;AACV;AA3TE,IAAM,YAAN;ACzMP,MAAM3B,SAAO,OAAO,CAAC;AAQrB,SAAS,OAAO,OAAO;AACnB,MAAI,SAAS,MAAM;AACf,WAAO;AAAA,EACV;AACD,SAAO,MAAM;AACjB;AA+DO,SAAS,YAAY,KAAK;AAC7B,QAAM,SAAS,CAAA;AAEf,MAAI,IAAI,IAAI;AACR,WAAO,KAAK,IAAI;AAAA,EACnB;AACD,MAAI,IAAI,MAAM;AACV,WAAO,OAAO,IAAI;AAAA,EACrB;AACD,MAAI,IAAI,MAAM;AACV,WAAO,OAAO,QAAQ,IAAI,IAAI;AAAA,EACjC;AACD,QAAM,aAAa,qFAAqF,MAAM,GAAG;AACjH,aAAW,OAAO,YAAY;AAC1B,QAAI,EAAE,OAAO,QAAQ,IAAI,GAAG,KAAK,MAAM;AACnC;AAAA,IACH;AACD,WAAO,GAAG,IAAI,UAAU,IAAI,GAAG,GAAG,WAAW,GAAG,EAAE;AAAA,EACrD;AACD,QAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAW,OAAO,YAAY;AAC1B,QAAI,EAAE,OAAO,QAAQ,IAAI,GAAG,KAAK,MAAM;AACnC;AAAA,IACH;AACD,WAAO,GAAG,IAAI,UAAU,IAAI,GAAG,GAAG,WAAW,GAAG,EAAE;AAAA,EACrD;AACD,MAAI,IAAI,YAAY;AAChB,WAAO,aAAa,cAAc,IAAI,UAAU;AAAA,EACnD;AACD,MAAI,IAAI,mBAAmB;AACvB,WAAO,oBAAoB,IAAI,kBAAkB,MAAK;AAAA,EACzD;AACD,MAAI,cAAc,KAAK;AACnB,WAAO,WAAW,IAAI;AAAA,EACzB;AACD,MAAI,oBAAoB,KAAK;AACzB,WAAO,iBAAiB,CAAC,CAAC,IAAI;AAAA,EACjC;AACD,MAAI,gBAAgB,KAAK;AACrB,WAAO,aAAa,IAAI;AAAA,EAC3B;AACD,MAAI,yBAAyB,OAAO,IAAI,qBAAqB;AACzD,WAAO,sBAAsB,IAAI,oBAAoB,MAAK;AAAA,EAC7D;AACD,MAAI,SAAS,KAAK;AACd,WAAO,MAAM,IAAI;AAAA,EACpB;AACD,MAAI,WAAW,OAAO,IAAI,OAAO;AAC7B,WAAO,QAAQ,IAAI,MAAM,IAAI,CAACK,OAAM;AAChC,UAAI,YAAYA,EAAC,GAAG;AAChB,eAAO,QAAQA,EAAC;AAAA,MACnB;AACD,aAAO,OAAO,OAAO,CAAE,GAAEA,EAAC;AAAA,IACtC,CAAS;AAAA,EACJ;AACD,SAAO;AACX;AA6SO,MAAM,IAAI;AAAA;AAAA;AAAA;AAAA,EA0Db,YAAY,KAAK,UAAU;AArD3B;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKI,SAAK,WAAW;AAChB,UAAM,SAAS,OAAO,OAAO,IAAI,OAAO,MAAK,CAAE;AAC/C,qBAAiB,MAAM;AAAA,MACnB,iBAAiB,IAAI;AAAA,MACrB,WAAW,IAAI;AAAA,MACf,aAAa,IAAI;AAAA,MACjB,SAAS,IAAI;AAAA,MACb,SAAS,IAAI;AAAA,MACb,MAAM,IAAI;AAAA,MACV;AAAA,MACA,OAAO,IAAI;AAAA,MACX,kBAAkB,IAAI;AAAA,IAClC,CAAS;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAID,SAAS;AACL,UAAM,EAAE,SAAS,WAAW,aAAa,MAAM,OAAO,SAAS,QAAQ,iBAAiB,iBAAgB,IAAK;AAC7G,WAAO;AAAA,MACH,OAAO;AAAA,MACP;AAAA,MAAS;AAAA,MAAW;AAAA,MAAa;AAAA,MAAM;AAAA,MACvC;AAAA,MAAS;AAAA,MAAQ;AAAA,MAAiB;AAAA,IAC9C;AAAA,EACK;AAAA;AAAA;AAAA;AAAA,EAIK,WAAW;AAAA;AACb,YAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,KAAK,SAAS;AACzD,aAAO,CAAC,CAAC,OAAO,8BAA8B,iBAAiB,CAAE,CAAA;AACjE,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,iBAAiB;AAAA;AACnB,YAAM,KAAK,MAAM,KAAK,SAAS,eAAe,KAAK,eAAe;AAClE,aAAO,CAAC,CAAC,IAAI,8BAA8B,iBAAiB,CAAE,CAAA;AAC9D,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKK,wBAAwB;AAAA;AAC1B,YAAM,UAAU,MAAM,KAAK,SAAS,sBAAsB,KAAK,eAAe;AAC9E,aAAO,CAAC,CAAC,SAAS,sCAAsC,iBAAiB,CAAE,CAAA;AAC3E,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAID,eAAe;AACX,WAAO,uBAAuB,IAAI;AAAA,EACrC;AACL;AAoBO,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAoG5B,YAAY,IAAI,UAAU;AA/F1B;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAKI,uBAAK,OAAQ,OAAO,OAAO,GAAG,KAAK,IAAI,CAAC,QAAQ;AAC5C,aAAO,IAAI,IAAI,KAAK,QAAQ;AAAA,IAC/B,CAAA,CAAC;AACF,QAAI,WAAWL;AACf,QAAI,GAAG,qBAAqB,MAAM;AAC9B,iBAAW,GAAG;AAAA,IACjB,WACQ,GAAG,YAAY,MAAM;AAC1B,iBAAW,GAAG;AAAA,IACjB;AACD,qBAAiB,MAAM;AAAA,MACnB;AAAA,MACA,IAAI,GAAG;AAAA,MACP,MAAM,GAAG;AAAA,MACT,iBAAiB,GAAG;AAAA,MACpB,MAAM,GAAG;AAAA,MACT,OAAO,GAAG;AAAA,MACV,WAAW,GAAG;AAAA,MACd,aAAa,GAAG;AAAA,MAChB,WAAW,GAAG;AAAA,MACd,SAAS,GAAG;AAAA,MACZ,mBAAmB,GAAG;AAAA,MACtB,aAAa,GAAG;AAAA,MAChB;AAAA,MACA,cAAc,GAAG;AAAA,MACjB,MAAM,GAAG;AAAA;AAAA,MAET,QAAQ,GAAG;AAAA,MACX,MAAM,GAAG;AAAA,IACrB,CAAS;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,OAAO;AAAE,WAAO,mBAAK;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA,EAIjC,SAAS;AACL,UAAM;AAAA,MAAE;AAAA,MAAI;AAAA,MAAM;AAAA,MAAiB;AAAA,MAAM;AAAA,MAAO;AAAA,MAAW;AAAA,MAAa;AAAA,MAAW;AAAA;AAAA,MACnF;AAAA,MAAQ;AAAA,IAAM,IAAG;AACjB,WAAO;AAAA,MACH,OAAO;AAAA,MACP;AAAA,MAAW;AAAA;AAAA,MAEX;AAAA,MACA,mBAAmB,OAAO,KAAK,iBAAiB;AAAA,MAChD;AAAA,MACA,UAAU,OAAO,KAAK,QAAQ;AAAA,MAC9B,aAAa,OAAO,KAAK,WAAW;AAAA,MACpC,cAAc,OAAO,KAAK,YAAY;AAAA,MACtC,SAAS,OAAO,KAAK,OAAO;AAAA,MAC5B;AAAA,MAAM;AAAA,MAAO;AAAA,MAAM;AAAA,MAAW;AAAA,MAAM;AAAA,MAAQ;AAAA,IACxD;AAAA,EACK;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,SAAS;AAAE,WAAO,KAAK,KAAK;AAAA,EAAS;AAAA,EACzC,CAAC,OAAO,QAAQ,IAAI;AAChB,QAAI,QAAQ;AACZ,WAAO;AAAA,MACH,MAAM,MAAM;AACR,YAAI,QAAQ,KAAK,QAAQ;AACrB,iBAAO,EAAE,OAAO,KAAK,KAAK,OAAO,GAAG,MAAM;QAC7C;AACD,eAAO,EAAE,OAAO,QAAW,MAAM,KAAI;AAAA,MACxC;AAAA,IACb;AAAA,EACK;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,MAAM;AACN,WAAO,KAAK,UAAU,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAIK,WAAW;AAAA;AACb,YAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,KAAK,SAAS;AACzD,UAAI,SAAS,MAAM;AACf,cAAM,IAAI,MAAM,MAAM;AAAA,MACzB;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,iBAAiB;AAAA;AACnB,YAAM,KAAK,MAAM,KAAK,SAAS,eAAe,KAAK,IAAI;AACvD,UAAI,MAAM,MAAM;AACZ,cAAM,IAAI,MAAM,MAAM;AAAA,MACzB;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOK,YAAY;AAAA;AACd,aAAQ,MAAM,KAAK,SAAS,qBAAqB,KAAK,IAAI;AAAA,IAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,gBAAgB;AAAA;AAClB,cAAQ,MAAM,KAAK,SAAS,eAAc,KAAM,KAAK,cAAc;AAAA,IACtE;AAAA;AAAA;AAAA;AAAA;AAAA,EAID,eAAe;AACX,WAAO,+BAA+B,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAID,eAAe,OAAO;AAClB,WAAO,CAAC,SAAS,MAAM,QAAS,GAAE,iDAAiD,yBAAyB,EAAE,WAAW,wBAAuB,CAAE;AAClJ,WAAO,iCAAiC,MAAM,KAAK;AAAA,EACtD;AACL;AAjII;AA2IG,MAAM,uBAAN,MAAM,qBAAoB;AAAA;AAAA;AAAA;AAAA,EA2H7B,YAAY,IAAI,UAAU;AAtH1B;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AAKI,SAAK,WAAW;AAChB,SAAK,cAAe,GAAG,eAAe,OAAQ,GAAG,cAAc;AAC/D,SAAK,YAAa,GAAG,aAAa,OAAQ,GAAG,YAAY;AACzD,SAAK,OAAO,GAAG;AACf,SAAK,QAAQ,GAAG;AAChB,SAAK,OAAO,GAAG;AACf,SAAK,OAAO,GAAG;AACf,SAAK,KAAK,GAAG,MAAM;AACnB,SAAK,WAAW,GAAG;AACnB,SAAK,QAAQ,GAAG;AAChB,SAAK,OAAO,GAAG;AACf,SAAK,QAAQ,GAAG;AAChB,SAAK,WAAW,GAAG;AACnB,SAAK,uBAAwB,GAAG,wBAAwB,OAAQ,GAAG,uBAAuB;AAC1F,SAAK,eAAgB,GAAG,gBAAgB,OAAQ,GAAG,eAAe;AAClE,SAAK,mBAAoB,GAAG,oBAAoB,OAAQ,GAAG,mBAAmB;AAC9E,SAAK,UAAU,GAAG;AAClB,SAAK,YAAY,GAAG;AACpB,SAAK,aAAc,GAAG,cAAc,OAAQ,GAAG,aAAa;AAC5D,SAAK,sBAAuB,GAAG,uBAAuB,OAAQ,GAAG,sBAAsB;AACvF,SAAK,oBAAqB,GAAG,qBAAqB,OAAQ,GAAG,oBAAoB;AACjF,uBAAK,aAAc;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAID,SAAS;AACL,UAAM,EAAE,aAAa,WAAW,OAAO,MAAM,MAAM,IAAI,MAAM,OAAO,MAAM,WAAW,YAAY,oBAAmB,IAAK;AACzH,WAAO;AAAA,MACH,OAAO;AAAA,MACP;AAAA,MAAY;AAAA,MAAa;AAAA,MACzB;AAAA,MACA,SAAS,OAAO,KAAK,OAAO;AAAA,MAC5B;AAAA,MAAM;AAAA,MACN,UAAU,OAAO,KAAK,QAAQ;AAAA,MAC9B,UAAU,OAAO,KAAK,QAAQ;AAAA,MAC9B;AAAA,MACA,cAAc,OAAO,KAAK,YAAY;AAAA,MACtC,sBAAsB,OAAO,KAAK,oBAAoB;AAAA,MACtD,kBAAkB,OAAO,KAAK,gBAAgB;AAAA,MAC9C;AAAA,MAAO;AAAA,MAAW;AAAA,MAAI;AAAA,MAAO;AAAA,MAC7B,OAAO,OAAO,KAAK,KAAK;AAAA,IACpC;AAAA,EACK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMK,WAAW;AAAA;AACb,UAAI,cAAc,KAAK;AACvB,UAAI,eAAe,MAAM;AACrB,cAAM,KAAK,MAAM,KAAK;AACtB,YAAI,IAAI;AACJ,wBAAc,GAAG;AAAA,QACpB;AAAA,MACJ;AACD,UAAI,eAAe,MAAM;AACrB,eAAO;AAAA,MACV;AACD,YAAM,QAAQ,KAAK,SAAS,SAAS,WAAW;AAChD,UAAI,SAAS,MAAM;AACf,cAAM,IAAI,MAAM,MAAM;AAAA,MACzB;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMK,iBAAiB;AAAA;AACnB,aAAO,KAAK,SAAS,eAAe,KAAK,IAAI;AAAA,IAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,gBAAgB;AAAA;AAClB,UAAI,KAAK,eAAe,MAAM;AAC1B,cAAM,EAAE,IAAI,aAAA4B,aAAa,IAAG,MAAM,kBAAkB;AAAA,UAChD,IAAI,KAAK,eAAgB;AAAA,UACzB,aAAa,KAAK,SAAS,eAAgB;AAAA,QAC3D,CAAa;AAED,YAAI,MAAM,QAAQ,GAAG,eAAe,MAAM;AACtC,iBAAO;AAAA,QACV;AACD,eAAOA,eAAc,GAAG,cAAc;AAAA,MACzC;AACD,YAAM,cAAc,MAAM,KAAK,SAAS,eAAc;AACtD,aAAO,cAAc,KAAK,cAAc;AAAA,IAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUK,KAAK,WAAW,UAAU;AAAA;AAC5B,YAAM,WAAY,aAAa,OAAQ,IAAI;AAC3C,YAAM,UAAW,YAAY,OAAQ,IAAI;AACzC,UAAI,aAAa,mBAAK;AACtB,UAAI,WAAW;AACf,UAAI,eAAgB,eAAe,KAAM,OAAO;AAChD,YAAM,mBAAmB,MAAY;AAEjC,YAAI,cAAc;AACd,iBAAO;AAAA,QACV;AACD,cAAM,EAAE,aAAa,MAAO,IAAG,MAAM,kBAAkB;AAAA,UACnD,aAAa,KAAK,SAAS,eAAgB;AAAA,UAC3C,OAAO,KAAK,SAAS,oBAAoB,KAAK,IAAI;AAAA,QAClE,CAAa;AAGD,YAAI,QAAQ,KAAK,OAAO;AACpB,uBAAa;AACb;AAAA,QACH;AAED,YAAI,cAAc;AACd,iBAAO;AAAA,QACV;AACD,cAAM,QAAQ,MAAM,KAAK;AACzB,YAAI,SAAS,MAAM,eAAe,MAAM;AACpC;AAAA,QACH;AAGD,YAAI,aAAa,IAAI;AACjB,qBAAW,aAAa;AACxB,cAAI,WAAW,mBAAK,cAAa;AAC7B,uBAAW,mBAAK;AAAA,UACnB;AAAA,QACJ;AACD,eAAO,YAAY,aAAa;AAE5B,cAAI,cAAc;AACd,mBAAO;AAAA,UACV;AACD,gBAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,UAAU,IAAI;AAEzD,cAAI,SAAS,MAAM;AACf;AAAA,UACH;AAED,qBAAW,QAAQ,OAAO;AACtB,gBAAI,SAAS,KAAK,MAAM;AACpB;AAAA,YACH;AAAA,UACJ;AAED,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,kBAAM,KAAK,MAAM,MAAM,eAAe,CAAC;AACvC,gBAAI,GAAG,SAAS,KAAK,QAAQ,GAAG,UAAU,KAAK,OAAO;AAElD,kBAAI,cAAc;AACd,uBAAO;AAAA,cACV;AACD,oBAAMC,WAAU,MAAM,KAAK,SAAS,sBAAsB,GAAG,IAAI;AAEjE,kBAAIA,YAAW,MAAM;AACjB;AAAA,cACH;AAED,kBAAK,cAAcA,SAAQ,cAAc,IAAK,UAAU;AACpD;AAAA,cACH;AAED,kBAAI,SAAS;AACb,kBAAI,GAAG,SAAS,KAAK,QAAQ,GAAG,OAAO,KAAK,MAAM,GAAG,UAAU,KAAK,OAAO;AACvE,yBAAS;AAAA,cACZ,WACQ,GAAG,SAAS,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU7B,QAAM;AACjE,yBAAS;AAAA,cACZ;AACD,qBAAO,OAAO,4BAA4B,wBAAwB;AAAA,gBAC9D,WAAY,WAAW,cAAc,WAAW;AAAA,gBAChD;AAAA,gBACA,aAAa,GAAG,uBAAuB,UAAU;AAAA,gBACjD,MAAM,GAAG;AAAA,gBACT,SAAA6B;AAAA,cAC5B,CAAyB;AAAA,YACJ;AAAA,UACJ;AACD;AAAA,QACH;AACD;AAAA,MACZ;AACQ,YAAM,eAAe,CAACA,aAAY;AAC9B,YAAIA,YAAW,QAAQA,SAAQ,WAAW,GAAG;AACzC,iBAAOA;AAAA,QACV;AACD,eAAO,OAAO,kCAAkC,kBAAkB;AAAA,UAC9D,QAAQ;AAAA,UACR,MAAM;AAAA,UAAM,QAAQ;AAAA,UAAM,YAAY;AAAA,UAAM,QAAQ;AAAA,UACpD,aAAa;AAAA,YACT,IAAIA,SAAQ;AAAA,YACZ,MAAMA,SAAQ;AAAA,YACd,MAAM;AAAA;AAAA,UAC1B;AAAA,UAAmB,SAAAA;AAAA,QACnB,CAAa;AAAA,MACb;AACQ,YAAM,UAAU,MAAM,KAAK,SAAS,sBAAsB,KAAK,IAAI;AACnE,UAAI,aAAa,GAAG;AAChB,eAAO,aAAa,OAAO;AAAA,MAC9B;AACD,UAAI,SAAS;AACT,YAAI,aAAa,MAAM,MAAM,QAAQ,cAAe,MAAK,UAAU;AAC/D,iBAAO,aAAa,OAAO;AAAA,QAC9B;AAAA,MACJ,OACI;AAED,cAAM,iBAAgB;AAEtB,YAAI,aAAa,GAAG;AAChB,iBAAO;AAAA,QACV;AAAA,MACJ;AACD,YAAM,SAAS,IAAI,QAAQ,CAAC,SAAS,WAAW;AAE5C,cAAM,aAAa,CAAA;AACnB,cAAM,SAAS,MAAM;AAAE,qBAAW,QAAQ,CAAC,MAAM,GAAG;AAAA;AAEpD,mBAAW,KAAK,MAAM;AAAE,yBAAe;AAAA,QAAO,CAAA;AAE9C,YAAI,UAAU,GAAG;AACb,gBAAM,QAAQ,WAAW,MAAM;AAC3B;AACA,mBAAO,UAAU,gCAAgC,SAAS,CAAC;AAAA,UAC9D,GAAE,OAAO;AACV,qBAAW,KAAK,MAAM;AAAE,yBAAa,KAAK;AAAA,UAAE,CAAE;AAAA,QACjD;AACD,cAAM,aAAa,CAAOA,aAAY;AAElC,eAAK,MAAMA,SAAQ,cAAa,MAAO,UAAU;AAC7C;AACA,gBAAI;AACA,sBAAQ,aAAaA,QAAO,CAAC;AAAA,YAChC,SACM,OAAO;AACV,qBAAO,KAAK;AAAA,YACf;AAAA,UACJ;AAAA,QACjB;AACY,mBAAW,KAAK,MAAM;AAAE,eAAK,SAAS,IAAI,KAAK,MAAM,UAAU;AAAA,QAAI,CAAA;AACnE,aAAK,SAAS,GAAG,KAAK,MAAM,UAAU;AAEtC,YAAI,cAAc,GAAG;AACjB,gBAAM,kBAAkB,MAAY;AAChC,gBAAI;AAEA,oBAAM,iBAAgB;AAAA,YACzB,SACM,OAAO;AAEV,kBAAI,QAAQ,OAAO,sBAAsB,GAAG;AACxC;AACA,uBAAO,KAAK;AACZ;AAAA,cACH;AAAA,YACJ;AAED,gBAAI,CAAC,cAAc;AACf,mBAAK,SAAS,KAAK,SAAS,eAAe;AAAA,YAC9C;AAAA,UACrB;AACgB,qBAAW,KAAK,MAAM;AAAE,iBAAK,SAAS,IAAI,SAAS,eAAe;AAAA,UAAE,CAAE;AACtE,eAAK,SAAS,KAAK,SAAS,eAAe;AAAA,QAC9C;AAAA,MACb,CAAS;AACD,aAAO,MAAM;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,UAAU;AACN,WAAQ,KAAK,aAAa;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,WAAW;AACP,WAAQ,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,WAAW;AACP,WAAQ,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,WAAW;AACP,WAAQ,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,WAAW;AACP,WAAQ,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,eAAe;AACX,WAAO,KAAK,WAAW,yCAAyC,yBAAyB,EAAE,WAAW,gBAAe,CAAE;AACvH,WAAO,+BAA+B,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,eAAe,OAAO;AAClB,WAAO,KAAK,WAAW,yCAAyC,yBAAyB,EAAE,WAAW,gBAAe,CAAE;AACvH,WAAO,CAAC,SAAS,MAAM,QAAS,GAAE,iDAAiD,yBAAyB,EAAE,WAAW,gBAAe,CAAE;AAC1I,WAAO,iCAAiC,MAAM,KAAK;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,uBAAuB,YAAY;AAC/B,mBAAe,OAAO,UAAU,UAAU,KAAK,cAAc,GAAG,sBAAsB,cAAc,UAAU;AAC9G,UAAM,KAAK,IAAI,qBAAoB,MAAM,KAAK,QAAQ;AACtD,qBAAG,aAAc;AACjB,WAAO;AAAA,EACV;AACL;AA7WI;AAvHG,IAAM,sBAAN;AAweP,SAAS,iCAAiC,IAAI,OAAO;AACjD,SAAO,EAAE,QAAQ,uBAAuB,IAAI,MAAK;AACrD;AACA,SAAS,+BAA+B,IAAI;AACxC,SAAO,EAAE,QAAQ,oBAAoB;AACzC;AACA,SAAS,uBAAuB,KAAK;AACjC,SAAO,EAAE,QAAQ,YAAY,KAAK;AAAA,IAC1B,iBAAiB,IAAI;AAAA,IACrB,WAAW,IAAI;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,SAAS,IAAI;AAAA,IACb,MAAM,IAAI;AAAA,IACV,QAAQ,OAAO,OAAO,IAAI,OAAO,MAAK,CAAE;AAAA,IACxC,OAAO,IAAI;AAAA,EACvB;AACA;ACvxCO,MAAM,iBAAiB,IAAI;AAAA;AAAA;AAAA;AAAA,EAgB9B,YAAY,KAAK,OAAO,UAAU;AAC9B,UAAM,KAAK,IAAI,QAAQ;AAb3B;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAMI,UAAM,OAAO,MAAM,eAAe,UAAU,IAAI,MAAM,IAAI,MAAM;AAChE,qBAAiB,MAAM,EAAE,MAAM,UAAU,WAAW,MAAK,CAAE;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,YAAY;AAAE,WAAO,KAAK,SAAS;AAAA,EAAO;AAAA;AAAA;AAAA;AAAA,EAI9C,IAAI,iBAAiB;AAAE,WAAO,KAAK,SAAS,OAAQ;AAAA,EAAG;AAC3D;AAIO,MAAM,0BAA0B,IAAI;AAAA;AAAA;AAAA;AAAA,EAQvC,YAAY,KAAK,OAAO;AACpB,UAAM,KAAK,IAAI,QAAQ;AAL3B;AAAA;AAAA;AAAA;AAMI,qBAAiB,MAAM,EAAE,MAAK,CAAE;AAAA,EACnC;AACL;AAKO,MAAM,mCAAmC,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAK/D,YAAY,OAAO,UAAU,IAAI;AAC7B,UAAM,IAAI,QAAQ;AALtB;AAMI,uBAAK,QAAS;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,IAAI,OAAO;AACP,WAAO,MAAM,KAAK,IAAI,CAAC,QAAQ;AAC3B,YAAM,WAAW,IAAI,OAAO,SAAS,mBAAK,QAAO,SAAS,IAAI,OAAO,CAAC,CAAC,IAAI;AAC3E,UAAI,UAAU;AACV,YAAI;AACA,iBAAO,IAAI,SAAS,KAAK,mBAAK,SAAQ,QAAQ;AAAA,QACjD,SACM,OAAO;AACV,iBAAO,IAAI,kBAAkB,KAAK,KAAK;AAAA,QAC1C;AAAA,MACJ;AACD,aAAO;AAAA,IACnB,CAAS;AAAA,EACJ;AACL;AA1BI;AA+BG,MAAM,+BAAN,MAAM,qCAAoC,oBAAoB;AAAA;AAAA;AAAA;AAAA,EAKjE,YAAY,OAAO,UAAU,IAAI;AAC7B,UAAM,IAAI,QAAQ;AALtB,uBAAAC,SAAA;AAMI,uBAAKA,SAAS;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUK,KAAK,UAAU,SAAS;AAAA;AAC1B,YAAM,UAAU,MAAM,yDAAM,aAAN,MAAW,UAAU,OAAO;AAClD,UAAI,WAAW,MAAM;AACjB,eAAO;AAAA,MACV;AACD,aAAO,IAAI,2BAA2B,mBAAKA,UAAQ,KAAK,UAAU,OAAO;AAAA,IAC5E;AAAA;AACL;AAxBIA,UAAA;AADG,IAAM,8BAAN;AA8BA,MAAM,oCAAoC,aAAa;AAAA;AAAA;AAAA;AAAA,EAQ1D,YAAY,UAAU,UAAU,QAAQ,KAAK;AACzC,UAAM,UAAU,UAAU,MAAM;AALpC;AAAA;AAAA;AAAA;AAMI,qBAAiB,MAAM,EAAE,IAAG,CAAE;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAIK,WAAW;AAAA;AACb,aAAO,MAAM,KAAK,IAAI;IACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,iBAAiB;AAAA;AACnB,aAAO,MAAM,KAAK,IAAI;IACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,wBAAwB;AAAA;AAC1B,aAAO,MAAM,KAAK,IAAI;IACzB;AAAA;AACL;AAKO,MAAM,6BAA6B,4BAA4B;AAAA;AAAA;AAAA;AAAA,EAIlE,YAAY,UAAU,UAAU,QAAQ,UAAU,MAAM;AACpD,UAAM,UAAU,UAAU,QAAQ,IAAI,SAAS,MAAM,SAAS,WAAW,QAAQ,CAAC;AAClF,UAAM,OAAO,SAAS,UAAU,eAAe,UAAU,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM;AACvF,qBAAiB,MAAM,EAAE,MAAM,SAAU,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,YAAY;AACZ,WAAO,KAAK,SAAS;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAID,IAAI,iBAAiB;AACjB,WAAO,KAAK,SAAS;EACxB;AACL;ACxKA,MAAM,OAAO,OAAO,CAAC;AACrB,SAAS,QAAQ,OAAO;AACpB,SAAQ,SAAS,OAAQ,MAAM,SAAU;AAC7C;AACA,SAAS,YAAY,OAAO;AACxB,SAAQ,SAAS,OAAQ,MAAM,gBAAiB;AACpD;AACA,SAAS,WAAW,OAAO;AACvB,SAAQ,SAAS,OAAQ,MAAM,gBAAiB;AACpD;AACA,SAAS,QAAQ,OAAO;AACpB,SAAQ,SAAS,OAAQ,MAAM,oBAAqB;AACxD;AACA,SAAS,YAAY,OAAO;AACxB,MAAI,SAAS,MAAM;AACf,QAAI,WAAW,KAAK,GAAG;AACnB,aAAO;AAAA,IACV;AACD,QAAI,MAAM,UAAU;AAChB,aAAO,MAAM;AAAA,IAChB;AAAA,EACJ;AACD,SAAO;AACX;AACA,MAAM,oBAAoB;AAAA,EAGtB,YAAY,UAAU,UAAU,MAAM;AAFtC;AACA;AAEI,qBAAiB,MAAM,EAAE,SAAQ,CAAE;AACnC,QAAI,SAAS,OAAO,SAAS,KAAK,QAAQ;AACtC,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACvC;AAED,UAAM,SAAS,UAAU,SAAS,QAAQ,aAAa;AACvD,UAAM,WAAW,WAAW,MAAM,IAAI,SAAS;AAC/C,uBAAK,SAAW,WAAkB;AAAA;AAC9B,cAAM,eAAe,MAAM,QAAQ,IAAI,SAAS,OAAO,IAAI,CAAC,OAAO,UAAU;AACzE,gBAAM,MAAM,KAAK,KAAK;AACtB,cAAI,OAAO,MAAM;AACb,mBAAO;AAAA,UACV;AACD,iBAAO,MAAM,UAAU,KAAK,KAAK,GAAG,CAAC,MAAM,UAAU;AACjD,gBAAI,SAAS,WAAW;AACpB,kBAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,uBAAO,QAAQ,IAAI,MAAM,IAAI,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC;AAAA,cACnE;AACD,qBAAO,eAAe,OAAO,QAAQ;AAAA,YACxC;AACD,mBAAO;AAAA,UAC3B,CAAiB;AAAA,QACJ,CAAA,CAAC;AACF,eAAO,SAAS,UAAU,mBAAmB,UAAU,YAAY;AAAA,MAC/E;AAAA;EACK;AAAA,EACD,iBAAiB;AACb,WAAO,mBAAK;AAAA,EACf;AACL;AAhCI;AAuCJ,SAAS,UAAU,OAAO,SAAS;AAC/B,MAAI,SAAS,MAAM;AACf,WAAO;AAAA,EACV;AACD,MAAI,OAAQ,MAAM,OAAO,MAAO,YAAY;AACxC,WAAO;AAAA,EACV;AACD,MAAI,MAAM,YAAY,OAAQ,MAAM,SAAS,OAAO,MAAO,YAAY;AACnE,WAAO,MAAM;AAAA,EAChB;AACD,SAAO;AACX;AACA,SAAS,YAAY,OAAO;AACxB,MAAI,SAAS,MAAM;AACf,WAAO;AAAA,EACV;AACD,SAAO,MAAM,YAAY;AAC7B;AAIO,SAAe,cAAc,KAAK,SAAS;AAAA;AAE9C,UAAM,aAAa,MAAM,YAAY,KAAK,WAAW;AACrD,mBAAe,OAAQ,eAAgB,UAAU,+BAA+B,aAAa,GAAG;AAEhG,UAAM,YAAY,YAAY,UAAU;AACxC,mBAAe,UAAU,MAAM,SAAS,WAAW,CAAA,GAAI,QAAQ,IAAI,KAAK,GAAG,sBAAsB,gBAAgB,UAAU,EAAE;AAC7H,mBAAe,UAAU,QAAQ,SAAS,WAAW,CAAA,GAAI,QAAQ,MAAM,KAAK,GAAG,wBAAwB,kBAAkB,UAAU,IAAI;AAEvI,QAAI,UAAU,MAAM;AAChB,gBAAU,OAAO,UAAU;AAAA,IAC9B;AACD,WAAO;AAAA,EACX;AAAA;AAIO,SAAe,YAAY,SAAS,QAAQ,MAAM;AAAA;AAErD,UAAM,SAAS,UAAU,SAAS,aAAa;AAC/C,UAAM,WAAW,WAAW,MAAM,IAAI,SAAS;AAC/C,WAAO,MAAM,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,UAAU;AAClD,aAAO,MAAM,UAAU,KAAK,KAAK,GAAG,CAAC,MAAM,UAAU;AACjD,gBAAQ,MAAM,YAAY,OAAO,IAAI;AACrC,YAAI,SAAS,WAAW;AACpB,iBAAO,eAAe,OAAO,QAAQ;AAAA,QACxC;AACD,eAAO;AAAA,MACnB,CAAS;AAAA,IACJ,CAAA,CAAC;AAAA,EACN;AAAA;AACA,SAAS,qBAAqB,UAAU;AACpC,QAAM,sBAAsB,SAAgB,WAAW;AAAA;AAEnD,YAAM,KAAM,MAAM,cAAc,WAAW,CAAC,MAAM,CAAC;AACnD,SAAG,KAAK,MAAM,SAAS,WAAU;AACjC,UAAI,GAAG,MAAM;AACT,WAAG,OAAO,MAAM,eAAe,GAAG,MAAM,YAAY,SAAS,MAAM,CAAC;AAAA,MACvE;AACD,YAAM,QAAQ,SAAS;AACvB,YAAM,UAAW,UAAW,GAAG,SAAS,MAAO,iBAAiB,MAAM;AACtE,YAAM,UAAW,GAAG,QAAQ,UAAU;AACtC,UAAI,MAAM,YAAY,CAAC,MAAM,SAAS,WAAW,MAAM,WAAW,CAAC,UAAU,CAAC,SAAS;AACnF,uBAAe,OAAO,qEAAqE,aAAa,SAAS;AAAA,MACpH;AACD,qBAAe,MAAM,YAAY,QAAQ,6CAA6C,kBAAkB,GAAG,IAAI;AAE/G,YAAM,UAAU,MAAM,WAAY,MAAM,YAAY,MAAM,SAAS;AACnE,qBAAe,WAAW,SAAS,6CAA6C,mBAAmB,GAAG,KAAK;AAE3G,qBAAe,MAAM,YAAY,QAAQ,6CAA6C,kBAAkB,GAAG,IAAI;AAC/G,aAAO;AAAA,IACf;AAAA;AACI,QAAM,aAAa,SAAgB,WAAW;AAAA;AAC1C,YAAM,SAAS,UAAU,SAAS,QAAQ,MAAM;AAChD,aAAO,QAAQ,MAAM,GAAG,4CAA4C,yBAAyB,EAAE,WAAW,OAAM,CAAE;AAClH,YAAM,KAAK,MAAM,oBAAoB,SAAS;AAC9C,UAAI;AACA,eAAO,MAAM,OAAO,KAAK,EAAE;AAAA,MAC9B,SACM,OAAO;AACV,YAAI,gBAAgB,KAAK,KAAK,MAAM,MAAM;AACtC,gBAAM,SAAS,UAAU,UAAU,MAAM,MAAM,EAAE;AAAA,QACpD;AACD,cAAM;AAAA,MACT;AAAA,IACT;AAAA;AACI,QAAM,OAAO,SAAgB,WAAW;AAAA;AACpC,YAAM,SAAS,SAAS;AACxB,aAAO,QAAQ,MAAM,GAAG,yDAAyD,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AAC1I,YAAM,KAAK,MAAM,OAAO,gBAAgB,MAAM,oBAAoB,SAAS,CAAC;AAC5E,YAAM,WAAW,YAAY,SAAS,MAAM;AAG5C,aAAO,IAAI,4BAA4B,SAAS,WAAW,UAAU,EAAE;AAAA,IAC/E;AAAA;AACI,QAAM,cAAc,SAAgB,WAAW;AAAA;AAC3C,YAAM,SAAS,UAAU,SAAS,QAAQ,aAAa;AACvD,aAAO,YAAY,MAAM,GAAG,mDAAmD,yBAAyB,EAAE,WAAW,cAAa,CAAE;AACpI,aAAO,MAAM,OAAO,YAAY,MAAM,oBAAoB,SAAS,CAAC;AAAA,IAC5E;AAAA;AACI,QAAM,SAAS,CAAO,cAAc;AAChC,WAAO,MAAM,KAAK,SAAS;AAAA,EACnC;AACI,mBAAiB,QAAQ;AAAA,IACrB,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IAAM;AAAA,EACd,CAAK;AACD,SAAO;AACX;AACA,SAAS,mBAAmB,UAAU,KAAK;AACvC,QAAM,cAAc,YAAa,MAAM;AACnC,UAAM,WAAW,SAAS,UAAU,YAAY,KAAK,IAAI;AACzD,WAAO,UAAU,wBAAwB,yBAAyB;AAAA,MAC9D,WAAW;AAAA,MACX,MAAM,EAAE,KAAK,KAAM;AAAA,IAC/B,CAAS;AACD,WAAO;AAAA,EACf;AACI,QAAM,sBAAsB,YAAmB,MAAM;AAAA;AACjD,YAAM,WAAW,YAAY,GAAG,IAAI;AAEpC,UAAI,YAAY,CAAA;AAChB,UAAI,SAAS,OAAO,SAAS,MAAM,KAAK,QAAQ;AAC5C,oBAAY,MAAM,cAAc,KAAK,IAAK,CAAA;AAC1C,YAAI,UAAU,MAAM;AAChB,oBAAU,OAAO,MAAM,eAAe,UAAU,MAAM,YAAY,SAAS,MAAM,CAAC;AAAA,QACrF;AAAA,MACJ;AACD,UAAI,SAAS,OAAO,WAAW,KAAK,QAAQ;AACxC,cAAM,IAAI,MAAM,4EAA4E;AAAA,MAC/F;AACD,YAAM,eAAe,MAAM,YAAY,SAAS,QAAQ,SAAS,QAAQ,IAAI;AAC7E,aAAO,OAAO,OAAO,CAAE,GAAE,WAAW,MAAM,kBAAkB;AAAA,QACxD,IAAI,SAAS,WAAY;AAAA,QACzB,MAAM,SAAS,UAAU,mBAAmB,UAAU,YAAY;AAAA,MACrE,CAAA,CAAC;AAAA,IACV;AAAA;AACI,QAAM,aAAa,YAAmB,MAAM;AAAA;AACxC,YAAM,SAAS,MAAM,iBAAiB,GAAG,IAAI;AAC7C,UAAI,OAAO,WAAW,GAAG;AACrB,eAAO,OAAO,CAAC;AAAA,MAClB;AACD,aAAO;AAAA,IACf;AAAA;AACI,QAAM,OAAO,YAAmB,MAAM;AAAA;AAClC,YAAM,SAAS,SAAS;AACxB,aAAO,QAAQ,MAAM,GAAG,yDAAyD,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AAC1I,YAAM,KAAK,MAAM,OAAO,gBAAgB,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAC1E,YAAM,WAAW,YAAY,SAAS,MAAM;AAG5C,aAAO,IAAI,4BAA4B,SAAS,WAAW,UAAU,EAAE;AAAA,IAC/E;AAAA;AACI,QAAM,cAAc,YAAmB,MAAM;AAAA;AACzC,YAAM,SAAS,UAAU,SAAS,QAAQ,aAAa;AACvD,aAAO,YAAY,MAAM,GAAG,mDAAmD,yBAAyB,EAAE,WAAW,cAAa,CAAE;AACpI,aAAO,MAAM,OAAO,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAAA,IAC1E;AAAA;AACI,QAAM,mBAAmB,YAAmB,MAAM;AAAA;AAC9C,YAAM,SAAS,UAAU,SAAS,QAAQ,MAAM;AAChD,aAAO,QAAQ,MAAM,GAAG,4CAA4C,yBAAyB,EAAE,WAAW,OAAM,CAAE;AAClH,YAAM,KAAK,MAAM,oBAAoB,GAAG,IAAI;AAC5C,UAAI,SAAS;AACb,UAAI;AACA,iBAAS,MAAM,OAAO,KAAK,EAAE;AAAA,MAChC,SACM,OAAO;AACV,YAAI,gBAAgB,KAAK,KAAK,MAAM,MAAM;AACtC,gBAAM,SAAS,UAAU,UAAU,MAAM,MAAM,EAAE;AAAA,QACpD;AACD,cAAM;AAAA,MACT;AACD,YAAM,WAAW,YAAY,GAAG,IAAI;AACpC,aAAO,SAAS,UAAU,qBAAqB,UAAU,MAAM;AAAA,IACvE;AAAA;AACI,QAAM,SAAS,IAAU,SAAS;AAC9B,UAAM,WAAW,YAAY,GAAG,IAAI;AACpC,QAAI,SAAS,UAAU;AACnB,aAAO,MAAM,WAAW,GAAG,IAAI;AAAA,IAClC;AACD,WAAO,MAAM,KAAK,GAAG,IAAI;AAAA,EACjC;AACI,mBAAiB,QAAQ;AAAA,IACrB,MAAM,SAAS,UAAU,gBAAgB,GAAG;AAAA,IAC5C,WAAW;AAAA,IAAU,MAAM;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAAM;AAAA,IAAY;AAAA,EAC1B,CAAK;AAED,SAAO,eAAe,QAAQ,YAAY;AAAA,IACtC,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,KAAK,MAAM;AACP,YAAM,WAAW,SAAS,UAAU,YAAY,GAAG;AACnD,aAAO,UAAU,wBAAwB,yBAAyB;AAAA,QAC9D,WAAW;AAAA,QACX,MAAM,EAAE,IAAK;AAAA,MAC7B,CAAa;AACD,aAAO;AAAA,IACV;AAAA,EACT,CAAK;AACD,SAAO;AACX;AACA,SAAS,kBAAkB,UAAU,KAAK;AACtC,QAAM,cAAc,YAAa,MAAM;AACnC,UAAM,WAAW,SAAS,UAAU,SAAS,KAAK,IAAI;AACtD,WAAO,UAAU,wBAAwB,yBAAyB;AAAA,MAC9D,WAAW;AAAA,MACX,MAAM,EAAE,KAAK,KAAM;AAAA,IAC/B,CAAS;AACD,WAAO;AAAA,EACf;AACI,QAAM,SAAS,YAAa,MAAM;AAC9B,WAAO,IAAI,oBAAoB,UAAU,YAAY,GAAG,IAAI,GAAG,IAAI;AAAA,EAC3E;AACI,mBAAiB,QAAQ;AAAA,IACrB,MAAM,SAAS,UAAU,aAAa,GAAG;AAAA,IACzC,WAAW;AAAA,IAAU,MAAM;AAAA,IAC3B;AAAA,EACR,CAAK;AAED,SAAO,eAAe,QAAQ,YAAY;AAAA,IACtC,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,KAAK,MAAM;AACP,YAAM,WAAW,SAAS,UAAU,SAAS,GAAG;AAChD,aAAO,UAAU,wBAAwB,yBAAyB;AAAA,QAC9D,WAAW;AAAA,QACX,MAAM,EAAE,IAAK;AAAA,MAC7B,CAAa;AACD,aAAO;AAAA,IACV;AAAA,EACT,CAAK;AACD,SAAO;AACX;AAKA,MAAM,WAAW,OAAO,IAAI,0BAA0B;AACtD,MAAM,iBAAiB,oBAAI;AAC3B,SAAS,YAAY,UAAU,QAAQ;AACnC,iBAAe,IAAI,SAAS,QAAQ,GAAG,MAAM;AACjD;AACA,SAAS,YAAY,UAAU;AAC3B,SAAO,eAAe,IAAI,SAAS,QAAQ,CAAC;AAChD;AACA,SAAS,WAAW,OAAO;AACvB,SAAQ,SAAS,OAAQ,UAAW,YAAa,oBAAoB,SAChE,OAAQ,MAAM,mBAAoB,cAAe,MAAM;AAChE;AACA,SAAe,WAAW,UAAU,OAAO;AAAA;AACvC,QAAI;AACJ,QAAI,WAAW;AAGf,QAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,YAAM,eAAe,SAAU,MAAM;AACjC,YAAI,YAAY,MAAM,EAAE,GAAG;AACvB,iBAAO;AAAA,QACV;AACD,cAAMC,YAAW,SAAS,UAAU,SAAS,IAAI;AACjD,uBAAeA,WAAU,oBAAoB,QAAQ,IAAI;AACzD,eAAOA,UAAS;AAAA,MAC5B;AAEQ,eAAS,MAAM,IAAI,CAAC,MAAM;AACtB,YAAI,KAAK,MAAM;AACX,iBAAO;AAAA,QACV;AACD,YAAI,MAAM,QAAQ,CAAC,GAAG;AAClB,iBAAO,EAAE,IAAI,YAAY;AAAA,QAC5B;AACD,eAAO,aAAa,CAAC;AAAA,MACjC,CAAS;AAAA,IACJ,WACQ,UAAU,KAAK;AACpB,eAAS,CAAC,IAAI;AAAA,IACjB,WACQ,OAAQ,UAAW,UAAU;AAClC,UAAI,YAAY,OAAO,EAAE,GAAG;AAExB,iBAAS,CAAC,KAAK;AAAA,MAClB,OACI;AAED,mBAAW,SAAS,UAAU,SAAS,KAAK;AAC5C,uBAAe,UAAU,oBAAoB,SAAS,KAAK;AAC3D,iBAAS,CAAC,SAAS,SAAS;AAAA,MAC/B;AAAA,IACJ,WACQ,WAAW,KAAK,GAAG;AAExB,eAAS,MAAM,MAAM;IACxB,WACQ,cAAc,OAAO;AAE1B,iBAAW,MAAM;AACjB,eAAS,CAAC,SAAS,SAAS;AAAA,IAC/B,OACI;AACD,qBAAe,OAAO,sBAAsB,SAAS,KAAK;AAAA,IAC7D;AAED,aAAS,OAAO,IAAI,CAAC,MAAM;AACvB,UAAI,KAAK,MAAM;AACX,eAAO;AAAA,MACV;AACD,UAAI,MAAM,QAAQ,CAAC,GAAG;AAClB,cAAM,QAAQ,MAAM,KAAK,IAAI,IAAI,EAAE,IAAI,CAACC,OAAMA,GAAE,YAAW,CAAE,CAAC,EAAE,OAAQ,CAAA;AACxE,YAAI,MAAM,WAAW,GAAG;AACpB,iBAAO,MAAM,CAAC;AAAA,QACjB;AACD,cAAM,KAAI;AACV,eAAO;AAAA,MACV;AACD,aAAO,EAAE;IACjB,CAAK;AACD,UAAM,MAAM,OAAO,IAAI,CAAC,MAAM;AAC1B,UAAI,KAAK,MAAM;AACX,eAAO;AAAA,MACV;AACD,UAAI,MAAM,QAAQ,CAAC,GAAG;AAClB,eAAO,EAAE,KAAK,GAAG;AAAA,MACpB;AACD,aAAO;AAAA,IACf,CAAK,EAAE,KAAK,GAAG;AACX,WAAO,EAAE,UAAU,KAAK;EAC5B;AAAA;AACA,SAAe,OAAO,UAAU,OAAO;AAAA;AACnC,UAAM,EAAE,KAAI,IAAK,YAAY,QAAQ;AACrC,WAAO,KAAK,KAAK,MAAM,WAAW,UAAU,KAAK,GAAG,GAAG,KAAK;AAAA,EAChE;AAAA;AACA,SAAe,OAAO,UAAU,WAAW,OAAO;AAAA;AAE9C,UAAM,WAAW,YAAY,SAAS,MAAM;AAC5C,WAAO,UAAU,gDAAgD,yBAAyB,EAAE,UAAW,CAAA;AACvG,UAAM,EAAE,UAAU,KAAK,OAAM,IAAK,MAAM,WAAW,UAAU,KAAK;AAClE,UAAM,EAAE,MAAM,KAAM,IAAG,YAAY,QAAQ;AAC3C,QAAI,MAAM,KAAK,IAAI,GAAG;AACtB,QAAI,CAAC,KAAK;AACN,YAAM,UAAW,OAAO,OAAO;AAC/B,YAAM,SAAS,EAAE,SAAS;AAC1B,YAAM,WAAW,CAAC,QAAQ;AACtB,YAAI,gBAAgB;AACpB,YAAI,iBAAiB,MAAM;AACvB,cAAI;AACA,4BAAgB,SAAS,UAAU,SAAS,IAAI,OAAO,CAAC,CAAC;AAAA,UAC5D,SACM,OAAO;AAAA,UAAG;AAAA,QACpB;AAED,YAAI,eAAe;AACf,gBAAM,iBAAiB;AACvB,gBAAM,OAAO,WAAW,SAAS,UAAU,eAAe,UAAU,IAAI,MAAM,IAAI,MAAM,IAAI,CAAA;AAC5F,eAAK,UAAU,OAAO,MAAM,CAACC,cAAa;AACtC,mBAAO,IAAI,qBAAqB,UAAUA,WAAU,OAAO,gBAAgB,GAAG;AAAA,UAClG,CAAiB;AAAA,QACJ,OACI;AACD,eAAK,UAAU,OAAO,CAAE,GAAE,CAACA,cAAa;AACpC,mBAAO,IAAI,4BAA4B,UAAUA,WAAU,OAAO,GAAG;AAAA,UACzF,CAAiB;AAAA,QACJ;AAAA,MACb;AACQ,UAAI,WAAW,CAAA;AACf,YAAM,QAAQ,MAAM;AAChB,YAAI,SAAS,QAAQ;AACjB;AAAA,QACH;AACD,iBAAS,KAAK,SAAS,GAAG,QAAQ,QAAQ,CAAC;AAAA,MACvD;AACQ,YAAM,OAAO,MAAY;AACrB,YAAI,SAAS,UAAU,GAAG;AACtB;AAAA,QACH;AACD,YAAI,UAAU;AACd,mBAAW,CAAA;AACX,cAAM,QAAQ,IAAI,OAAO;AACzB,iBAAS,IAAI,QAAQ,QAAQ;AAAA,MACzC;AACQ,YAAM,EAAE,KAAK,WAAW,CAAA,GAAI,OAAO;AACnC,WAAK,IAAI,KAAK,GAAG;AAAA,IACpB;AACD,WAAO;AAAA,EACX;AAAA;AAIA,IAAI,WAAW,QAAQ;AACvB,SAAe,MAAM,UAAU,OAAO,MAAM,aAAa;AAAA;AACrD,UAAM;AACN,UAAM,MAAM,MAAM,OAAO,UAAU,KAAK;AACxC,QAAI,CAAC,KAAK;AACN,aAAO;AAAA,IACV;AACD,UAAM,QAAQ,IAAI,UAAU;AAC5B,QAAI,YAAY,IAAI,UAAU,OAAO,CAAC,EAAE,UAAU,WAAW;AACzD,YAAM,WAAW,MAAM,KAAK,IAAI;AAChC,UAAI,aAAa;AACb,iBAAS,KAAK,YAAY,OAAO,OAAO,QAAQ,CAAC;AAAA,MACpD;AACD,UAAI;AACA,iBAAS,KAAK,UAAU,GAAG,QAAQ;AAAA,MACtC,SACM,OAAO;AAAA,MAAG;AACjB,aAAO,CAAC;AAAA,IAChB,CAAK;AACD,QAAI,IAAI,UAAU,WAAW,GAAG;AAC5B,UAAI,KAAI;AACR,kBAAY,QAAQ,EAAE,KAAK,OAAO,IAAI,GAAG;AAAA,IAC5C;AACD,WAAQ,QAAQ;AAAA,EACpB;AAAA;AACA,SAAe,KAAK,UAAU,OAAO,MAAM,aAAa;AAAA;AACpD,QAAI;AACA,YAAM;AAAA,IACT,SACM,OAAO;AAAA,IAAG;AACjB,UAAM,gBAAgB,MAAM,UAAU,OAAO,MAAM,WAAW;AAC9D,eAAW;AACX,WAAO,MAAM;AAAA,EACjB;AAAA;AACA,MAAM,iBAAiB,CAAC,MAAM;AACvB,MAAM,gBAAN,MAAM,cAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsCtB,YAAY,QAAQ,KAAK,QAAQ,WAAW;AA9B5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA,wBAAC;AAID;AAAA;AAAA;AAAA;AAOI,mBAAe,OAAQ,WAAY,YAAY,cAAc,MAAM,GAAG,qCAAqC,UAAU,MAAM;AAC3H,QAAI,UAAU,MAAM;AAChB,eAAS;AAAA,IACZ;AACD,UAAM,QAAQ,UAAU,KAAK,GAAG;AAChC,qBAAiB,MAAM,EAAE,QAAQ,QAAQ,WAAW,MAAK,CAAE;AAC3D,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,CAAE,EAAA,CAAE;AACnD,QAAI;AACJ,QAAI,OAAO;AACX,QAAI,WAAW;AACf,QAAI,WAAW;AACX,YAAM,WAAW,YAAY,MAAM;AAGnC,iBAAW,IAAI,4BAA4B,KAAK,WAAW,UAAU,SAAS;AAAA,IACjF;AACD,QAAI,OAAO,oBAAI;AAEf,QAAI,OAAQ,WAAY,UAAU;AAC9B,UAAI,YAAY,MAAM,GAAG;AACrB,eAAO;AACP,sBAAc,QAAQ,QAAQ,MAAM;AAAA,MACvC,OACI;AACD,cAAM,WAAW,UAAU,QAAQ,aAAa;AAChD,YAAI,CAAC,WAAW,QAAQ,GAAG;AACvB,gBAAM,UAAU,oDAAoD,yBAAyB;AAAA,YACzF,WAAW;AAAA,UACnC,CAAqB;AAAA,QACJ;AACD,sBAAc,SAAS,YAAY,MAAM,EAAE,KAAK,CAACC,UAAS;AACtD,cAAIA,SAAQ,MAAM;AACd,kBAAM,UAAU,uEAAuE,qBAAqB;AAAA,cACxG,OAAO;AAAA,YACnC,CAAyB;AAAA,UACJ;AACD,sBAAY,IAAI,EAAE,OAAOA;AACzB,iBAAOA;AAAA,QAC3B,CAAiB;AAAA,MACJ;AAAA,IACJ,OACI;AACD,oBAAc,OAAO,WAAY,EAAC,KAAK,CAACA,UAAS;AAC7C,YAAIA,SAAQ,MAAM;AACd,gBAAM,IAAI,MAAM,MAAM;AAAA,QACzB;AACD,oBAAY,IAAI,EAAE,OAAOA;AACzB,eAAOA;AAAA,MACvB,CAAa;AAAA,IACJ;AAED,gBAAY,MAAM,EAAE,aAAa,MAAM,UAAU,KAAI,CAAE;AAEvD,UAAM,UAAU,IAAI,MAAM,IAAI;AAAA,MAC1B,KAAK,CAACC,SAAQ,MAAM,aAAa;AAE7B,YAAI,OAAQ,SAAU,YAAY,eAAe,QAAQ,IAAI,KAAK,GAAG;AACjE,iBAAO,QAAQ,IAAIA,SAAQ,MAAM,QAAQ;AAAA,QAC5C;AACD,YAAI;AACA,iBAAO,KAAK,SAAS,IAAI;AAAA,QAC5B,SACM,OAAO;AACV,cAAI,CAAC,QAAQ,OAAO,kBAAkB,KAAK,MAAM,aAAa,OAAO;AACjE,kBAAM;AAAA,UACT;AAAA,QACJ;AACD,eAAO;AAAA,MACV;AAAA,MACD,KAAK,CAACA,SAAQ,SAAS;AAEnB,YAAI,eAAe,QAAQ,IAAI,KAAK,GAAG;AACnC,iBAAO,QAAQ,IAAIA,SAAQ,IAAI;AAAA,QAClC;AACD,eAAO,QAAQ,IAAIA,SAAQ,IAAI,KAAK,KAAK,UAAU,SAAS,OAAO,IAAI,CAAC;AAAA,MAC3E;AAAA,IACb,CAAS;AACD,qBAAiB,MAAM,EAAE,QAAO,CAAE;AAClC,qBAAiB,MAAM;AAAA,MACnB,UAAY,MAAM,WAAW,MAAM,WAAa,qBAAqB,IAAI,IAAK;AAAA,IAC1F,CAAS;AAED,WAAO,IAAI,MAAM,MAAM;AAAA,MACnB,KAAK,CAACA,SAAQ,MAAM,aAAa;AAC7B,YAAI,OAAQ,SAAU,YAAY,QAAQA,WAAU,eAAe,QAAQ,IAAI,KAAK,GAAG;AACnF,iBAAO,QAAQ,IAAIA,SAAQ,MAAM,QAAQ;AAAA,QAC5C;AAED,YAAI;AACA,iBAAOA,QAAO,YAAY,IAAI;AAAA,QACjC,SACM,OAAO;AACV,cAAI,CAAC,QAAQ,OAAO,kBAAkB,KAAK,MAAM,aAAa,OAAO;AACjE,kBAAM;AAAA,UACT;AAAA,QACJ;AACD,eAAO;AAAA,MACV;AAAA,MACD,KAAK,CAACA,SAAQ,SAAS;AACnB,YAAI,OAAQ,SAAU,YAAY,QAAQA,WAAU,eAAe,QAAQ,IAAI,KAAK,GAAG;AACnF,iBAAO,QAAQ,IAAIA,SAAQ,IAAI;AAAA,QAClC;AACD,eAAOA,QAAO,UAAU,YAAY,IAAI;AAAA,MAC3C;AAAA,IACb,CAAS;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ,QAAQ;AACZ,WAAO,IAAI,cAAa,KAAK,QAAQ,KAAK,WAAW,MAAM;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,QAAQ;AACX,WAAO,IAAI,cAAa,QAAQ,KAAK,WAAW,KAAK,MAAM;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAIK,aAAa;AAAA;AAAE,aAAO,MAAM,YAAY,IAAI,EAAE;AAAA,IAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAI5D,kBAAkB;AAAA;AACpB,YAAM,WAAW,YAAY,KAAK,MAAM;AACxC,aAAO,UAAU,qCAAqC,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AAC/G,YAAM,OAAO,MAAM,SAAS,QAAQ,MAAM,KAAK,WAAU,CAAE;AAC3D,UAAI,SAAS,MAAM;AACf,eAAO;AAAA,MACV;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKK,oBAAoB;AAAA;AAEtB,YAAM,WAAW,KAAK;AACtB,UAAI,UAAU;AACV,cAAM,SAAS;AACf,eAAO;AAAA,MACV;AAED,YAAM,OAAO,MAAM,KAAK;AACxB,UAAI,QAAQ,MAAM;AACd,eAAO;AAAA,MACV;AAED,YAAM,WAAW,YAAY,KAAK,MAAM;AACxC,aAAO,YAAY,MAAM,8CAA8C,yBAAyB,EAAE,WAAW,oBAAmB,CAAE;AAClI,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,cAAM,YAAY,MAAY;AAC1B,cAAI;AACA,kBAAMC,QAAO,MAAM,KAAK;AACxB,gBAAIA,SAAQ,MAAM;AACd,qBAAO,QAAQ,IAAI;AAAA,YACtB;AACD,qBAAS,KAAK,SAAS,SAAS;AAAA,UACnC,SACM,OAAO;AACV,mBAAO,KAAK;AAAA,UACf;AAAA,QACjB;AACY;MACZ,CAAS;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,wBAAwB;AACpB,WAAO,YAAY,IAAI,EAAE;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,YAAY,KAAK;AACb,QAAI,OAAQ,QAAS,UAAU;AAC3B,YAAM,IAAI;IACb;AACD,UAAM,OAAO,mBAAmB,MAAM,GAAG;AACzC,WAAO;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS,KAAK;AACV,QAAI,OAAQ,QAAS,UAAU;AAC3B,YAAM,IAAI;IACb;AACD,WAAO,kBAAkB,MAAM,GAAG;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAIK,iBAAiB,MAAM;AAAA;AACzB,YAAM,IAAI,MAAM,OAAO;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBK,YAAY,OAAO,WAAW,SAAS;AAAA;AACzC,UAAI,aAAa,MAAM;AACnB,oBAAY;AAAA,MACf;AACD,UAAI,WAAW,MAAM;AACjB,kBAAU;AAAA,MACb;AACD,YAAM,EAAE,MAAM,YAAa,IAAG,YAAY,IAAI;AAC9C,YAAM,UAAW,OAAO,OAAQ,MAAM;AACtC,YAAM,EAAE,UAAU,OAAQ,IAAG,MAAM,WAAW,MAAM,KAAK;AACzD,YAAM,SAAS,EAAE,SAAS,QAAQ,WAAW,QAAO;AACpD,YAAM,WAAW,YAAY,KAAK,MAAM;AACxC,aAAO,UAAU,4CAA4C,yBAAyB,EAAE,WAAW,cAAa,CAAE;AAClH,cAAQ,MAAM,SAAS,QAAQ,MAAM,GAAG,IAAI,CAAC,QAAQ;AACjD,YAAI,gBAAgB;AACpB,YAAI,iBAAiB,MAAM;AACvB,cAAI;AACA,4BAAgB,KAAK,UAAU,SAAS,IAAI,OAAO,CAAC,CAAC;AAAA,UACxD,SACM,OAAO;AAAA,UAAG;AAAA,QACpB;AACD,YAAI,eAAe;AACf,cAAI;AACA,mBAAO,IAAI,SAAS,KAAK,KAAK,WAAW,aAAa;AAAA,UACzD,SACM,OAAO;AACV,mBAAO,IAAI,kBAAkB,KAAK,KAAK;AAAA,UAC1C;AAAA,QACJ;AACD,eAAO,IAAI,IAAI,KAAK,QAAQ;AAAA,MACxC,CAAS;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,GAAG,OAAO,UAAU;AAAA;AACtB,YAAM,MAAM,MAAM,OAAO,MAAM,MAAM,KAAK;AAC1C,UAAI,UAAU,KAAK,EAAE,UAAU,MAAM,MAAK,CAAE;AAC5C,UAAI,MAAK;AACT,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKK,KAAK,OAAO,UAAU;AAAA;AACxB,YAAM,MAAM,MAAM,OAAO,MAAM,QAAQ,KAAK;AAC5C,UAAI,UAAU,KAAK,EAAE,UAAU,MAAM,KAAI,CAAE;AAC3C,UAAI,MAAK;AACT,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMK,KAAK,UAAU,MAAM;AAAA;AACvB,aAAO,MAAM,KAAK,MAAM,OAAO,MAAM,IAAI;AAAA,IAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKK,cAAc,OAAO;AAAA;AACvB,UAAI,OAAO;AACP,cAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,YAAI,CAAC,KAAK;AACN,iBAAO;AAAA,QACV;AACD,eAAO,IAAI,UAAU;AAAA,MACxB;AACD,YAAM,EAAE,KAAI,IAAK,YAAY,IAAI;AACjC,UAAI,QAAQ;AACZ,iBAAW,EAAE,UAAS,KAAM,KAAK,OAAM,GAAI;AACvC,iBAAS,UAAU;AAAA,MACtB;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKK,UAAU,OAAO;AAAA;AACnB,UAAI,OAAO;AACP,cAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,YAAI,CAAC,KAAK;AACN,iBAAO;QACV;AACD,eAAO,IAAI,UAAU,IAAI,CAAC,EAAE,SAAQ,MAAO,QAAQ;AAAA,MACtD;AACD,YAAM,EAAE,KAAI,IAAK,YAAY,IAAI;AACjC,UAAI,SAAS,CAAA;AACb,iBAAW,EAAE,UAAS,KAAM,KAAK,OAAM,GAAI;AACvC,iBAAS,OAAO,OAAO,UAAU,IAAI,CAAC,EAAE,SAAQ,MAAO,QAAQ,CAAC;AAAA,MACnE;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKK,IAAI,OAAO,UAAU;AAAA;AACvB,YAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,UAAI,CAAC,KAAK;AACN,eAAO;AAAA,MACV;AACD,UAAI,UAAU;AACV,cAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,EAAE,UAAAH,UAAQ,MAAOA,SAAQ,EAAE,QAAQ,QAAQ;AAC5E,YAAI,SAAS,GAAG;AACZ,cAAI,UAAU,OAAO,OAAO,CAAC;AAAA,QAChC;AAAA,MACJ;AACD,UAAI,YAAY,QAAQ,IAAI,UAAU,WAAW,GAAG;AAChD,YAAI,KAAI;AACR,oBAAY,IAAI,EAAE,KAAK,OAAO,IAAI,GAAG;AAAA,MACxC;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKK,mBAAmB,OAAO;AAAA;AAC5B,UAAI,OAAO;AACP,cAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,YAAI,CAAC,KAAK;AACN,iBAAO;AAAA,QACV;AACD,YAAI,KAAI;AACR,oBAAY,IAAI,EAAE,KAAK,OAAO,IAAI,GAAG;AAAA,MACxC,OACI;AACD,cAAM,EAAE,KAAI,IAAK,YAAY,IAAI;AACjC,mBAAW,EAAE,KAAK,KAAM,KAAI,KAAK,OAAM,GAAI;AACvC;AACA,eAAK,OAAO,GAAG;AAAA,QAClB;AAAA,MACJ;AACD,aAAO;AAAA,IACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,YAAY,OAAO,UAAU;AAAA;AAC/B,aAAO,MAAM,KAAK,GAAG,OAAO,QAAQ;AAAA,IACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIK,eAAe,OAAO,UAAU;AAAA;AAClC,aAAO,MAAM,KAAK,IAAI,OAAO,QAAQ;AAAA,IACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAID,OAAO,WAAW,KAAK;AAAA,IACnB,MAAM,uBAAuB,cAAa;AAAA,MACtC,YAAY,SAAS,SAAS,MAAM;AAChC,cAAM,SAAS,KAAK,MAAM;AAAA,MAC7B;AAAA,IACJ;AACD,WAAO;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,KAAK,QAAQ,KAAK,QAAQ;AAC7B,QAAI,UAAU,MAAM;AAChB,eAAS;AAAA,IACZ;AACD,UAAM,WAAW,IAAI,KAAK,QAAQ,KAAK,MAAM;AAC7C,WAAO;AAAA,EACV;AACL;AA9ZK;AA5BE,IAAM,eAAN;AA2bP,SAAS,gBAAgB;AACrB,SAAO;AACX;AAIO,MAAM,iBAAiB,cAAa,EAAG;AAC9C;AC+DY,MAAC,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,MAAM;AACR;AAGY,MAAC,gBAAgB;AAAA,EAC3B,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AACZ;AAGY,MAAC,iBAAiB;AAAA,EAC5B,CAAC,cAAc,QAAQ,GAAG;AAAA,IACxB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACnB;AAAA,EACD,CAAC,cAAc,GAAG,GAAG;AAAA,IACnB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACnB;AAAA,EACD,CAAC,cAAc,IAAI,GAAG;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACnB;AAAA,EACD,CAAC,cAAc,QAAQ,GAAG;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,kBAAkB;AAAA,EACnB;AACH;AAGY,MAAC,eAAe;AAAA,EAC1B,MAAM;AAAA,IACJ,UAAU;AAAA,MACR,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,KAAK;AAAA,MACH,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,MAAM;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AAAA,EACD,MAAM;AAAA,IACJ,UAAU;AAAA,MACR,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,KAAK;AAAA,MACH,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,MAAM;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,UAAU;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AAAA,EACD,KAAK;AAAA,IACH,KAAK;AAAA,MACH,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,IACX;AAAA,EACF;AAAA,EACD,KAAK;AAAA,IACH,UAAU;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,IACX;AAAA,EACF;AAAA,EACD,KAAK;AAAA,IACH,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,IACX;AAAA,EACF;AAAA,EACD,MAAM;AAAA,IACJ,UAAU;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,IACX;AAAA,EACF;AAAA,EACD,KAAK;AAAA,IACH,UAAU;AAAA,MACR,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AAAA,EACD,MAAM;AAAA,IACJ,UAAU;AAAA,MACR,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,IACD,KAAK;AAAA,MACH,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AAAA,EACD,OAAO;AAAA,IACL,UAAU;AAAA,MACR,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AAAA,EACD,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AAAA,EACD,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACF;AACH;AAGO,MAAM,qBAAqB;AAAA,EAChC,CAAC,cAAc,QAAQ,GAAG,CAAC,aAAa,UAAU,aAAa,YAAY;AAAA,EAC3E,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,UAAU,aAAa,YAAY;AAAA,EACtE,CAAC,cAAc,IAAI,GAAG,CAAC,aAAa,QAAQ;AAAA,EAC5C,CAAC,cAAc,QAAQ,GAAG,CAAC,aAAa,IAAI;AAC9C;AAGY,MAAC,sBAAsB,CAAC,eAAe;AACjD,QAAM,OAAO;AAAA,IACX,CAAC,aAAa,QAAQ,GAAG;AAAA,IACzB,CAAC,aAAa,QAAQ,GAAG;AAAA,IACzB,CAAC,aAAa,YAAY,GAAG;AAAA,IAC7B,CAAC,aAAa,IAAI,GAAG;AAAA,EACzB;AACE,SAAO,KAAK,UAAU,KAAK;AAC7B;AAGY,MAAC,gBAAgB,MAAM;AACjC,QAAM,mBAAmB;AAAA,IACvB,CAAC,aAAa,QAAQ,GAAG,OAAO,WAAW,eACzC,OAAO,aAAa,UACpB,OAAO,SAAS,eAAe;AAAA,IACjC,CAAC,aAAa,QAAQ,GAAG,OAAO,WAAW,eACzC,OAAO,YAAY;AAAA,IACrB,CAAC,aAAa,YAAY,GAAG,OAAO,WAAW,eAC7C,OAAO,aAAa,UACpB,OAAO,SAAS,YAAY;AAAA,IAC9B,CAAC,aAAa,IAAI,GAAG,OAAO,WAAW,eACrC,OAAO,SAAS;AAAA,EACtB;AACE,SAAO;AACT;AAGO,MAAM,yBAAyB,CAAO,aAAa,GAAG,QAAQ,QAAQ;AAC3E,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,QAAM,eAAe,OAAO,OAAO,OAAO,EAAE,KAAK,OAAK,MAAM,IAAI;AAEhE,SAAO,CAAC,gBAAgB,UAAU,YAAY;AAC5C,YAAQ,IAAI,kCAAkC,UAAU,CAAC,IAAI,UAAU,MAAM;AAC7E,UAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,KAAK,CAAC;AACvD,cAAU,cAAa;AACvB;AAAA,EACD;AAED,SAAO;AACT;AAGO,MAAM,yBAAyB,MAAM;;AAC1C,UAAQ,IAAI,kCAAkC;AAC9C,UAAQ,IAAI,aAAa,OAAO,WAAW,cAAc,QAAQ,OAAO,QAAQ,IAAI,gBAAgB;AACpG,UAAQ,IAAI,YAAY,OAAO,WAAW,cAAc,QAAQ,OAAO,OAAO,IAAI,gBAAgB;AAClG,UAAQ,IAAI,SAAS,OAAO,WAAW,cAAc,QAAQ,OAAO,IAAI,IAAI,gBAAgB;AAE5F,MAAI,OAAO,WAAW,eAAe,OAAO,UAAU;AACpD,YAAQ,IAAI,qBAAqB;AAAA,MAC/B,SAAS,OAAO,SAAS;AAAA,MACzB,YAAY,OAAO,SAAS;AAAA,MAC5B,SAAS,OAAO,SAAS;AAAA,IAC/B,CAAK;AAAA,EACF;AAED,MAAI,OAAO,WAAW,eAAe,OAAO,SAAS;AACnD,YAAQ,IAAI,oBAAoB;AAAA,MAC9B,OAAO,OAAO,QAAQ;AAAA,MACtB,WAAUrB,MAAA,OAAO,QAAQ,aAAf,gBAAAA,IAAyB;AAAA,MACnC,gBAAgB,OAAO,QAAQ;AAAA,IACrC,CAAK;AAAA,EACF;AAED,QAAM,UAAU;AAChB,UAAQ,IAAI,qBAAqB,OAAO;AAC1C;AAGA,MAAM,wBAAwB,MAAY;AACxC,UAAQ,IAAI,kCAAkC;AAE9C,MAAI,CAAC,OAAO,YAAY,CAAC,OAAO,SAAS,YAAY;AACnD,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC5E;AAED,MAAI;AAEF,UAAM,WAAW,MAAM,OAAO,SAAS,QAAQ;AAAA,MAC7C,QAAQ;AAAA,IACd,CAAK;AAED,QAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC7D;AAED,UAAM,UAAU,SAAS,CAAC;AAC1B,UAAM,aAAa,MAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,cAAa,CAAE;AAC1E,UAAM,UAAU,SAAS,YAAY,EAAE;AAEvC,QAAI;AACJ,YAAQ,SAAO;AAAA,MACb,KAAK;AAAG,sBAAc,cAAc;AAAU;AAAA,MAC9C,KAAK;AAAI,sBAAc,cAAc;AAAK;AAAA,MAC1C;AAAS,sBAAc,WAAW,OAAO;AAAA,IAC1C;AAGD,UAAM,kBAAkB;AAAA,MACtB,SAAS,CAAC,WAAW,OAAO,SAAS,QAAQ,MAAM;AAAA,MACnD,WAAW,OAAO;AAAA,QAChB,YAAY,MAAA;AAAY;AAAA;AAAA,QACxB,iBAAiB,CAAO,OAAO;AAC7B,gBAAM,SAAS,MAAM,OAAO,SAAS,QAAQ;AAAA,YAC3C,QAAQ;AAAA,YACR,QAAQ,CAAC;AAAA,cACP,MAAM;AAAA,cACN,IAAI,GAAG;AAAA,cACP,OAAO,GAAG,QAAS,OAAO,GAAG,UAAU,WAAW,GAAG,QAAQ,GAAG,MAAM,SAAU,IAAI;AAAA,cACpF,UAAU,GAAG,WAAY,OAAO,GAAG,aAAa,WAAW,GAAG,WAAW,GAAG,SAAS,SAAU,IAAI;AAAA,cACnG,MAAM,GAAG,QAAQ;AAAA,YAC/B,CAAa;AAAA,UACb,CAAW;AACD,iBAAO,EAAE,MAAM;QAChB;AAAA,MACT;AAAA,MACM,aAAa,CAAO,OAAO;AACzB,cAAM,SAAS,MAAM,OAAO,SAAS,QAAQ;AAAA,UAC3C,QAAQ;AAAA,UACR,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,IAAI,GAAG;AAAA,YACP,OAAO,GAAG,QAAS,OAAO,GAAG,UAAU,WAAW,GAAG,QAAQ,GAAG,MAAM,SAAU,IAAI;AAAA,YACpF,MAAM,GAAG,QAAQ;AAAA,UAC7B,CAAW;AAAA,QACX,CAAS;AACD,cAAM,WAAW,SAAS,QAAQ,EAAE;AACpC,eAAO;AAAA,UACL,UAAU,MAAM,SAAS,SAAU;AAAA,UACnC,KAAK,CAACC,QAAO;AAAA,YACX,KAAK,CAAC,OAAO;AAAA,cACX,UAAU,MAAM,KAAK,MAAM,WAAWA,KAAI,CAAC,EAAE,SAAU;AAAA,YACrE;AAAA,UACA;AAAA,QACA;AAAA,MACO;AAAA,IACP;AAEI,YAAQ,IAAI,oCAAoC,EAAE,SAAS,SAAS,YAAW,CAAE;AAEjF,WAAO;AAAA,MACL,YAAY,aAAa;AAAA,MACzB;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACN;AAAA,EACG,SAAQ,OAAO;AACd,YAAQ,MAAM,8BAA8B,KAAK;AACjD,UAAM;AAAA,EACP;AACH;AAGA,MAAM,wBAAwB,MAAY;AACxC,UAAQ,IAAI,kCAAkC;AAE9C,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC5E;AAED,QAAM,iBAAiB,CAAO,cAAc,IAAI,WAAW,QAAQ;AACjE,aAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACtD,UAAI,OAAO,WAAW,OAAO,QAAQ,OAAO;AAC1C,eAAO,OAAO;AAAA,MACf;AACD,cAAQ,IAAI,8CAA8C,UAAU,CAAC,IAAI,WAAW,EAAE;AACtF,YAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,QAAQ,CAAC;AAAA,IAC3D;AACD,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACvD;AAEE,MAAI;AACF,UAAM,UAAU,MAAM;AAEtB,QAAI,CAAC,QAAQ,kBAAkB,CAAC,QAAQ,eAAe,QAAQ;AAC7D,UAAI;AACF,cAAM,OAAO,QAAQ,QAAQ,EAAE,QAAQ,uBAAsB,CAAE;AAAA,MAChE,SAAQ,iBAAiB;AACxB,cAAM,IAAI,MAAM,+CAA+C;AAAA,MAChE;AAAA,IACF;AAED,UAAM,UAAU,QAAQ,eAAe;AACvC,YAAQ,IAAI,oCAAoC,OAAO;AAEvD,WAAO;AAAA,MACL,YAAY,aAAa;AAAA,MACzB;AAAA,MACA,UAAU;AAAA,MACV,SAAS,cAAc;AAAA,MACvB,aAAa;AAAA,IACnB;AAAA,EACG,SAAQ,OAAO;AACd,YAAQ,MAAM,8BAA8B,KAAK;AACjD,UAAM;AAAA,EACP;AACH;AAGA,MAAM,qBAAqB,MAAY;AACrC,UAAQ,IAAI,+BAA+B;AAE3C,MAAI,CAAC,OAAO,YAAY,CAAC,OAAO,SAAS,SAAS;AAChD,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC1E;AAED,MAAI;AACF,UAAM,WAAW,MAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,sBAAqB,CAAE;AAEhF,QAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,YAAM,IAAI,MAAM,gDAAgD;AAAA,IACjE;AAED,UAAM,UAAU,SAAS,CAAC;AAC1B,UAAM,aAAa,MAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,cAAa,CAAE;AAC1E,UAAM,UAAU,SAAS,YAAY,EAAE;AAEvC,QAAI;AACJ,YAAQ,SAAO;AAAA,MACb,KAAK;AAAG,sBAAc,cAAc;AAAU;AAAA,MAC9C,KAAK;AAAI,sBAAc,cAAc;AAAK;AAAA,MAC1C;AAAS,sBAAc,WAAW,OAAO;AAAA,IAC1C;AAED,UAAM,kBAAkB;AAAA,MACtB,SAAS,CAAC,WAAW,OAAO,SAAS,QAAQ,MAAM;AAAA,MACnD,WAAW,OAAO;AAAA,QAChB,YAAY,MAAA;AAAY;AAAA;AAAA,QACxB,iBAAiB,CAAO,OAAO;AAC7B,gBAAM,SAAS,MAAM,OAAO,SAAS,QAAQ;AAAA,YAC3C,QAAQ;AAAA,YACR,QAAQ,CAAC;AAAA,cACP,MAAM;AAAA,cACN,IAAI,GAAG;AAAA,cACP,OAAO,GAAG,QAAS,OAAO,GAAG,UAAU,WAAW,GAAG,QAAQ,GAAG,MAAM,SAAU,IAAI;AAAA,cACpF,UAAU,GAAG,WAAY,OAAO,GAAG,aAAa,WAAW,GAAG,WAAW,GAAG,SAAS,SAAU,IAAI;AAAA,cACnG,MAAM,GAAG,QAAQ;AAAA,YAC/B,CAAa;AAAA,UACb,CAAW;AACD,iBAAO,EAAE,MAAM;QAChB;AAAA,MACT;AAAA,MACM,aAAa,CAAO,OAAO;AACzB,cAAM,SAAS,MAAM,OAAO,SAAS,QAAQ;AAAA,UAC3C,QAAQ;AAAA,UACR,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,IAAI,GAAG;AAAA,YACP,OAAO,GAAG,QAAS,OAAO,GAAG,UAAU,WAAW,GAAG,QAAQ,GAAG,MAAM,SAAU,IAAI;AAAA,YACpF,MAAM,GAAG,QAAQ;AAAA,UAC7B,CAAW;AAAA,QACX,CAAS;AACD,cAAM,WAAW,SAAS,QAAQ,EAAE;AACpC,eAAO;AAAA,UACL,UAAU,MAAM,SAAS,SAAU;AAAA,UACnC,KAAK,CAACA,QAAO;AAAA,YACX,KAAK,CAAC,OAAO;AAAA,cACX,UAAU,MAAM,KAAK,MAAM,WAAWA,KAAI,CAAC,EAAE,SAAU;AAAA,YACrE;AAAA,UACA;AAAA,QACA;AAAA,MACO;AAAA,IACP;AAEI,WAAO;AAAA,MACL,YAAY,aAAa;AAAA,MACzB;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACN;AAAA,EACG,SAAQ,OAAO;AACd,YAAQ,MAAM,kCAAkC,KAAK;AACrD,UAAM;AAAA,EACP;AACH;AAGA,MAAM,oBAAoB,MAAY;AACpC,UAAQ,IAAI,8BAA8B;AAE1C,MAAI,CAAC,OAAO,MAAM;AAChB,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACpE;AAED,MAAI;AACF,UAAM,EAAE,QAAO,IAAK,MAAM,OAAO,KAAK,QAAO;AAE7C,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,iDAAiD;AAAA,IAClE;AAED,YAAQ,IAAI,uCAAuC,OAAO;AAE1D,WAAO;AAAA,MACL,YAAY,aAAa;AAAA,MACzB;AAAA,MACA,UAAU,OAAO;AAAA,MACjB,SAAS,cAAc;AAAA,MACvB,aAAa;AAAA,IACnB;AAAA,EACG,SAAQ,OAAO;AACd,YAAQ,MAAM,iCAAiC,KAAK;AACpD,UAAM;AAAA,EACP;AACH;AAGY,MAAC,gBAAgB,CAAO,YAAY,SAAS,UAAU,MAAM;AACvE,UAAQ,IAAI,yBAAyB,EAAE,YAAY,QAAS,CAAA;AAE5D,WAAS,UAAU,GAAG,UAAU,SAAS,WAAW;AAClD,QAAI;AACF,cAAQ,YAAU;AAAA,QAChB,KAAK,aAAa;AAChB,iBAAO,MAAM,sBAAqB;AAAA,QACpC,KAAK,aAAa;AAChB,iBAAO,MAAM,sBAAqB;AAAA,QACpC,KAAK,aAAa;AAChB,iBAAO,MAAM,mBAAkB;AAAA,QACjC,KAAK,aAAa;AAChB,iBAAO,MAAM,kBAAiB;AAAA,QAChC;AACE,gBAAM,IAAI,MAAM,4BAA4B,UAAU,EAAE;AAAA,MAC3D;AAAA,IACF,SAAQ,OAAO;AACd,cAAQ,IAAI,6BAA6B,UAAU,CAAC,YAAY,MAAM,OAAO;AAC7E,UAAI,YAAY,UAAU,GAAG;AAC3B,cAAM;AAAA,MACP;AACD,YAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAI,CAAC;AAAA,IACvD;AAAA,EACF;AACH;AAGY,MAAC,gCAAgC,CAAC,YAAY;AACxD,SAAO,mBAAmB,OAAO,KAAK;AACxC;AAGY,MAAC,kBAAkB,CAAO,kBAAkB,sBAAsB;AAC5E,UAAQ,IAAI,wBAAwB,EAAE,kBAAkB,kBAAmB,CAAA;AAE3E,MAAI,CAAC,kBAAkB;AACrB,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACvC;AAED,QAAM,EAAE,IAAI,QAAQ,cAAc,eAAe,UAAU,SAAS,YAAa,IAAG;AAEpF,MAAI,CAAC,IAAI;AACP,UAAM,IAAI,MAAM,gCAAgC;AAAA,EACjD;AAED,MAAI,CAAC,UAAU,MAAM,WAAW,MAAM,CAAC,KAAK,WAAW,MAAM,KAAK,GAAG;AACnE,UAAM,IAAI,MAAM,gBAAgB;AAAA,EACjC;AAGD,QAAM,gBAAgB,CAAC,gBAAgB,iBAAiB;AAExD,MAAI,eAAe;AACjB,WAAO,sBAAsB,kBAAkB,IAAI,MAAM;AAAA,EAC7D,OAAS;AACL,WAAO,qBAAqB,kBAAkB;AAAA,MAC5C,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,QAAQ;AAAA,IACd,GAAO,IAAI,MAAM;AAAA,EACd;AACH;AAGO,MAAM,wBAAwB,CAAO,kBAAkB,WAAW,WAAW;AAClF,UAAQ,IAAI,+BAA+B,EAAE,WAAW,OAAQ,CAAA;AAEhE,MAAI,CAAC,oBAAoB,CAAC,iBAAiB,UAAU;AACnD,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACvC;AAED,MAAI;AACF,QAAI;AAEJ,YAAQ,iBAAiB,YAAU;AAAA,MACjC,KAAK,aAAa;AAAA,MAClB,KAAK,aAAa;AAChB,cAAM,WAAW,iBAAiB;AAClC,cAAM,SAAS,SAAS;AAGxB,cAAM,YAAYwB,aAChBA,WAAkB,OAAO,UAAU,IACnCC,SAAa,WAAW,OAAO,SAAU,CAAA;AAG3C,cAAM,cAAc,MAAM,SAAS,YAAY;AAAA,UAC7C,IAAI;AAAA,UACJ,OAAO;AAAA,QACjB,CAAS;AAED,cAAM,WAAW,OAAO,YAAY,QAAQ,aACxC,YAAY,IAAI,GAAG,EAAE,IAAI,GAAG,IAC5B,EAAE,UAAU,MAAM,KAAK,MAAM,SAAS,YAAY,SAAQ,CAAE,IAAI,GAAG,EAAE,SAAU,EAAA;AAGnF,sBAAc,MAAM,OAAO,gBAAgB;AAAA,UACzC,IAAI;AAAA,UACJ,OAAO;AAAA,UACP;AAAA,QACV,CAAS;AACD;AAAA,MAEF,KAAK,aAAa;AAChB,cAAM,UAAU,iBAAiB;AAEjC,YAAI,CAAC,WAAW,CAAC,QAAQ,OAAO;AAC9B,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC1C;AAED,cAAM,YAAY,QAAQ,MAAM,OAAO,SAAU,CAAA;AACjD,sBAAc,MAAM,QAAQ,IAAI,gBAAgB,WAAW,SAAS;AACpE;AAAA,MAEF,KAAK,aAAa;AAChB,cAAM,OAAO,iBAAiB;AAC9B,cAAM,aAAa,KAAK,MAAM,WAAW,MAAM,IAAI,GAAO;AAE1D,sBAAc,MAAM,KAAK,YAAY;AAAA,UACnC,WAAW;AAAA,UACX,QAAQ;AAAA,QAClB,CAAS;AACD;AAAA,MAEF;AACE,cAAM,IAAI,MAAM,4BAA4B,iBAAiB,UAAU,EAAE;AAAA,IAC5E;AAED,UAAM,OAAO,YAAY,QAAQ,YAAY,QAAQ,YAAY,QAAQ;AACzE,YAAQ,IAAI,4BAA4B,IAAI;AAC5C,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,6BAA6B,KAAK;AAChD,UAAM;AAAA,EACP;AACH;AAGO,MAAM,uBAAuB,CAAO,kBAAkB,aAAa,WAAW,WAAW;AAC9F,UAAQ,IAAI,8BAA8B,EAAE,aAAa,WAAW,OAAM,CAAE;AAE5E,MAAI,CAAC,oBAAoB,CAAC,iBAAiB,UAAU;AACnD,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACvC;AAED,MAAI,CAAC,eAAe,CAAC,YAAY,iBAAiB;AAChD,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC9C;AAED,UAAQ,iBAAiB,YAAU;AAAA,IACjC,KAAK,aAAa;AAChB,aAAO,qBAAqB,kBAAkB,aAAa,WAAW,MAAM;AAAA,IAC9E,KAAK,aAAa;AAChB,aAAO,6BAA6B,kBAAkB,aAAa,WAAW,MAAM;AAAA,IACtF;AACE,aAAO,qBAAqB,kBAAkB,aAAa,WAAW,MAAM;AAAA,EAC/E;AACH;AAGO,MAAM,uBAAuB,CAAO,kBAAkB,aAAa,WAAW,WAAW;AAC9F,UAAQ,IAAI,oCAAoC,EAAE,aAAa,WAAW,OAAM,CAAE;AAElF,QAAM,WAAW,iBAAiB;AAClC,QAAM,SAAS,SAAS;AAExB,QAAM,EAAE,iBAAiB,UAAU,OAAM,IAAK;AAG9C,QAAM,cAAc,WAAW,MAAM;AACrC,QAAM,gBAAgB,SAAS,QAAQ;AAEvC,MAAI;AACJ,MAAI;AACF,iBAAaC,aACXA,WAAkB,YAAY,SAAU,GAAE,aAAa,IACvDD,SAAa,WAAW,YAAY,SAAU,GAAE,aAAa;AAAA,EAChE,SAAQ,KAAK;AAEZ,UAAM,QAAQ,cAAc,KAAK,IAAI,IAAI,aAAa;AACtD,iBAAa;AAAA,MACX,UAAU,MAAM,MAAM,eAAe,YAAY,EAAE,aAAa,OAAO;AAAA,IAC7E;AAAA,EACG;AAED,UAAQ,IAAI,WAAW,WAAW,IAAI,MAAM,KAAK,WAAW,SAAU,CAAA,mBAAmB,SAAS,EAAE;AAEpG,MAAI;AAEF,UAAM,gBAAgB,IAAIE;AAAAA,MACxB;AAAA,MACA,CAAC,8DAA8D;AAAA,MAC/D;AAAA,IACN;AAGI,UAAM,gBAAgB,WAAW,SAAS,MAAM;AAChD,UAAM,cAAc,MAAM,cAAc,SAAS,WAAW,YAAY;AAAA,MACtE,UAAU,KAAK,MAAM,MAAS,aAAa;AAAA;AAAA,IACjD,CAAK;AAED,YAAQ,IAAI,2BAA2B,WAAW;AAClD,WAAO,YAAY;AAAA,EACpB,SAAQ,OAAO;AACd,YAAQ,MAAM,4BAA4B,KAAK;AAE/C,QAAI,MAAM,WAAW,MAAM,QAAQ,SAAS,eAAe,GAAG;AAC5D,YAAM,IAAI,MAAM,8BAA8B;AAAA,IACpD,WAAe,MAAM,WAAW,MAAM,QAAQ,SAAS,oBAAoB,GAAG;AACxE,YAAM,IAAI,MAAM,oCAAoC;AAAA,IAC1D,OAAW;AACL,YAAM;AAAA,IACP;AAAA,EACF;AACH;AAGO,MAAM,uBAAuB,CAAO,kBAAkB,aAAa,WAAW,WAAW;AAC9F,UAAQ,IAAI,8BAA8B,EAAE,aAAa,WAAW,OAAM,CAAE;AAE5E,QAAM,UAAU,iBAAiB;AACjC,MAAI,CAAC,WAAW,CAAC,QAAQ,OAAO;AAC9B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AAED,QAAM,EAAE,iBAAiB,UAAU,OAAM,IAAK;AAC9C,QAAM,cAAc,WAAW,MAAM;AACrC,QAAM,gBAAgB,SAAS,QAAQ;AACvC,QAAM,qBAAqB,KAAK,MAAM,cAAc,KAAK,IAAI,IAAI,aAAa,CAAC;AAE/E,UAAQ,IAAI,WAAW,WAAW,IAAI,MAAM,KAAK,kBAAkB,mBAAmB,SAAS,EAAE;AAEjG,MAAI;AACF,UAAM,WAAW,MAAM,QAAQ,SAAQ,EAAG,GAAG,eAAe;AAE5D,QAAI,CAAC,SAAS,UAAU;AACtB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC1C;AAED,UAAM,cAAc,MAAM,SAAS;AAAA,MACjC;AAAA,MACA,mBAAmB,SAAU;AAAA,IAC9B,EAAC,KAAK;AAAA,MACL,UAAU;AAAA;AAAA,MACV,WAAW;AAAA,MACX,oBAAoB;AAAA,IAC1B,CAAK;AAED,YAAQ,IAAI,2BAA2B,WAAW;AAClD,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,6BAA6B,KAAK;AAEhD,QAAI,MAAM,WAAW,MAAM,QAAQ,SAAS,eAAe,GAAG;AAC5D,YAAM,IAAI,MAAM,8BAA8B;AAAA,IACpD,WAAe,MAAM,WAAW,MAAM,QAAQ,SAAS,WAAW,GAAG;AAC/D,YAAM,IAAI,MAAM,2EAA2E;AAAA,IACjG,OAAW;AACL,YAAM,IAAI,MAAM,uBAAuB,MAAM,WAAW,eAAe,EAAE;AAAA,IAC1E;AAAA,EACF;AACH;AAGO,MAAM,+BAA+B,CAAO,kBAAkB,aAAa,WAAW,WAAW;AACtG,UAAQ,IAAI,uCAAuC,EAAE,aAAa,WAAW,OAAM,CAAE;AAErF,QAAM,OAAO,iBAAiB;AAC9B,QAAM,EAAE,SAAS,UAAU,OAAM,IAAK;AAEtC,QAAM,cAAc,WAAW,MAAM;AACrC,QAAM,gBAAgB,SAAS,QAAQ;AACvC,QAAM,cAAc,KAAK,MAAM,cAAc,KAAK,IAAI,IAAI,aAAa,CAAC;AAExE,UAAQ,IAAI,WAAW,WAAW,IAAI,MAAM,KAAK,WAAW,mBAAmB,SAAS,EAAE;AAE1F,MAAI;AACF,UAAM,cAAc,MAAM,KAAK,kBAAkB;AAAA,MAC/C,WAAW;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,IACd,CAAK;AAED,YAAQ,IAAI,oCAAoC,WAAW;AAC3D,WAAO,YAAY;AAAA,EACpB,SAAQ,OAAO;AACd,YAAQ,MAAM,qCAAqC,KAAK;AAExD,QAAI,MAAM,WAAW,MAAM,QAAQ,SAAS,UAAU,GAAG;AACvD,YAAM,IAAI,MAAM,8BAA8B;AAAA,IACpD,OAAW;AACL,YAAM;AAAA,IACP;AAAA,EACF;AACH;ACh5CA,IAAI,YAAY;AAAA,EACd,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,yBAAyB,CAAE;AAC7B;AAKO,MAAM,gBAAgB,CAAC,WAAW;AACvC,cAAY,kCAAK,YAAc;AAC/B,UAAQ,IAAI,yBAAyB;AAAA,IACnC,QAAQ,UAAU;AAAA,IAClB,QAAQ,UAAU,SAAS,GAAG,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,QAAQ;AAAA,IACtE,oBAAoB,OAAO,KAAK,UAAU,2BAA2B,CAAE,CAAA,EAAE,SAAS;AAAA,EACtF,CAAG;AAGD,MAAI,UAAU,UAAU,UAAU,WAAW;AAC3C,iCAA8B,EAAC,KAAK,aAAW;AAC7C,UAAI,SAAS;AACX,kBAAU,0BAA0B,kCAAK,UAAU,0BAA4B;AAC/E,gBAAQ,IAAI,2CAA2C,OAAO;AAAA,MAC/D;AAAA,IACP,CAAK,EAAE,MAAM,SAAO;AACd,cAAQ,KAAK,mDAAmD,IAAI,OAAO;AAAA,IACjF,CAAK;AAAA,EACF;AACH;AAKA,MAAM,aAAa,MAAM;AACvB,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,aAAa,UAAU;AAAA,IACvB,gBAAgB,UAAU;AAAA,EAC9B;AACA;AAKO,MAAM,+BAA+B,MAAY;AACtD,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,GAAG,UAAU,MAAM,0BAA0B;AAAA,MACxE,QAAQ;AAAA,MACR,SAAS,WAAY;AAAA,IAC3B,CAAK;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,qCAAqC,SAAS,MAAM,EAAE;AAAA,IACvE;AAED,UAAM,OAAO,MAAM,SAAS;AAG5B,UAAM,kBAAkB,CAAA;AAExB,QAAI,KAAK,WAAW,KAAK,SAAS;AAChC,WAAK,QAAQ,QAAQ,YAAU;AAC7B,YAAI,OAAO,iBAAiB,OAAO,kBAAkB;AACnD,0BAAgB,OAAO,gBAAgB,IAAI,OAAO;AAAA,QACnD;AAAA,MACT,CAAO;AAAA,IACF;AAED,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,6CAA6C,KAAK;AAChE,UAAM;AAAA,EACP;AACH;AAKY,MAAC,gBAAgB,CAAO,gBAAgB;AAClD,MAAI;AACF,YAAQ,IAAI,+BAA+B,WAAW;AAEtD,QAAI,CAAC,YAAY,QAAQ;AACvB,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC7C;AAGD,QAAI,kBAAkB,UAAU,2BAA2B;AAG3D,QAAI,OAAO,KAAK,eAAe,EAAE,WAAW,GAAG;AAC7C,UAAI;AACF,0BAAkB,MAAM;AACxB,kBAAU,0BAA0B;AAAA,MACrC,SAAQ,YAAY;AACnB,gBAAQ,KAAK,8CAA8C,WAAW,OAAO;AAAA,MAC9E;AAAA,IACF;AAGD,UAAM,sBAAsB,iCACvB,cADuB;AAAA,MAE1B,yBAAyB,kCACpB,kBACA,YAAY;AAAA,IAEvB;AAEI,YAAQ,IAAI,0BAA0B,iCACjC,sBADiC;AAAA,MAEpC,yBAAyB,oBAAoB;AAAA,IACnD,EAAK;AAED,UAAM,WAAW,MAAM,MAAM,GAAG,UAAU,MAAM,wBAAwB;AAAA,MACtE,QAAQ;AAAA,MACR,SAAS,WAAY;AAAA,MACrB,MAAM,KAAK,UAAU,mBAAmB;AAAA,IAC9C,CAAK;AAED,YAAQ,IAAI,mCAAmC,SAAS,MAAM;AAE9D,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,SAAS;MAC5B,SAAQ,GAAG;AACV,cAAM,IAAI,MAAM,6BAA6B,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MACtF;AAED,cAAQ,MAAM,2BAA2B,SAAS;AAClD,YAAM,IAAI,MAAM,UAAU,SAAS,6BAA6B,SAAS,MAAM,EAAE;AAAA,IAClF;AAED,UAAM,OAAO,MAAM,SAAS;AAC5B,YAAQ,IAAI,iCAAiC,IAAI;AAGjD,QAAI,KAAK,kBAAkB,KAAK,eAAe,iBAAiB;AAC9D,gBAAU,0BAA0B,kCAC/B,UAAU,0BACV,KAAK,eAAe;AAAA,IAE1B;AAED,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,yBAAyB,KAAK;AAC5C,UAAM;AAAA,EACP;AACH;AAKY,MAAC,aAAa,CAAO,cAAc;AAC7C,MAAI;AACF,YAAQ,IAAI,oBAAoB,SAAS;AAEzC,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,wBAAwB;AAAA,IACzC;AAED,UAAM,WAAW,MAAM,MAAM,GAAG,UAAU,MAAM,iBAAiB,SAAS,IAAI;AAAA,MAC5E,QAAQ;AAAA,MACR,SAAS,WAAY;AAAA,IAC3B,CAAK;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,SAAS;MAC5B,SAAQ,GAAG;AACV,cAAM,IAAI,MAAM,0BAA0B,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MACnF;AAED,cAAQ,MAAM,0BAA0B,SAAS;AACjD,YAAM,IAAI,MAAM,UAAU,SAAS,0BAA0B,SAAS,MAAM,EAAE;AAAA,IAC/E;AAED,UAAM,OAAO,MAAM,SAAS;AAC5B,YAAQ,IAAI,yBAAyB,IAAI;AAGzC,QAAI,KAAK,WAAW,KAAK,QAAQ,iBAAiB;AAChD,gBAAU,0BAA0B,kCAC/B,UAAU,0BACV,KAAK,QAAQ;AAAA,IAEnB;AAED,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,sBAAsB,KAAK;AACzC,UAAM;AAAA,EACP;AACH;AAKY,MAAC,iBAAiB,CAAO,gBAAgB;AACnD,MAAI;AACF,YAAQ,IAAI,iCAAiC,WAAW;AAExD,QAAI,CAAC,YAAY,WAAW;AAC1B,YAAM,IAAI,MAAM,wBAAwB;AAAA,IACzC;AAED,QAAI,CAAC,YAAY,iBAAiB;AAChC,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAC/C;AAED,UAAM,WAAW,MAAM,MAAM,GAAG,UAAU,MAAM,yBAAyB;AAAA,MACvE,QAAQ;AAAA,MACR,SAAS,WAAY;AAAA,MACrB,MAAM,KAAK,UAAU,WAAW;AAAA,IACtC,CAAK;AAED,YAAQ,IAAI,oCAAoC,SAAS,MAAM;AAE/D,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,SAAS;MAC5B,SAAQ,GAAG;AACV,cAAM,IAAI,MAAM,8BAA8B,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MACvF;AAED,cAAQ,MAAM,6BAA6B,SAAS;AACpD,YAAM,IAAI,MAAM,UAAU,SAAS,8BAA8B,SAAS,MAAM,EAAE;AAAA,IACnF;AAED,UAAM,OAAO,MAAM,SAAS;AAC5B,YAAQ,IAAI,kCAAkC,IAAI;AAClD,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,0BAA0B,KAAK;AAC7C,UAAM;AAAA,EACP;AACH;AAKY,MAAC,uBAAuB,MAAY;AAC9C,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,GAAG,UAAU,MAAM,iBAAiB;AAAA,MAC/D,QAAQ;AAAA,MACR,SAAS,WAAY;AAAA,IAC3B,CAAK;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,SAAS;MAC5B,SAAQ,GAAG;AACV,cAAM,IAAI,MAAM,2BAA2B,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MACpF;AAED,YAAM,IAAI,MAAM,UAAU,SAAS,2BAA2B,SAAS,MAAM,EAAE;AAAA,IAChF;AAED,UAAM,OAAO,MAAM,SAAS;AAC5B,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,iCAAiC,KAAK;AACpD,UAAM;AAAA,EACP;AACH;AAkCY,MAAC,qBAAqB,MAAY;AAC5C,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,GAAG,UAAU,MAAM,4BAA4B;AAAA,MAC1E,QAAQ;AAAA,MACR,SAAS,WAAY;AAAA,IAC3B,CAAK;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,SAAS;MAC5B,SAAQ,GAAG;AACV,cAAM,IAAI,MAAM,mCAAmC,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MAC5F;AAED,YAAM,IAAI,MAAM,UAAU,SAAS,mCAAmC,SAAS,MAAM,EAAE;AAAA,IACxF;AAED,UAAM,OAAO,MAAM,SAAS;AAG5B,QAAI,KAAK,UAAU;AACjB,YAAM,kBAAkB,CAAA;AAGxB,UAAI,KAAK,SAAS,eAAe;AAC/B,wBAAgB,WAAW,KAAK,SAAS;AAAA,MAC1C;AAED,UAAI,KAAK,SAAS,kBAAkB;AAClC,wBAAgB,SAAS,KAAK,SAAS;AAAA,MACxC;AAED,UAAI,KAAK,SAAS,iBAAiB;AACjC,eAAO,OAAO,iBAAiB,KAAK,SAAS,eAAe;AAAA,MAC7D;AAED,gBAAU,0BAA0B,kCAC/B,UAAU,0BACV;AAAA,IAEN;AAED,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,+BAA+B,KAAK;AAClD,UAAM;AAAA,EACP;AACH;AAuEY,MAAC,wBAAwB,CAAO,SAAS,YAAY;AAC/D,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,GAAG,UAAU,MAAM,yBAAyB;AAAA,MACvE,QAAQ;AAAA,MACR,SAAS,WAAY;AAAA,MACrB,MAAM,KAAK,UAAU,EAAE,SAAS,QAAO,CAAE;AAAA,IAC/C,CAAK;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,SAAS;MAC5B,SAAQ,GAAG;AACV,cAAM,IAAI,MAAM,+BAA+B,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MACxF;AAED,YAAM,IAAI,MAAM,UAAU,SAAS,+BAA+B,SAAS,MAAM,EAAE;AAAA,IACpF;AAED,UAAM,OAAO,MAAM,SAAS;AAC5B,WAAO;AAAA,EACR,SAAQ,OAAO;AACd,YAAQ,MAAM,kCAAkC,KAAK;AACrD,UAAM;AAAA,EACP;AACH;AAKO,MAAM,eAAe,MAAM;AAChC,SAAO,iCACF,YADE;AAAA;AAAA,IAGL,yBAAyB,mBAAK,UAAU;AAAA,EAC5C;AACA;AAgBY,MAAC,8BAA8B,CAAC,UAAU,eAAe;AACnE,QAAM,WAAW;AAAA,IACf,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,EACd;AAEE,QAAM,SAAS,SAAS,OAAO,KAAK;AACpC,QAAM,OAAO,MAAM,KAAK,EAAC,QAAQ,GAAE,GAAG,MACpC,KAAK,MAAM,KAAK,OAAQ,IAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE;AAEtD,SAAO,GAAG,MAAM,GAAG,IAAI;AACzB;;;;;;;;;;;;ACn1Ba,IAAI,IAAEC,OAAiB,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,UAAU,gBAAe,IAAE,EAAE,mDAAmD,mBAAkB,IAAE,EAAC,KAAI,MAAG,KAAI,MAAG,QAAO,MAAG,UAAS,KAAE;AAClP,SAAS,EAAE,GAAE,GAAE,GAAE;AAAC,MAAIpC,IAAE,IAAE,IAAG,IAAE,MAAK,IAAE;AAAK,aAAS,MAAI,IAAE,KAAG;AAAG,aAAS,EAAE,QAAM,IAAE,KAAG,EAAE;AAAK,aAAS,EAAE,QAAM,IAAE,EAAE;AAAK,OAAIA,MAAK;AAAE,MAAE,KAAK,GAAEA,EAAC,KAAG,CAAC,EAAE,eAAeA,EAAC,MAAI,EAAEA,EAAC,IAAE,EAAEA,EAAC;AAAG,MAAG,KAAG,EAAE;AAAa,SAAIA,MAAK,IAAE,EAAE,cAAa;AAAE,iBAAS,EAAEA,EAAC,MAAI,EAAEA,EAAC,IAAE,EAAEA,EAAC;AAAG,SAAM,EAAC,UAAS,GAAE,MAAK,GAAE,KAAI,GAAE,KAAI,GAAE,OAAM,GAAE,QAAO,EAAE,QAAO;AAAC;0CAAkB;AAAa,+BAAA,MAAC;AAAE,+BAAA,OAAa;ACR/T;AACzCqC,aAAA,UAAiBD;AACnB;;ACDA,MAAM,eAAe,cAAc;AAEtB,MAAA,WAAW,MAAM,WAAW,YAAY;AAE9C,MAAM,gBAAgB,CAAC,EAAE,eAAe,SAAS,eAAe;AACrE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAE/C,QAAM,cAAc,MAAM;AACxB,aAAS,CAAa,cAAA,cAAc,UAAU,SAAS,OAAO;AAAA,EAAA;AAGhE,YAAU,MAAM;AACd,aAAS,gBAAgB,UAAU,OAAO,SAAS,MAAM;AAChD,aAAA,gBAAgB,UAAU,IAAI,KAAK;AAAA,EAAA,GAC3C,CAAC,KAAK,CAAC;AAGR,SAAAE,sCAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,OAAO,UAAU,eAC9C,SACH,CAAA;AAEJ;ACpBA,MAAM,iBAAiB,cAAc;AAExB,MAAA,aAAa,MAAM,WAAW,cAAc;AAElD,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,wBAAwB;AAAA;AAAA,EACxB,2BAA2B;AAAA;AAAA,EAC3B,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,KAAK;AACxD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,IAAI;AACvC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AAEnD,YAAU,MAAM;AACV,QAAA,CAAC,UAAU,CAAC,WAAW;AACzB,eAAS,iCAAiC;AAC1C;AAAA,IACF;AAEI,QAAA;AACY,oBAAA;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QACA;AAAA,MAAA,CACD;AAED,uBAAiB,IAAI;AAErB,UAAI,OAAO;AACT,gBAAQ,IAAI,iCAAiC;AAAA,UAC3C;AAAA,UACA;AAAA,UACA,uBAAuB,wBAAwB,GAAG,sBAAsB,UAAU,GAAG,CAAC,CAAC,MAAM,sBAAsB,UAAU,sBAAsB,SAAS,CAAC,CAAC,KAAK;AAAA,UACnK,0BAA0B,2BAA2B,GAAG,yBAAyB,UAAU,GAAG,CAAC,CAAC,MAAM,yBAAyB,UAAU,yBAAyB,SAAS,CAAC,CAAC,KAAK;AAAA,QAAA,CACnL;AAAA,MACH;AAAA,aACO,KAAK;AACZ,eAAS,IAAI,OAAO;AACpB,UAAI,OAAO;AACD,gBAAA,MAAM,qCAAqC,GAAG;AAAA,MACxD;AAAA,IACF;AAAA,EAAA,GACC,CAAC,QAAQ,WAAW,QAAQ,uBAAuB,0BAA0B,KAAK,CAAC;AAGhF,QAAA,mBAAmB,CAAC,SAAS;AACjC,mBAAe,IAAI;AACZ,WAAA;AAAA,EAAA;AAGT,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,SACGA,kCAAAA,IAAA,eAAe,UAAf,EAAwB,OACtB,SACH,CAAA;AAEJ;AC9EA,IAAIC,aAAY,OAAO;AACvB,IAAIC,uBAAsB,OAAO;AACjC,IAAIC,gBAAe,OAAO,UAAU;AACpC,IAAIC,gBAAe,OAAO,UAAU;AACpC,IAAIC,mBAAkB,CAAC,KAAK,KAAK,UAAU,OAAO,MAAMJ,WAAU,KAAK,KAAK,EAAE,YAAY,MAAM,cAAc,MAAM,UAAU,MAAM,MAAO,CAAA,IAAI,IAAI,GAAG,IAAI;AAC1J,IAAIK,kBAAiB,CAAC,GAAG5C,OAAM;AAC7B,WAAS,QAAQA,OAAMA,KAAI,CAAA;AACzB,QAAIyC,cAAa,KAAKzC,IAAG,IAAI;AAC3B,MAAA2C,iBAAgB,GAAG,MAAM3C,GAAE,IAAI,CAAC;AACpC,MAAIwC;AACF,aAAS,QAAQA,qBAAoBxC,EAAC,GAAG;AACvC,UAAI0C,cAAa,KAAK1C,IAAG,IAAI;AAC3B,QAAA2C,iBAAgB,GAAG,MAAM3C,GAAE,IAAI,CAAC;AAAA,IACnC;AACH,SAAO;AACT;AACA,IAAI,YAAY,CAAC,QAAQ,YAAY;AACnC,MAAI,SAAS,CAAA;AACb,WAAS,QAAQ;AACf,QAAIyC,cAAa,KAAK,QAAQ,IAAI,KAAK,QAAQ,QAAQ,IAAI,IAAI;AAC7D,aAAO,IAAI,IAAI,OAAO,IAAI;AAC9B,MAAI,UAAU,QAAQD;AACpB,aAAS,QAAQA,qBAAoB,MAAM,GAAG;AAC5C,UAAI,QAAQ,QAAQ,IAAI,IAAI,KAAKE,cAAa,KAAK,QAAQ,IAAI;AAC7D,eAAO,IAAI,IAAI,OAAO,IAAI;AAAA,IAC7B;AACH,SAAO;AACT;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA,IAAI;AAAA,CACH,CAAC,eAAe;AACf,QAAM,UAAU,MAAMG,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM5B,YAAYC,UAAS,sBAAsB,eAAe,KAAK;AAC7D,WAAK,UAAUA;AACf,WAAK,uBAAuB;AAG5B,WAAK,UAAU;AAEf,WAAK,aAAa;AAClB,UAAIA,WAAUD,SAAQ,eAAeC,WAAUD,SAAQ;AACrD,cAAM,IAAI,WAAW,4BAA4B;AACnD,UAAI,MAAM,MAAM,MAAM;AACpB,cAAM,IAAI,WAAW,yBAAyB;AAChD,WAAK,OAAOC,WAAU,IAAI;AAC1B,UAAI,MAAM,CAAA;AACV,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM;AAC7B,YAAI,KAAK,KAAK;AAChB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,aAAK,QAAQ,KAAK,IAAI,MAAO,CAAA;AAC7B,aAAK,WAAW,KAAK,IAAI,MAAO,CAAA;AAAA,MACjC;AACD,WAAK,qBAAoB;AACzB,YAAM,eAAe,KAAK,oBAAoB,aAAa;AAC3D,WAAK,cAAc,YAAY;AAC/B,UAAI,OAAO,IAAI;AACb,YAAI,aAAa;AACjB,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,eAAK,UAAU,CAAC;AAChB,eAAK,eAAe,CAAC;AACrB,gBAAM,UAAU,KAAK;AACrB,cAAI,UAAU,YAAY;AACxB,kBAAM;AACN,yBAAa;AAAA,UACd;AACD,eAAK,UAAU,CAAC;AAAA,QACjB;AAAA,MACF;AACD,MAAAC,QAAO,KAAK,OAAO,OAAO,CAAC;AAC3B,WAAK,OAAO;AACZ,WAAK,UAAU,GAAG;AAClB,WAAK,eAAe,GAAG;AACvB,WAAK,aAAa;IACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,OAAO,WAAW,MAAM,KAAK;AAC3B,YAAM,OAAO,WAAW,UAAU,aAAa,IAAI;AACnD,aAAOF,SAAQ,eAAe,MAAM,GAAG;AAAA,IACxC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,OAAO,aAAa,MAAM,KAAK;AAC7B,YAAM,MAAM,WAAW,UAAU,UAAU,IAAI;AAC/C,aAAOA,SAAQ,eAAe,CAAC,GAAG,GAAG,GAAG;AAAA,IACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWD,OAAO,eAAe,MAAM,KAAK,aAAa,GAAG,aAAa,IAAIhD,QAAO,IAAI,WAAW,MAAM;AAC5F,UAAI,EAAEgD,SAAQ,eAAe,cAAc,cAAc,cAAc,cAAcA,SAAQ,gBAAgBhD,QAAO,MAAMA,QAAO;AAC/H,cAAM,IAAI,WAAW,eAAe;AACtC,UAAIiD;AACJ,UAAI;AACJ,WAAKA,WAAU,cAAcA,YAAW;AACtC,cAAM,oBAAoBD,SAAQ,oBAAoBC,UAAS,GAAG,IAAI;AACtE,cAAM,WAAW,UAAU,aAAa,MAAMA,QAAO;AACrD,YAAI,YAAY,mBAAmB;AACjC,yBAAe;AACf;AAAA,QACD;AACD,YAAIA,YAAW;AACb,gBAAM,IAAI,WAAW,eAAe;AAAA,MACvC;AACD,iBAAW,UAAU,CAACD,SAAQ,IAAI,QAAQA,SAAQ,IAAI,UAAUA,SAAQ,IAAI,IAAI,GAAG;AACjF,YAAI,YAAY,gBAAgBA,SAAQ,oBAAoBC,UAAS,MAAM,IAAI;AAC7E,gBAAM;AAAA,MACT;AACD,UAAI,KAAK,CAAA;AACT,iBAAW,OAAO,MAAM;AACtB,mBAAW,IAAI,KAAK,UAAU,GAAG,EAAE;AACnC,mBAAW,IAAI,UAAU,IAAI,KAAK,iBAAiBA,QAAO,GAAG,EAAE;AAC/D,mBAAW9C,MAAK,IAAI,QAAS;AAC3B,aAAG,KAAKA,EAAC;AAAA,MACZ;AACD,MAAA+C,QAAO,GAAG,UAAU,YAAY;AAChC,YAAM,mBAAmBF,SAAQ,oBAAoBC,UAAS,GAAG,IAAI;AACrE,MAAAC,QAAO,GAAG,UAAU,gBAAgB;AACpC,iBAAW,GAAG,KAAK,IAAI,GAAG,mBAAmB,GAAG,MAAM,GAAG,EAAE;AAC3D,iBAAW,IAAI,IAAI,GAAG,SAAS,KAAK,GAAG,EAAE;AACzC,MAAAA,QAAO,GAAG,SAAS,KAAK,CAAC;AACzB,eAAS,UAAU,KAAK,GAAG,SAAS,kBAAkB,WAAW,MAAM;AACrE,mBAAW,SAAS,GAAG,EAAE;AAC3B,UAAI,gBAAgB,CAAA;AACpB,aAAO,cAAc,SAAS,IAAI,GAAG;AACnC,sBAAc,KAAK,CAAC;AACtB,SAAG,QAAQ,CAAC/C,IAAG,MAAM,cAAc,MAAM,CAAC,KAAKA,MAAK,KAAK,IAAI,EAAE;AAC/D,aAAO,IAAI6C,SAAQC,UAAS,KAAK,eAAejD,KAAI;AAAA,IACrD;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,UAAU,GAAG,GAAG;AACd,aAAO,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;AAAA,IAC/E;AAAA;AAAA,IAED,aAAa;AACX,aAAO,KAAK;AAAA,IACb;AAAA;AAAA;AAAA,IAGD,uBAAuB;AACrB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,aAAK,kBAAkB,GAAG,GAAG,IAAI,KAAK,CAAC;AACvC,aAAK,kBAAkB,GAAG,GAAG,IAAI,KAAK,CAAC;AAAA,MACxC;AACD,WAAK,kBAAkB,GAAG,CAAC;AAC3B,WAAK,kBAAkB,KAAK,OAAO,GAAG,CAAC;AACvC,WAAK,kBAAkB,GAAG,KAAK,OAAO,CAAC;AACvC,YAAM,cAAc,KAAK;AACzB,YAAM,WAAW,YAAY;AAC7B,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,iBAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,cAAI,EAAE,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK,WAAW,KAAK,KAAK;AACjF,iBAAK,qBAAqB,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAAA,QAC3D;AAAA,MACF;AACD,WAAK,eAAe,CAAC;AACrB,WAAK,YAAW;AAAA,IACjB;AAAA;AAAA;AAAA,IAGD,eAAeA,OAAM;AACnB,YAAM,OAAO,KAAK,qBAAqB,cAAc,IAAIA;AACzD,UAAI,MAAM;AACV,eAAS,IAAI,GAAG,IAAI,IAAI;AACtB,cAAM,OAAO,KAAK,QAAQ,KAAK;AACjC,YAAM,QAAQ,QAAQ,KAAK,OAAO;AAClC,MAAAkD,QAAO,SAAS,MAAM,CAAC;AACvB,eAAS,IAAI,GAAG,KAAK,GAAG;AACtB,aAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC9C,WAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC5C,WAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC5C,WAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC5C,eAAS,IAAI,GAAG,IAAI,IAAI;AACtB,aAAK,kBAAkB,KAAK,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AACnD,eAAS,IAAI,GAAG,IAAI,GAAG;AACrB,aAAK,kBAAkB,KAAK,OAAO,IAAI,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC9D,eAAS,IAAI,GAAG,IAAI,IAAI;AACtB,aAAK,kBAAkB,GAAG,KAAK,OAAO,KAAK,GAAG,OAAO,MAAM,CAAC,CAAC;AAC/D,WAAK,kBAAkB,GAAG,KAAK,OAAO,GAAG,IAAI;AAAA,IAC9C;AAAA;AAAA;AAAA,IAGD,cAAc;AACZ,UAAI,KAAK,UAAU;AACjB;AACF,UAAI,MAAM,KAAK;AACf,eAAS,IAAI,GAAG,IAAI,IAAI;AACtB,cAAM,OAAO,KAAK,QAAQ,MAAM;AAClC,YAAM,OAAO,KAAK,WAAW,KAAK;AAClC,MAAAA,QAAO,SAAS,MAAM,CAAC;AACvB,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,cAAM,QAAQ,OAAO,MAAM,CAAC;AAC5B,cAAM,IAAI,KAAK,OAAO,KAAK,IAAI;AAC/B,cAAM/C,KAAI,KAAK,MAAM,IAAI,CAAC;AAC1B,aAAK,kBAAkB,GAAGA,IAAG,KAAK;AAClC,aAAK,kBAAkBA,IAAG,GAAG,KAAK;AAAA,MACnC;AAAA,IACF;AAAA;AAAA;AAAA,IAGD,kBAAkB,GAAG,GAAG;AACtB,eAAS,KAAK,IAAI,MAAM,GAAG,MAAM;AAC/B,iBAAS,KAAK,IAAI,MAAM,GAAG,MAAM;AAC/B,gBAAM,OAAO,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAChD,gBAAM,KAAK,IAAI;AACf,gBAAM,KAAK,IAAI;AACf,cAAI,KAAK,MAAM,KAAK,KAAK,QAAQ,KAAK,MAAM,KAAK,KAAK;AACpD,iBAAK,kBAAkB,IAAI,IAAI,QAAQ,KAAK,QAAQ,CAAC;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA,IAGD,qBAAqB,GAAG,GAAG;AACzB,eAAS,KAAK,IAAI,MAAM,GAAG,MAAM;AAC/B,iBAAS,KAAK,IAAI,MAAM,GAAG;AACzB,eAAK,kBAAkB,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC;AAAA,MACnF;AAAA,IACF;AAAA;AAAA;AAAA,IAGD,kBAAkB,GAAG,GAAG,QAAQ;AAC9B,WAAK,QAAQ,CAAC,EAAE,CAAC,IAAI;AACrB,WAAK,WAAW,CAAC,EAAE,CAAC,IAAI;AAAA,IACzB;AAAA;AAAA;AAAA;AAAA,IAID,oBAAoB,MAAM;AACxB,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK,UAAU6C,SAAQ,oBAAoB,KAAK,GAAG;AACrD,cAAM,IAAI,WAAW,kBAAkB;AACzC,YAAM,YAAYA,SAAQ,4BAA4B,IAAI,OAAO,EAAE,GAAG;AACtE,YAAM,cAAcA,SAAQ,wBAAwB,IAAI,OAAO,EAAE,GAAG;AACpE,YAAM,eAAe,KAAK,MAAMA,SAAQ,qBAAqB,GAAG,IAAI,CAAC;AACrE,YAAM,iBAAiB,YAAY,eAAe;AAClD,YAAM,gBAAgB,KAAK,MAAM,eAAe,SAAS;AACzD,UAAI,SAAS,CAAA;AACb,YAAM,QAAQA,SAAQ,0BAA0B,WAAW;AAC3D,eAAS,IAAI,GAAGpD,KAAI,GAAG,IAAI,WAAW,KAAK;AACzC,YAAI,MAAM,KAAK,MAAMA,IAAGA,KAAI,gBAAgB,eAAe,IAAI,iBAAiB,IAAI,EAAE;AACtF,QAAAA,MAAK,IAAI;AACT,cAAM,MAAMoD,SAAQ,4BAA4B,KAAK,KAAK;AAC1D,YAAI,IAAI;AACN,cAAI,KAAK,CAAC;AACZ,eAAO,KAAK,IAAI,OAAO,GAAG,CAAC;AAAA,MAC5B;AACD,UAAI,SAAS,CAAA;AACb,eAAS,IAAI,GAAG,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK;AACzC,eAAO,QAAQ,CAAC,OAAO,MAAM;AAC3B,cAAI,KAAK,gBAAgB,eAAe,KAAK;AAC3C,mBAAO,KAAK,MAAM,CAAC,CAAC;AAAA,QAChC,CAAS;AAAA,MACF;AACD,MAAAE,QAAO,OAAO,UAAU,YAAY;AACpC,aAAO;AAAA,IACR;AAAA;AAAA;AAAA,IAGD,cAAc,MAAM;AAClB,UAAI,KAAK,UAAU,KAAK,MAAMF,SAAQ,qBAAqB,KAAK,OAAO,IAAI,CAAC;AAC1E,cAAM,IAAI,WAAW,kBAAkB;AACzC,UAAI,IAAI;AACR,eAAS,QAAQ,KAAK,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG;AACtD,YAAI,SAAS;AACX,kBAAQ;AACV,iBAAS,OAAO,GAAG,OAAO,KAAK,MAAM,QAAQ;AAC3C,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,IAAI,QAAQ;AAClB,kBAAM,UAAU,QAAQ,IAAI,MAAM;AAClC,kBAAM,IAAI,SAAS,KAAK,OAAO,IAAI,OAAO;AAC1C,gBAAI,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,GAAG;AACjD,mBAAK,QAAQ,CAAC,EAAE,CAAC,IAAI,OAAO,KAAK,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE;AACtD;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACD,MAAAE,QAAO,KAAK,KAAK,SAAS,CAAC;AAAA,IAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,UAAUlD,OAAM;AACd,UAAIA,QAAO,KAAKA,QAAO;AACrB,cAAM,IAAI,WAAW,yBAAyB;AAChD,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,cAAI;AACJ,kBAAQA,OAAI;AAAA,YACV,KAAK;AACH,wBAAU,IAAI,KAAK,KAAK;AACxB;AAAA,YACF,KAAK;AACH,uBAAS,IAAI,KAAK;AAClB;AAAA,YACF,KAAK;AACH,uBAAS,IAAI,KAAK;AAClB;AAAA,YACF,KAAK;AACH,wBAAU,IAAI,KAAK,KAAK;AACxB;AAAA,YACF,KAAK;AACH,wBAAU,KAAK,MAAM,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK;AACxD;AAAA,YACF,KAAK;AACH,uBAAS,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK;AAClC;AAAA,YACF,KAAK;AACH,wBAAU,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK;AACxC;AAAA,YACF,KAAK;AACH,yBAAW,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK;AAC1C;AAAA,YACF;AACE,oBAAM,IAAI,MAAM,aAAa;AAAA,UAChC;AACD,cAAI,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC,KAAK;AAC5B,iBAAK,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA,IAGD,kBAAkB;AAChB,UAAI,SAAS;AACb,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,YAAI,WAAW;AACf,YAAI,OAAO;AACX,YAAI,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACrC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,cAAI,KAAK,QAAQ,CAAC,EAAE,CAAC,KAAK,UAAU;AAClC;AACA,gBAAI,QAAQ;AACV,wBAAUgD,SAAQ;AAAA,qBACX,OAAO;AACd;AAAA,UACd,OAAiB;AACL,iBAAK,wBAAwB,MAAM,UAAU;AAC7C,gBAAI,CAAC;AACH,wBAAU,KAAK,2BAA2B,UAAU,IAAIA,SAAQ;AAClE,uBAAW,KAAK,QAAQ,CAAC,EAAE,CAAC;AAC5B,mBAAO;AAAA,UACR;AAAA,QACF;AACD,kBAAU,KAAK,+BAA+B,UAAU,MAAM,UAAU,IAAIA,SAAQ;AAAA,MACrF;AACD,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,YAAI,WAAW;AACf,YAAI,OAAO;AACX,YAAI,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACrC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,cAAI,KAAK,QAAQ,CAAC,EAAE,CAAC,KAAK,UAAU;AAClC;AACA,gBAAI,QAAQ;AACV,wBAAUA,SAAQ;AAAA,qBACX,OAAO;AACd;AAAA,UACd,OAAiB;AACL,iBAAK,wBAAwB,MAAM,UAAU;AAC7C,gBAAI,CAAC;AACH,wBAAU,KAAK,2BAA2B,UAAU,IAAIA,SAAQ;AAClE,uBAAW,KAAK,QAAQ,CAAC,EAAE,CAAC;AAC5B,mBAAO;AAAA,UACR;AAAA,QACF;AACD,kBAAU,KAAK,+BAA+B,UAAU,MAAM,UAAU,IAAIA,SAAQ;AAAA,MACrF;AACD,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG,KAAK;AACtC,iBAAS,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG,KAAK;AACtC,gBAAM,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;AAC/B,cAAI,SAAS,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,SAAS,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,KAAK,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC;AAC1G,sBAAUA,SAAQ;AAAA,QACrB;AAAA,MACF;AACD,UAAI,OAAO;AACX,iBAAW,OAAO,KAAK;AACrB,eAAO,IAAI,OAAO,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,IAAI,IAAI;AAC/D,YAAM,QAAQ,KAAK,OAAO,KAAK;AAC/B,YAAMpD,KAAI,KAAK,KAAK,KAAK,IAAI,OAAO,KAAK,QAAQ,EAAE,IAAI,KAAK,IAAI;AAChE,MAAAsD,QAAO,KAAKtD,MAAKA,MAAK,CAAC;AACvB,gBAAUA,KAAIoD,SAAQ;AACtB,MAAAE,QAAO,KAAK,UAAU,UAAU,OAAO;AACvC,aAAO;AAAA,IACR;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,+BAA+B;AAC7B,UAAI,KAAK,WAAW;AAClB,eAAO;WACJ;AACH,cAAM,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,IAAI;AAChD,cAAM,OAAO,KAAK,WAAW,KAAK,KAAK,KAAK,MAAM,KAAK,UAAU,IAAI,MAAM,WAAW,IAAI,EAAE,IAAI;AAChG,YAAI,SAAS,CAAC,CAAC;AACf,iBAAS,MAAM,KAAK,OAAO,GAAG,OAAO,SAAS,UAAU,OAAO;AAC7D,iBAAO,OAAO,GAAG,GAAG,GAAG;AACzB,eAAO;AAAA,MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAID,OAAO,qBAAqB,KAAK;AAC/B,UAAI,MAAMF,SAAQ,eAAe,MAAMA,SAAQ;AAC7C,cAAM,IAAI,WAAW,6BAA6B;AACpD,UAAI,UAAU,KAAK,MAAM,OAAO,MAAM;AACtC,UAAI,OAAO,GAAG;AACZ,cAAM,WAAW,KAAK,MAAM,MAAM,CAAC,IAAI;AACvC,mBAAW,KAAK,WAAW,MAAM,WAAW;AAC5C,YAAI,OAAO;AACT,oBAAU;AAAA,MACb;AACD,MAAAE,QAAO,OAAO,UAAU,UAAU,KAAK;AACvC,aAAO;AAAA,IACR;AAAA;AAAA;AAAA;AAAA,IAID,OAAO,oBAAoB,KAAK,KAAK;AACnC,aAAO,KAAK,MAAMF,SAAQ,qBAAqB,GAAG,IAAI,CAAC,IAAIA,SAAQ,wBAAwB,IAAI,OAAO,EAAE,GAAG,IAAIA,SAAQ,4BAA4B,IAAI,OAAO,EAAE,GAAG;AAAA,IACpK;AAAA;AAAA;AAAA,IAGD,OAAO,0BAA0B,QAAQ;AACvC,UAAI,SAAS,KAAK,SAAS;AACzB,cAAM,IAAI,WAAW,qBAAqB;AAC5C,UAAI,SAAS,CAAA;AACb,eAAS,IAAI,GAAG,IAAI,SAAS,GAAG;AAC9B,eAAO,KAAK,CAAC;AACf,aAAO,KAAK,CAAC;AACb,UAAI,OAAO;AACX,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,iBAAO,CAAC,IAAIA,SAAQ,oBAAoB,OAAO,CAAC,GAAG,IAAI;AACvD,cAAI,IAAI,IAAI,OAAO;AACjB,mBAAO,CAAC,KAAK,OAAO,IAAI,CAAC;AAAA,QAC5B;AACD,eAAOA,SAAQ,oBAAoB,MAAM,CAAC;AAAA,MAC3C;AACD,aAAO;AAAA,IACR;AAAA;AAAA,IAED,OAAO,4BAA4B,MAAM,SAAS;AAChD,UAAI,SAAS,QAAQ,IAAI,CAAC,MAAM,CAAC;AACjC,iBAAW7C,MAAK,MAAM;AACpB,cAAM,SAASA,KAAI,OAAO,MAAK;AAC/B,eAAO,KAAK,CAAC;AACb,gBAAQ,QAAQ,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK6C,SAAQ,oBAAoB,MAAM,MAAM,CAAC;AAAA,MACpF;AACD,aAAO;AAAA,IACR;AAAA;AAAA;AAAA,IAGD,OAAO,oBAAoB,GAAG,GAAG;AAC/B,UAAI,MAAM,KAAK,KAAK,MAAM,KAAK;AAC7B,cAAM,IAAI,WAAW,mBAAmB;AAC1C,UAAI,IAAI;AACR,eAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,YAAI,KAAK,KAAK,MAAM,KAAK;AACzB,cAAM,MAAM,IAAI,KAAK;AAAA,MACtB;AACD,MAAAE,QAAO,MAAM,KAAK,CAAC;AACnB,aAAO;AAAA,IACR;AAAA;AAAA;AAAA,IAGD,2BAA2B,YAAY;AACrC,YAAMvC,KAAI,WAAW,CAAC;AACtB,MAAAuC,QAAOvC,MAAK,KAAK,OAAO,CAAC;AACzB,YAAM,OAAOA,KAAI,KAAK,WAAW,CAAC,KAAKA,MAAK,WAAW,CAAC,KAAKA,KAAI,KAAK,WAAW,CAAC,KAAKA,MAAK,WAAW,CAAC,KAAKA;AAC7G,cAAQ,QAAQ,WAAW,CAAC,KAAKA,KAAI,KAAK,WAAW,CAAC,KAAKA,KAAI,IAAI,MAAM,QAAQ,WAAW,CAAC,KAAKA,KAAI,KAAK,WAAW,CAAC,KAAKA,KAAI,IAAI;AAAA,IACrI;AAAA;AAAA,IAED,+BAA+B,iBAAiB,kBAAkB,YAAY;AAC5E,UAAI,iBAAiB;AACnB,aAAK,wBAAwB,kBAAkB,UAAU;AACzD,2BAAmB;AAAA,MACpB;AACD,0BAAoB,KAAK;AACzB,WAAK,wBAAwB,kBAAkB,UAAU;AACzD,aAAO,KAAK,2BAA2B,UAAU;AAAA,IAClD;AAAA;AAAA,IAED,wBAAwB,kBAAkB,YAAY;AACpD,UAAI,WAAW,CAAC,KAAK;AACnB,4BAAoB,KAAK;AAC3B,iBAAW,IAAG;AACd,iBAAW,QAAQ,gBAAgB;AAAA,IACpC;AAAA,EACL;AAGE,UAAQ,cAAc;AAEtB,UAAQ,cAAc;AAEtB,UAAQ,aAAa;AACrB,UAAQ,aAAa;AACrB,UAAQ,aAAa;AACrB,UAAQ,aAAa;AACrB,UAAQ,0BAA0B;AAAA;AAAA;AAAA,IAGhC,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAElK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAEnK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAEnK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAEvK;AACE,UAAQ,8BAA8B;AAAA;AAAA;AAAA,IAGpC,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAE5I,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAErJ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAExJ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAE7J;AAEE,aAAW,SAAS;AACpB,WAAS,WAAW,KAAK,KAAK,IAAI;AAChC,QAAI,MAAM,KAAK,MAAM,MAAM,QAAQ,OAAO;AACxC,YAAM,IAAI,WAAW,oBAAoB;AAC3C,aAAS,IAAI,MAAM,GAAG,KAAK,GAAG;AAC5B,SAAG,KAAK,QAAQ,IAAI,CAAC;AAAA,EACxB;AACD,WAAS,OAAO,GAAG,GAAG;AACpB,YAAQ,MAAM,IAAI,MAAM;AAAA,EACzB;AACD,WAASuC,QAAO,MAAM;AACpB,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,iBAAiB;AAAA,EACpC;AACD,QAAM,aAAa,MAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlC,YAAY,MAAM,UAAU,SAAS;AACnC,WAAK,OAAO;AACZ,WAAK,WAAW;AAChB,WAAK,UAAU;AACf,UAAI,WAAW;AACb,cAAM,IAAI,WAAW,kBAAkB;AACzC,WAAK,UAAU,QAAQ;IACxB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,OAAO,UAAU,MAAM;AACrB,UAAI,KAAK,CAAA;AACT,iBAAWhD,MAAK;AACd,mBAAWA,IAAG,GAAG,EAAE;AACrB,aAAO,IAAIgD,YAAWA,YAAW,KAAK,MAAM,KAAK,QAAQ,EAAE;AAAA,IAC5D;AAAA;AAAA,IAED,OAAO,YAAY,QAAQ;AACzB,UAAI,CAACA,YAAW,UAAU,MAAM;AAC9B,cAAM,IAAI,WAAW,wCAAwC;AAC/D,UAAI,KAAK,CAAA;AACT,eAAS,IAAI,GAAG,IAAI,OAAO,UAAU;AACnC,cAAMxC,KAAI,KAAK,IAAI,OAAO,SAAS,GAAG,CAAC;AACvC,mBAAW,SAAS,OAAO,UAAU,GAAG,IAAIA,EAAC,GAAG,EAAE,GAAGA,KAAI,IAAI,GAAG,EAAE;AAClE,aAAKA;AAAA,MACN;AACD,aAAO,IAAIwC,YAAWA,YAAW,KAAK,SAAS,OAAO,QAAQ,EAAE;AAAA,IACjE;AAAA;AAAA;AAAA;AAAA,IAID,OAAO,iBAAiB,MAAM;AAC5B,UAAI,CAACA,YAAW,eAAe,IAAI;AACjC,cAAM,IAAI,WAAW,6DAA6D;AACpF,UAAI,KAAK,CAAA;AACT,UAAI;AACJ,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK,GAAG;AACxC,YAAI,OAAOA,YAAW,qBAAqB,QAAQ,KAAK,OAAO,CAAC,CAAC,IAAI;AACrE,gBAAQA,YAAW,qBAAqB,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC;AAClE,mBAAW,MAAM,IAAI,EAAE;AAAA,MACxB;AACD,UAAI,IAAI,KAAK;AACX,mBAAWA,YAAW,qBAAqB,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE;AAC3E,aAAO,IAAIA,YAAWA,YAAW,KAAK,cAAc,KAAK,QAAQ,EAAE;AAAA,IACpE;AAAA;AAAA;AAAA,IAGD,OAAO,aAAa,MAAM;AACxB,UAAI,QAAQ;AACV,eAAO;eACAA,YAAW,UAAU,IAAI;AAChC,eAAO,CAACA,YAAW,YAAY,IAAI,CAAC;AAAA,eAC7BA,YAAW,eAAe,IAAI;AACrC,eAAO,CAACA,YAAW,iBAAiB,IAAI,CAAC;AAAA;AAEzC,eAAO,CAACA,YAAW,UAAUA,YAAW,gBAAgB,IAAI,CAAC,CAAC;AAAA,IACjE;AAAA;AAAA;AAAA,IAGD,OAAO,QAAQ,WAAW;AACxB,UAAI,KAAK,CAAA;AACT,UAAI,YAAY;AACd,cAAM,IAAI,WAAW,mCAAmC;AAAA,eACjD,YAAY,KAAK;AACxB,mBAAW,WAAW,GAAG,EAAE;AAAA,eACpB,YAAY,KAAK,IAAI;AAC5B,mBAAW,GAAG,GAAG,EAAE;AACnB,mBAAW,WAAW,IAAI,EAAE;AAAA,MACpC,WAAiB,YAAY,KAAK;AAC1B,mBAAW,GAAG,GAAG,EAAE;AACnB,mBAAW,WAAW,IAAI,EAAE;AAAA,MAC7B;AACC,cAAM,IAAI,WAAW,mCAAmC;AAC1D,aAAO,IAAIA,YAAWA,YAAW,KAAK,KAAK,GAAG,EAAE;AAAA,IACjD;AAAA;AAAA;AAAA,IAGD,OAAO,UAAU,MAAM;AACrB,aAAOA,YAAW,cAAc,KAAK,IAAI;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA,IAID,OAAO,eAAe,MAAM;AAC1B,aAAOA,YAAW,mBAAmB,KAAK,IAAI;AAAA,IAC/C;AAAA;AAAA;AAAA,IAGD,UAAU;AACR,aAAO,KAAK,QAAQ;IACrB;AAAA;AAAA;AAAA,IAGD,OAAO,aAAa,MAAMF,UAAS;AACjC,UAAI,SAAS;AACb,iBAAW,OAAO,MAAM;AACtB,cAAM,SAAS,IAAI,KAAK,iBAAiBA,QAAO;AAChD,YAAI,IAAI,YAAY,KAAK;AACvB,iBAAO;AACT,kBAAU,IAAI,SAAS,IAAI,QAAQ;AAAA,MACpC;AACD,aAAO;AAAA,IACR;AAAA;AAAA,IAED,OAAO,gBAAgB,KAAK;AAC1B,YAAM,UAAU,GAAG;AACnB,UAAI,SAAS,CAAA;AACb,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,IAAI,OAAO,CAAC,KAAK;AACnB,iBAAO,KAAK,IAAI,WAAW,CAAC,CAAC;AAAA,aAC1B;AACH,iBAAO,KAAK,SAAS,IAAI,UAAU,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACrD,eAAK;AAAA,QACN;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACL;AAGE,aAAW,gBAAgB;AAE3B,aAAW,qBAAqB;AAGhC,aAAW,uBAAuB;AAClC,MAAI,YAAY;AAChB,aAAW,YAAY;AACzB,GAAG,cAAc,YAAY,CAAE,EAAC;AAAA,CAC/B,CAAC,eAAe;AAEf,GAAC,CAAC,YAAY;AACZ,UAAM,OAAO,MAAM,KAAK;AAAA;AAAA;AAAA,MAGtB,YAAY,SAAS,YAAY;AAC/B,aAAK,UAAU;AACf,aAAK,aAAa;AAAA,MACnB;AAAA,IACP;AAEI,SAAK,MAAM,IAAI,KAAK,GAAG,CAAC;AAExB,SAAK,SAAS,IAAI,KAAK,GAAG,CAAC;AAE3B,SAAK,WAAW,IAAI,KAAK,GAAG,CAAC;AAE7B,SAAK,OAAO,IAAI,KAAK,GAAG,CAAC;AAEzB,YAAQ,MAAM;AAAA,EAClB,GAAc,WAAW,WAAW,WAAW,SAAS,CAAA,EAAG;AAC3D,GAAG,cAAc,YAAY,CAAE,EAAC;AAAA,CAC/B,CAAC,eAAe;AAEf,GAAC,CAAC,eAAe;AACf,UAAM,QAAQ,MAAM,MAAM;AAAA;AAAA,MAExB,YAAY,UAAU,kBAAkB;AACtC,aAAK,WAAW;AAChB,aAAK,mBAAmB;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAID,iBAAiB,KAAK;AACpB,eAAO,KAAK,iBAAiB,KAAK,OAAO,MAAM,KAAK,EAAE,CAAC;AAAA,MACxD;AAAA,IACP;AAEI,UAAM,UAAU,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AACzC,UAAM,eAAe,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AAC7C,UAAM,OAAO,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACrC,UAAM,QAAQ,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACtC,UAAM,MAAM,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAElC,eAAW,OAAO;AAAA,EACtB,GAAiB,WAAW,cAAc,WAAW,YAAY,CAAA,EAAG;AACpE,GAAG,cAAc,YAAY,CAAE,EAAC;AAChC,IAAI,oBAAoB;AAGxB;AAAA;AAAA;AAAA;AAAA;AAKA,IAAI,kBAAkB;AAAA,EACpB,GAAG,kBAAkB,OAAO,IAAI;AAAA,EAChC,GAAG,kBAAkB,OAAO,IAAI;AAAA,EAChC,GAAG,kBAAkB,OAAO,IAAI;AAAA,EAChC,GAAG,kBAAkB,OAAO,IAAI;AAClC;AACA,IAAI,eAAe;AACnB,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,IAAI,wBAAwB;AAC5B,IAAI,qBAAqB;AACzB,IAAI,mBAAmB;AACvB,IAAI,sBAAsB;AAC1B,IAAI,oBAAoB;AACxB,SAAS,aAAa,SAAS,SAAS,GAAG;AACzC,QAAM,MAAM,CAAA;AACZ,UAAQ,QAAQ,SAAS,KAAK,GAAG;AAC/B,QAAI,QAAQ;AACZ,QAAI,QAAQ,SAAS,MAAM,GAAG;AAC5B,UAAI,CAAC,QAAQ,UAAU,MAAM;AAC3B,YAAI;AAAA,UACF,IAAI,QAAQ,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM;AAAA,QAC3E;AACQ,gBAAQ;AACR;AAAA,MACD;AACD,UAAI,MAAM,IAAI,SAAS,GAAG;AACxB,YAAI,CAAC,MAAM;AACT;AAAA,QACD;AACD,YAAI,UAAU,MAAM;AAClB,cAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,MAAM,SAAS,IAAI,MAAM,GAAG;AAAA,QACrE,OAAe;AACL,cAAI;AAAA,YACF,IAAI,QAAQ,MAAM,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM;AAAA,UAClF;AAAA,QACS;AACD;AAAA,MACD;AACD,UAAI,QAAQ,UAAU,MAAM;AAC1B,gBAAQ;AAAA,MACT;AAAA,IACP,CAAK;AAAA,EACL,CAAG;AACD,SAAO,IAAI,KAAK,EAAE;AACpB;AACA,SAAS,gBAAgB,SAAS,YAAY;AAC5C,SAAO,QAAQ,MAAO,EAAC,IAAI,CAAC,KAAK,MAAM;AACrC,QAAI,IAAI,WAAW,KAAK,KAAK,WAAW,IAAI,WAAW,GAAG;AACxD,aAAO;AAAA,IACR;AACD,WAAO,IAAI,IAAI,CAAC,MAAM,MAAM;AAC1B,UAAI,IAAI,WAAW,KAAK,KAAK,WAAW,IAAI,WAAW,GAAG;AACxD,eAAO;AAAA,MACR;AACD,aAAO;AAAA,IACb,CAAK;AAAA,EACL,CAAG;AACH;AACA,SAAS,iBAAiB,OAAO,MAAM,QAAQ,eAAe;AAC5D,MAAI,iBAAiB,MAAM;AACzB,WAAO;AAAA,EACR;AACD,QAAM,WAAW,MAAM,SAAS,SAAS;AACzC,QAAM,cAAc,KAAK,MAAM,OAAO,iBAAiB;AACvD,QAAM,QAAQ,WAAW;AACzB,QAAM,KAAK,cAAc,SAAS,eAAe;AACjD,QAAM,KAAK,cAAc,UAAU,eAAe;AAClD,QAAM,IAAI,cAAc,KAAK,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,cAAc,IAAI;AACjF,QAAM,IAAI,cAAc,KAAK,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,cAAc,IAAI;AACjF,QAAM,UAAU,cAAc,WAAW,OAAO,IAAI,cAAc;AAClE,MAAI,aAAa;AACjB,MAAI,cAAc,UAAU;AAC1B,QAAI,SAAS,KAAK,MAAM,CAAC;AACzB,QAAI,SAAS,KAAK,MAAM,CAAC;AACzB,QAAI,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM;AACpC,QAAI,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM;AACpC,iBAAa,EAAE,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG;EACnD;AACD,QAAM,cAAc,cAAc;AAClC,SAAO,EAAE,GAAG,GAAG,GAAG,GAAG,YAAY,SAAS;AAC5C;AACA,SAAS,cAAc,eAAe,YAAY;AAChD,MAAI,cAAc,MAAM;AACtB,WAAO,KAAK,IAAI,KAAK,MAAM,UAAU,GAAG,CAAC;AAAA,EAC1C;AACD,SAAO,gBAAgB,mBAAmB;AAC5C;AACA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG;AACD,MAAI,SAAS,MAAM,QAAQ,MAAM;AAC/B,UAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,UAAM,WAAW,OAAO,OAAO,CAAC,OAAO,MAAM;AAC3C,YAAM,KAAK,GAAG,kBAAkB,UAAU,aAAa,CAAC,CAAC;AACzD,aAAO;AAAA,IACR,GAAE,CAAE,CAAA;AACL,WAAO,kBAAkB,OAAO;AAAA,MAC9B;AAAA,MACA,gBAAgB,KAAK;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AAAA,EACG,GAAE,CAAC,OAAO,OAAO,YAAY,UAAU,CAAC;AACzC,QAAM,EAAE,OAAO,QAAQ,UAAU,4BAA4B,MAAM,QAAQ,MAAM;AAC/E,QAAI,SAAS,OAAO;AACpB,UAAM,UAAU,cAAc,eAAe,UAAU;AACvD,UAAM,YAAY,OAAO,SAAS,UAAU;AAC5C,UAAM,2BAA2B;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN;AACI,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC/B;AAAA,EACA,GAAK,CAAC,QAAQ,MAAM,eAAe,eAAe,UAAU,CAAC;AAC3D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA;AACA,IAAI,kBAAkB,WAAW;AAC/B,MAAI;AACF,QAAI,OAAM,EAAG,QAAQ,IAAI,OAAQ,CAAA;AAAA,EAClC,SAAQ,GAAG;AACV,WAAO;AAAA,EACR;AACD,SAAO;AACT;AACA,IAAI,eAAe,MAAM;AAAA,EACvB,SAAS,cAAc,OAAO,cAAc;AAC1C,UAAMvC,MAAK,OAAO;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IACD,IAAGA,KAAI,aAAa,UAAUA,KAAI;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK;AACD,UAAM,KAAK,YAAY,EAAE,UAAU,IAAI,aAAa,UAAU,IAAI,CAAC,OAAO,CAAC;AAC3E,UAAM,SAAS,iBAAiB,OAAO,SAAS,cAAc;AAC9D,UAAM,UAAU,MAAM,OAAO,IAAI;AACjC,UAAM,SAAS,MAAM,OAAO,IAAI;AAChC,UAAM,eAAe,MAAM;AAAA,MACzB,CAAC,SAAS;AACR,gBAAQ,UAAU;AAClB,YAAI,OAAO,iBAAiB,YAAY;AACtC,uBAAa,IAAI;AAAA,QAClB,WAAU,cAAc;AACvB,uBAAa,UAAU;AAAA,QACxB;AAAA,MACF;AAAA,MACD,CAAC,YAAY;AAAA,IACnB;AACI,UAAM,CAAC,aAAa,gBAAgB,IAAI,MAAM,SAAS,KAAK;AAC5D,UAAM,EAAE,QAAQ,OAAO,UAAU,wBAAuB,IAAK,UAAU;AAAA,MACrE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK;AACD,UAAM,UAAU,MAAM;AACpB,UAAI,QAAQ,WAAW,MAAM;AAC3B,cAAM,SAAS,QAAQ;AACvB,cAAM,MAAM,OAAO,WAAW,IAAI;AAClC,YAAI,CAAC,KAAK;AACR;AAAA,QACD;AACD,YAAI,cAAc;AAClB,cAAM,QAAQ,OAAO;AACrB,cAAM,oBAAoB,2BAA2B,QAAQ,UAAU,QAAQ,MAAM,YAAY,MAAM,kBAAkB,KAAK,MAAM,iBAAiB;AACrJ,YAAI,mBAAmB;AACrB,cAAI,wBAAwB,cAAc,MAAM;AAC9C,0BAAc;AAAA,cACZ;AAAA,cACA,wBAAwB;AAAA,YACtC;AAAA,UACW;AAAA,QACF;AACD,cAAM,aAAa,OAAO,oBAAoB;AAC9C,eAAO,SAAS,OAAO,QAAQ,OAAO;AACtC,cAAM,QAAQ,OAAO,WAAW;AAChC,YAAI,MAAM,OAAO,KAAK;AACtB,YAAI,YAAY;AAChB,YAAI,SAAS,GAAG,GAAG,UAAU,QAAQ;AACrC,YAAI,YAAY;AAChB,YAAI,iBAAiB;AACnB,cAAI,KAAK,IAAI,OAAO,aAAa,aAAa,MAAM,CAAC,CAAC;AAAA,QAChE,OAAe;AACL,gBAAM,QAAQ,SAAS,KAAK,KAAK;AAC/B,gBAAI,QAAQ,SAAS,MAAM,KAAK;AAC9B,kBAAI,MAAM;AACR,oBAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ,GAAG,CAAC;AAAA,cAC9C;AAAA,YACf,CAAa;AAAA,UACb,CAAW;AAAA,QACF;AACD,YAAI,yBAAyB;AAC3B,cAAI,cAAc,wBAAwB;AAAA,QAC3C;AACD,YAAI,mBAAmB;AACrB,cAAI;AAAA,YACF;AAAA,YACA,wBAAwB,IAAI;AAAA,YAC5B,wBAAwB,IAAI;AAAA,YAC5B,wBAAwB;AAAA,YACxB,wBAAwB;AAAA,UACpC;AAAA,QACS;AAAA,MACF;AAAA,IACP,CAAK;AACD,UAAM,UAAU,MAAM;AACpB,uBAAiB,KAAK;AAAA,IAC5B,GAAO,CAAC,MAAM,CAAC;AACX,UAAM,cAAcqC,gBAAe,EAAE,QAAQ,MAAM,OAAO,QAAQ,KAAK;AACvE,QAAI,MAAM;AACV,QAAI,UAAU,MAAM;AAClB,YAAsB,sBAAM;AAAA,QAC1B;AAAA,QACA;AAAA,UACE,KAAK;AAAA,UACL,KAAK;AAAA,UACL,OAAO,EAAE,SAAS,OAAQ;AAAA,UAC1B,QAAQ,MAAM;AACZ,6BAAiB,IAAI;AAAA,UACtB;AAAA,UACD,KAAK;AAAA,UACL,aAAa,2BAA2B,OAAO,SAAS,wBAAwB;AAAA,QACjF;AAAA,MACT;AAAA,IACK;AACD,WAAuB,sBAAM,cAAc,MAAM,UAAU,MAAsB,sBAAM;AAAA,MACrF;AAAA,MACAA,gBAAe;AAAA,QACb,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,KAAK;AAAA,QACL,MAAM;AAAA,MACP,GAAE,UAAU;AAAA,IACd,GAAE,GAAG;AAAA,EACP;AACH;AACA,aAAa,cAAc;AAC3B,IAAI,YAAY,MAAM;AAAA,EACpB,SAAS,WAAW,OAAO,cAAc;AACvC,UAAMrC,MAAK,OAAO;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,IAAGA,KAAI,aAAa,UAAUA,KAAI;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK;AACD,UAAM,EAAE,QAAQ,OAAO,UAAU,wBAAuB,IAAK,UAAU;AAAA,MACrE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACN,CAAK;AACD,QAAI,cAAc;AAClB,QAAI,QAAQ;AACZ,QAAI,iBAAiB,QAAQ,2BAA2B,MAAM;AAC5D,UAAI,wBAAwB,cAAc,MAAM;AAC9C,sBAAc;AAAA,UACZ;AAAA,UACA,wBAAwB;AAAA,QAClC;AAAA,MACO;AACD,cAAwB,sBAAM;AAAA,QAC5B;AAAA,QACA;AAAA,UACE,MAAM,cAAc;AAAA,UACpB,QAAQ,wBAAwB;AAAA,UAChC,OAAO,wBAAwB;AAAA,UAC/B,GAAG,wBAAwB,IAAI;AAAA,UAC/B,GAAG,wBAAwB,IAAI;AAAA,UAC/B,qBAAqB;AAAA,UACrB,SAAS,wBAAwB;AAAA,UACjC,aAAa,wBAAwB;AAAA,QACtC;AAAA,MACT;AAAA,IACK;AACD,UAAM,SAAS,aAAa,aAAa,MAAM;AAC/C,WAAuB,sBAAM;AAAA,MAC3B;AAAA,MACAqC,gBAAe;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS,OAAO,QAAQ,IAAI,QAAQ;AAAA,QACpC,KAAK;AAAA,QACL,MAAM;AAAA,MACP,GAAE,UAAU;AAAA,MACb,CAAC,CAAC,SAAyB,sBAAM,cAAc,SAAS,MAAM,KAAK;AAAA,MACnD,sBAAM;AAAA,QACpB;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,GAAG,SAAS,QAAQ,IAAI,QAAQ;AAAA,UAChC,gBAAgB;AAAA,QACjB;AAAA,MACF;AAAA,MACe,sBAAM,cAAc,QAAQ,EAAE,MAAM,SAAS,GAAG,QAAQ,gBAAgB,cAAc;AAAA,MACtG;AAAA,IACN;AAAA,EACG;AACH;AACA,UAAU,cAAc;ACrmCxB,MAAM,SAAS,CAAC;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AACT,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAE3C,YAAU,MAAM;AACV,QAAA,CAAC,iBAAiB,kBAAkB,yBAAyB;AAC/D,iBAAW,+CAA+C;AAC1D;AAAA,IACF;AAEI,QAAA;AACE,UAAA;AAGJ,cAAQ,SAAS;AAAA,QACf,KAAK;AACH,cAAI,aAAa,OAAO;AAER,0BAAA,0BAA0B,aAAa,WAAW,MAAM;AAAA,UAAA,OACjE;AAES,0BAAA;AAAA,UAChB;AACA;AAAA,QAEF,KAAK;AAEW,wBAAA,cAAc,aAAa,WAAW,KAAK,MAAM,WAAW,MAAM,IAAI,GAAO,CAAC;AAC5F;AAAA,QAEF,KAAK;AAEH,cAAI,aAAa,OAAO;AACtB,0BAAc,YAAY,aAAa,aAAa,aAAa,MAAM,CAAC;AAAA,UAAA,OACnE;AAEC,kBAAA,eAAe,2BAA2B,UAAU,KAAK;AAC/D,gBAAI,cAAc;AACF,4BAAA,YAAY,YAAY,qBAAqB,aAAa,YAAY,sBAAsB,QAAQ,QAAQ,CAAC;AAAA,YAAA,OACtH;AACS,4BAAA;AAAA,YAChB;AAAA,UACF;AACA;AAAA,QAEF,KAAK;AAAA,QACL;AACE,cAAI,aAAa,OAAO;AAEtB,0BAAc,YAAY,aAAa,YAAY,aAAa,MAAM,CAAC;AAAA,UAAA,OAClE;AAEC,kBAAA,eAAe,2BAA2B,UAAU,UAAU;AACpE,gBAAI,cAAc;AACF,4BAAA,YAAY,YAAY,qBAAqB,aAAa,YAAY,sBAAsB,QAAQ,QAAQ,CAAC;AAAA,YAAA,OACtH;AACS,4BAAA;AAAA,YAChB;AAAA,UACF;AACA;AAAA,MACJ;AAEA,gBAAU,WAAW;AACrB,iBAAW,IAAI;AAAA,aACR,KAAK;AACJ,cAAA,MAAM,6BAA6B,GAAG;AAC9C,iBAAW,kCAAkC;AAAA,IAC/C;AAAA,KACC,CAAC,eAAe,QAAQ,UAAU,OAAO,CAAC;AAGvC,QAAA,6BAA6B,CAACK,WAAUC,aAAY;;AACxD,UAAM,iBAAiB;AAAA,MACrB,UAAU;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,MACA,KAAK;AAAA,QACH,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACJ,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IAAA;AAGF,aAAO3C,MAAA,eAAe2C,QAAO,MAAtB,gBAAA3C,IAA0B0C,eAAa;AAAA,EAAA;AAI1C,QAAA,wBAAwB,CAACE,SAAQF,cAAa;AAClD,UAAM,WAAWA,cAAa,UAAUA,cAAa,SAAS,IAAI;AAC3D,WAAA,KAAK,MAAM,WAAWE,OAAM,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC,EAAE,SAAS;AAAA,EAAA;AAIpE,QAAA,eAAe,CAACA,YAAW;AAC/B,WAAO,KAAK,MAAM,WAAWA,OAAM,IAAI,IAAI,EAAE;EAAS;AAIlD,QAAA,wBAAwB,CAACD,aAAY;AACzC,UAAM/C,SAAQ;AAAA,MACZ,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAEL,WAAAA,OAAM+C,QAAO,KAAKA;AAAAA,EAAA;AAIrB,QAAA,uBAAuB,CAACA,aAAY;AACxC,UAAM,cAAc;AAAA,MAClB,UAAU,CAAC,YAAY,gBAAgB,iBAAiB;AAAA,MACxD,KAAK,CAAC,YAAY,gBAAgB,SAAS;AAAA,MAC3C,MAAM,CAAC,YAAY,cAAc;AAAA,MACjC,UAAU,CAAC,eAAe,eAAe;AAAA,IAAA;AAE3C,WAAO,YAAYA,QAAO,KAAK,CAAC,YAAY,cAAc;AAAA,EAAA;AAI1D,SAAAE,kCAAA,KAAC,OAAI,EAAA,WAAU,8BACZ,UAAA;AAAA,IACC,UAAAA,kCAAA,KAAC,OAAI,EAAA,WAAU,2DACb,UAAA;AAAA,MAACd,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,wBAAuB,MAAK,QAAO,SAAQ,aAAY,QAAO,gBAC9G,UAACA,kCAAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,uIAAA,CAAuI,EAC9M,CAAA;AAAA,MACCA,kCAAA,IAAA,KAAA,EAAE,WAAU,eAAe,UAAQ,SAAA;AAAA,IAAA,GACtC,IAEAA,kCAAA,IAAC,OAAI,EAAA,WAAU,iDACZ,UACC,UAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,SAAS,UAAU,SAAS,YAAY;AAAA,QACxC,SAAS,UAAU,SAAS,YAAY;AAAA,QACxC,OAAM;AAAA,QACN,eAAe;AAAA,MAAA;AAAA,IAAA,GAGrB;AAAA,IAGFc,kCAAAA,KAAC,OAAI,EAAA,WAAU,0CACb,UAAA;AAAA,MAACA,kCAAAA,KAAA,KAAA,EAAE,WAAU,gEACX,UAAA;AAAA,QAACd,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,gBAAe,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACtG,UAACA,kCAAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,4EAAA,CAA4E,EACnJ,CAAA;AAAA,QAAM;AAAA,QACY;AAAA,MAAA,GACpB;AAAA,MACAc,kCAAAA,KAAC,KAAE,EAAA,WAAU,8BAA6B,UAAA;AAAA,QAAA;AAAA,QACxB,sBAAsB,OAAO;AAAA,QAAE;AAAA,MAAA,GACjD;AAAA,IAAA,GACF;AAAA,IAGAA,kCAAAA,KAAC,OAAI,EAAA,WAAU,yCACb,UAAA;AAAA,MAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,QAACd,kCAAA,IAAA,QAAA,EAAK,WAAU,qCAAoC,UAAc,kBAAA;AAAA,QAClEc,kCAAAA,KAAC,QAAK,EAAA,WAAU,oCAAoC,UAAA;AAAA,UAAA;AAAA,UAAO;AAAA,UAAE;AAAA,QAAA,GAAS;AAAA,MAAA,GACxE;AAAA,MACAA,kCAAAA,KAAC,OAAI,EAAA,WAAU,0CACb,UAAA;AAAA,QAACd,kCAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAQ,YAAA;AAAA,8CAC/C,QAAK,EAAA,WAAU,qCAAqC,UAAA,sBAAsB,OAAO,GAAE;AAAA,MAAA,GACtF;AAAA,IAAA,GACF;AAAA,IAGC,CAAC,WACCc,kCAAAA,KAAA,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAACd,kCAAA,IAAA,KAAA,EAAE,WAAU,0CAAyC,UAEtD,2BAAA;AAAA,MACAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAAI,WAAU;AAAA,UACV,SAAS,MAAA;;AAAM,oBAAA/B,MAAA,UAAU,cAAV,gBAAAA,IAAqB,UAAU;AAAA;AAAA,UAC9C,OAAM;AAAA,UACR,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA,GACF;AAAA,0CAID,OAAI,EAAA,WAAU,UACb,UAAC6C,kCAAA,KAAA,OAAA,EAAI,WAAU,iDACb,UAAA;AAAA,MAACA,kCAAAA,KAAA,MAAA,EAAG,WAAU,4DACZ,UAAA;AAAA,QAACd,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,gBAAe,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACtG,UAACA,kCAAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,4DAAA,CAA4D,EACnI,CAAA;AAAA,QAAM;AAAA,MAAA,GAER;AAAA,MACAc,kCAAAA,KAAC,MAAG,EAAA,WAAU,mCACZ,UAAA;AAAA,QAAAA,uCAAC,MAAG,EAAA,UAAA;AAAA,UAAA;AAAA,UAAiC,qBAAqB,OAAO,EAAE,KAAK,IAAI;AAAA,UAAE;AAAA,QAAA,GAAC;AAAA,QAC/Ed,kCAAAA,IAAC,QAAG,UAAoD,uDAAA,CAAA;AAAA,+CACvD,MAAG,EAAA,UAAA;AAAA,UAAA;AAAA,iDAAiB,UAAQ,EAAA,UAAA;AAAA,YAAA;AAAA,YAAO;AAAA,YAAE;AAAA,UAAA,GAAS;AAAA,UAAS;AAAA,UAAK,sBAAsB,OAAO;AAAA,UAAE;AAAA,QAAA,GAAQ;AAAA,QACpGA,kCAAAA,IAAC,QAAG,UAA6D,gEAAA,CAAA;AAAA,MAAA,GACnE;AAAA,4CAEC,OAAI,EAAA,WAAU,0DACb,UAACc,kCAAA,KAAA,KAAA,EAAE,WAAU,2BACX,UAAA;AAAA,QAAAd,kCAAAA,IAAC,YAAO,UAAU,aAAA,CAAA;AAAA,QAAS;AAAA,QAAmD,sBAAsB,OAAO;AAAA,QAAE;AAAA,MAAA,EAAA,CAE/G,EACF,CAAA;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;AC3NA,MAAM,gBAAgB,CAAC,EAAE,QAAQ,SAAS,QAAQ,cAAc;AAE9D,QAAM,aAAa,MAAM;AACvB,YAAQ,QAAQ;AAAA,MACd,KAAK;AAED,eAAAA,kCAAA,IAAC,OAAI,EAAA,WAAU,oFAAoF,CAAA;AAAA,MAEvG,KAAK;AAED,eAAAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,wEACb,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,QAAO;AAAA,YACP,aAAa;AAAA,YAEb,gDAAC,QAAK,EAAA,eAAc,SAAQ,gBAAe,SAAQ,GAAE,kBAAiB;AAAA,UAAA;AAAA,QAE1E,EAAA,CAAA;AAAA,MAEJ,KAAK;AAED,eAAAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,sEACb,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,QAAO;AAAA,YACP,aAAa;AAAA,YAEb,gDAAC,QAAK,EAAA,eAAc,SAAQ,gBAAe,SAAQ,GAAE,wBAAuB;AAAA,UAAA;AAAA,QAEhF,EAAA,CAAA;AAAA,MAEJ;AACS,eAAA;AAAA,IACX;AAAA,EAAA;AAIF,QAAM,iBAAiB,MAAM;AAC3B,YAAQ,QAAQ;AAAA,MACd,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EAAA;AAIF,QAAM,oBAAoB,MAAM;AAC9B,YAAQ,QAAQ;AAAA,MACd,KAAK;AACI,eAAA,UAAU,SAAS,kBAAkB;AAAA,MAC9C,KAAK;AACI,eAAA,UAAU,SAAS,mBAAmB;AAAA,MAC/C,KAAK;AACI,eAAA,UAAU,SAAS,iBAAiB;AAAA,MAC7C;AACS,eAAA,UAAU,SAAS,kBAAkB;AAAA,IAChD;AAAA,EAAA;AAIA,SAAAc,kCAAA,KAAC,OAAI,EAAA,WAAU,kDACb,UAAA;AAAA,IAAAd,kCAAA,IAAC,OAAI,EAAA,WAAU,QAAQ,UAAA,WAAA,GAAa;AAAA,IACpCA,kCAAAA,IAAC,MAAG,EAAA,WAAW,0BAA0B,UAAU,SAAS,eAAe,eAAe,IACvF,UAAA,eACH,EAAA,CAAA;AAAA,0CACC,KAAE,EAAA,WAAW,eAAe,kBAAkB,CAAC,IAAK,UAAQ,SAAA;AAAA,IAE5D,WAAW,gBACVA,kCAAA,IAAC,OAAI,EAAA,WAAW,gBAAgB,UAAU,SAAS,kBAAkB,eAAe,IAAI,UAExF,gEAAA,CAAA;AAAA,IAGD,WAAW,aACTA,kCAAAA,IAAA,OAAA,EAAI,WAAW,oBAAoB,UAAU,SAAS,gBAAgB,aAAa,IAClF,UAACA,sCAAA,KAAA,EAAE,WAAW,WAAW,UAAU,SAAS,kBAAkB,eAAe,IAAI,UAAA,yFAAA,CAEjF,EACF,CAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;AC7FM,MAAA,iBAAiB,CAAC,EAAE,UAAU,UAAU,QAAQ,SAAS,oBAAoB,CAAA,QAAS;AAC1F,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,cAAc,QAAQ;AAC7E,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,CAAE,CAAA;AAC3D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAE9C,YAAU,MAAM;AACd,wBAAoB,eAAe;AAAA,EACrC,GAAG,CAAE,CAAA;AAGL,QAAM,WAAW;AAAA,IACf;AAAA,MACE,IAAI,cAAc;AAAA,MAClB,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,IAAI,cAAc;AAAA,MAClB,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,IAAI,cAAc;AAAA,MAClB,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,IAAI,cAAc;AAAA,MAClB,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EAAA;AAII,QAAA,8BAA8B,CAAC,YAAY;AAC/C,UAAM,UAAU,CAAA;AAEhB,YAAQ,SAAS;AAAA,MACf,KAAK,cAAc;AACT,gBAAA;AAAA,UACN;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,QAAA;AAEF;AAAA,MAEF,KAAK,cAAc;AACT,gBAAA;AAAA,UACN;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,QAAA;AAEF;AAAA,MAEF,KAAK,cAAc;AACT,gBAAA;AAAA,UACN;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,QAAA;AAEF;AAAA,MAEF,KAAK,cAAc;AACT,gBAAA;AAAA,UACN;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,SAAS,cAAc;AAAA,UACzB;AAAA,QAAA;AAEF;AAAA,IAIJ;AAEO,WAAA;AAAA,EAAA;AAGH,QAAA,sBAAsB,CAAC,cAAc;AACzC,uBAAmB,SAAS;AAC5B,gBAAY,KAAK;AAGb,SAAA,qCAAU,aAAY,WAAW;AACnC,eAAS,IAAI;AAAA,IACf;AAAA,EAAA;AAGI,QAAA,4BAA4B,CAAC,WAAW;;AACnC,aAAA;AAAA,MACP,UAAU,OAAO;AAAA,MACjB,SAAS;AAAA,MACT,cAAa/B,MAAA,aAAa,OAAO,EAAE,MAAtB,gBAAAA,IAA0B;AAAA,MACvC;AAAA,IAAA,CACD;AAAA,EAAA;AAGG,QAAA,mBAAmB,4BAA4B,eAAe;AACpE,QAAM,iBAAiB,WAAW,mBAAmB,iBAAiB,MAAM,GAAG,CAAC;AAGhF,WAAS,kBAAkB,SAAS;AAClC,YAAQ,SAAS;AAAA,MACf,KAAK,cAAc;AAAA,MACnB,KAAK,cAAc;AACjB,eAAO,aAAa;AAAA,MACtB,KAAK,cAAc;AACjB,eAAO,aAAa;AAAA,MACtB,KAAK,cAAc;AACjB,eAAO,aAAa;AAAA,MACtB;AACE,eAAO,aAAa;AAAA,IACxB;AAAA,EACF;AAEA,WAAS,sBAAsB,SAAS;AAChC,UAAA,SAAS,kBAAkB,OAAO;AAClC,UAAA,cAAc,iBAAiB,MAAM;AAE3C,UAAM,cAAc;AAAA,MAClB,CAAC,aAAa,QAAQ,GAAG;AAAA,MACzB,CAAC,aAAa,QAAQ,GAAG;AAAA,MACzB,CAAC,aAAa,YAAY,GAAG;AAAA,MAC7B,CAAC,aAAa,IAAI,GAAG;AAAA,IAAA;AAGhB,WAAA,cACH,GAAG,YAAY,MAAM,CAAC,6BACtB,GAAG,YAAY,MAAM,CAAC;AAAA,EAC5B;AAEA,gDACG,OACC,EAAA,UAAA;AAAA,IAAC+B,kCAAAA,IAAA,MAAA,EAAG,WAAW,4BAA4B,UAAU,SAAS,eAAe,eAAe,IAAI,UAEhG,wBAAA,CAAA;AAAA,IAGAc,kCAAAA,KAAC,OAAI,EAAA,WAAU,QACb,UAAA;AAAA,MAACd,kCAAAA,IAAA,SAAA,EAAM,WAAW,kCAAkC,UAAU,SAAS,eAAe,eAAe,IAAI,UAEzG,qBAAA,CAAA;AAAA,MACAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,oBAAoB,EAAE,OAAO,KAAK;AAAA,UACnD,WAAW,kDACT,UAAU,SACN,kEACA,+DACN;AAAA,UAEC,mBACE,OAAO,CAAA,YAAW,kBAAkB,WAAW,KAAK,kBAAkB,SAAS,QAAQ,EAAE,CAAC,EAC1F,IAAI,CAAC,mDACH,UAAwB,EAAA,OAAO,QAAQ,IACrC,UAAA;AAAA,YAAQ,QAAA;AAAA,YAAK;AAAA,YAAI,QAAQ;AAAA,UAAA,KADf,QAAQ,EAErB,CACD;AAAA,QAAA;AAAA,MACL;AAAA,IAAA,GACF;AAAA,IAGAc,kCAAAA,KAAC,OAAI,EAAA,WAAU,QACb,UAAA;AAAA,MAACd,kCAAAA,IAAA,SAAA,EAAM,WAAW,kCAAkC,UAAU,SAAS,eAAe,eAAe,IAAI,UAEzG,wBAAA,CAAA;AAAA,4CAEC,OAAI,EAAA,WAAU,+BACZ,UAAe,eAAA,IAAI,CAAC,WACnBA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,SAAS,MAAM,0BAA0B,MAAM;AAAA,UAC/C,WAAW,wDACT,qCAAU,cAAa,OAAO,OAAM,qCAAU,aAAY,kBACtD,UAAU,SACR,0EACA,sEACF,UAAU,SACV,wEACA,iEACN;AAAA,UAEA,UAAAc,kCAAA,KAAC,OAAI,EAAA,WAAU,0CACb,UAAA;AAAA,YAAAd,kCAAA,IAAC,OAAI,EAAA,WAAU,iGACb,UAAAA,kCAAAA,IAAC,OAAI,EAAA,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,WAAU,UAAU,CAAA,GAC/D;AAAA,mDACC,OACC,EAAA,UAAA;AAAA,cAACA,kCAAAA,IAAA,MAAA,EAAG,WAAW,uBAAuB,UAAU,SAAS,eAAe,eAAe,IACpF,UAAA,OAAO,KACV,CAAA;AAAA,cACAA,kCAAAA,IAAC,KAAE,EAAA,WAAW,WAAW,UAAU,SAAS,kBAAkB,eAAe,IAC1E,UAAA,OAAO,YACV,CAAA;AAAA,YAAA,GACF;AAAA,aACC,qCAAU,cAAa,OAAO,OAAM,qCAAU,aAAY,mBACzDA,kCAAAA,IAAC,OAAI,EAAA,WAAU,QACb,UAAAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,WAAU;AAAA,gBACV,SAAQ;AAAA,gBACR,MAAK;AAAA,gBAEL,UAAAA,kCAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,UAAS;AAAA,oBACT,GAAE;AAAA,oBACF,UAAS;AAAA,kBAAA;AAAA,gBACX;AAAA,cAAA;AAAA,YAAA,GAEJ;AAAA,UAAA,GAEJ;AAAA,QAAA;AAAA,QAxCK,GAAG,OAAO,EAAE,IAAI,OAAO,OAAO;AAAA,MA0CtC,CAAA,GACH;AAAA,MAGC,iBAAiB,SAAS,KACzBA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAM,YAAY,CAAC,QAAQ;AAAA,UACpC,WAAW,qEACT,UAAU,SACN,gDACA,6CACN;AAAA,UAEC,UAAW,WAAA,cAAc,cAAc,iBAAiB,SAAS,CAAC;AAAA,QAAA;AAAA,MACrE;AAAA,IAAA,GAEJ;AAAA,IAGCA,kCAAA,IAAA,OAAA,EAAI,WAAW,0BACd,UAAU,SAAS,8BAA8B,0BACnD,IACE,UAAAc,uCAAC,OAAI,EAAA,WAAU,qBACb,UAAA;AAAA,MAACd,kCAAAA,IAAA,OAAA,EAAI,WAAW,6BACd,iBAAiB,kBAAkB,eAAe,CAAC,IAAI,iBAAiB,YAC1E,GAAI,CAAA;AAAA,4CACH,QAAK,EAAA,WAAU,WACb,UAAA,sBAAsB,eAAe,GACxC;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,EACF,EAAA,CAAA;AAEJ;ACpXA,MAAe,OAAA;ACQf,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,oBAAoB,CAAC;AAAA,EACrB,mBAAmB,CAAC;AAAA,EACpB,mBAAmB,CAAC;AAAA,EACpB,OAAO;AAAA,EACP,0BAA0B,CAAC;AAAA,EAC3B,QAAQ;AACV,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,QAAQ;AAGvD,QAAM,6BAA6B,MAAM;AACvC,QAAI,CAAC;AAA8B,aAAA;AAE7B,UAAA,iBAAiB,wBAAwB,sBAAsB,OAAO;AAC5E,QAAI,gBAAgB;AACX,aAAA;AAAA,IACT;AAGA,QAAI,mCAAS,iBAAiB;AAC5B,aAAO,QAAQ;AAAA,IACjB;AAEO,WAAA;AAAA,EAAA;AAIH,QAAA,eAAe,CAAC,WAAW;AAC/B,WAAO,WAAW,MAAM,EAAE,QAAQ,CAAC;AAAA,EAAA;AAG/B,QAAA,wBAAwB,CAAC,SAAS;AACtC,QAAI,CAAC;AAAa,aAAA;AAClB,QAAI,KAAK,UAAU;AAAW,aAAA;AACvB,WAAA,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;AAAA,EAAA;AAG1C,QAAA,wBAAwB,CAAC,YAAY;AACzC,UAAMnC,SAAQ;AAAA,MACZ,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAEL,WAAAA,OAAM,OAAO,KAAK;AAAA,EAAA;AAGrB,QAAA,uBAAuB,CAAC,eAAe;AAC3C,UAAMA,SAAQ;AAAA,MACZ,CAAC,aAAa,QAAQ,GAAG;AAAA,MACzB,CAAC,aAAa,QAAQ,GAAG;AAAA,MACzB,CAAC,aAAa,YAAY,GAAG;AAAA,MAC7B,CAAC,aAAa,IAAI,GAAG;AAAA,IAAA;AAEhB,WAAAA,OAAM,UAAU,KAAK;AAAA,EAAA;AAGxB,QAAA,gBAAgB,CAAC,eAAe;AACpC,UAAM,QAAQ;AAAA,MACZ,CAAC,aAAa,QAAQ,GAAG;AAAA,MACzB,CAAC,aAAa,QAAQ,GAAG;AAAA,MACzB,CAAC,aAAa,YAAY,GAAG;AAAA,MAC7B,CAAC,aAAa,IAAI,GAAG;AAAA,IAAA;AAEhB,WAAA,MAAM,UAAU,KAAK;AAAA,EAAA;AAG9B,MAAI,CAAC;AAAe,WAAA;AAGlB,SAAAmC,kCAAAA,IAAC,OAAI,EAAA,WAAU,kDACb,UAAAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,qDACb,UAAAc,kCAAA,KAAC,OAAI,EAAA,WAAU,oFAEb,UAAA;AAAA,IAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,MAAAd,sCAAC,SAAI,WAAU,qBACb,UAACA,kCAAAA,IAAA,MAAA,EAAG,WAAU,mCACZ,UAAAA,kCAAA,IAAC,OAAI,EAAA,KAAK,MAAM,WAAU,QAAO,KAAI,eAAA,CAAe,EACtD,CAAA,GACF;AAAA,MACAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UAEV,UAAAA,kCAAAA,IAAC,SAAI,OAAM,8BAA6B,WAAU,WAAU,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACjG,UAACA,kCAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,uBAAA,CAAuB,EAC9F,CAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GACF;AAAA,IAGAc,kCAAAA,KAAC,OAAI,EAAA,WAAU,oCACZ,UAAA;AAAA,MACC,WAAAA,kCAAA,KAAC,OAAI,EAAA,WAAU,uBACb,UAAA;AAAA,QAACA,kCAAAA,KAAA,KAAA,EAAE,WAAU,uCAAsC,UAAA;AAAA,UAAA;AAAA,UAC3C;AAAA,QAAA,GACR;AAAA,QACAA,kCAAAA,KAAC,OAAI,EAAA,WAAU,sEACb,UAAA;AAAA,UAACd,kCAAA,IAAA,QAAA,EAAK,WAAU,6BAA4B,UAE5C,WAAA;AAAA,UACAc,kCAAAA,KAAC,QAAK,EAAA,WAAU,oCAAmC,UAAA;AAAA,YAAA;AAAA,YAC/C,aAAa,QAAQ,eAAe,QAAQ,MAAM;AAAA,UAAA,GACtD;AAAA,QAAA,GACF;AAAA,8CACC,OAAI,EAAA,WAAU,2BACb,UAACA,kCAAA,KAAA,QAAA,EAAK,WAAU,iBAAgB,UAAA;AAAA,UAAA;AAAA,UACjB,QAAQ,KAAK,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI;AAAA,UAAG;AAAA,QAAA,EAAA,CACxD,EACF,CAAA;AAAA,MAAA,GACF;AAAA,MAID,SACCd,kCAAA,IAAC,OAAI,EAAA,WAAU,mBACb,UAAAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AACb,oBAAQ,IAAI,oBAAoB;AACxB,oBAAA,IAAI,iBAAiB,IAAI;AACzB,oBAAA,IAAI,mBAAmB,qBAAqB;AAC5C,oBAAA,IAAI,sBAAsB,gBAAgB;AAC3B;UACzB;AAAA,UACA,WAAU;AAAA,UACX,UAAA;AAAA,QAAA;AAAA,MAAA,GAGH;AAAA,MAID,SAAS,qBACRc,kCAAAA,KAAC,OACC,EAAA,UAAA;AAAA,QAAAd,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,UAAU;AAAA,YACV,UAAU;AAAA,YACV;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAGC,yBACCA,kCAAA,IAAC,OAAI,EAAA,WAAU,QACb,UAAAc,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AACb,sBAAQ,IAAI,uDAAuD;AACnE,oCAAsB,qBAAqB;AAAA,YAC7C;AAAA,YACA,WAAU;AAAA,YACV,UAAU,CAAC;AAAA,YACZ,UAAA;AAAA,cAAA;AAAA,cACe,sBAAsB;AAAA,cAAS;AAAA,cAAK,sBAAsB,sBAAsB,OAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAEzG;AAAA,MAAA,GAEJ;AAAA,MAID,SAAS,aAAa,yBAAyB,kDAC7C,OACC,EAAA,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,UAACd,kCAAA,IAAA,MAAA,EAAG,WAAU,0CAAyC,UAEvD,mBAAA;AAAA,UACAc,kCAAAA,KAAC,OAAI,EAAA,WAAU,aACb,UAAA;AAAA,YAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,cAACd,kCAAA,IAAA,QAAA,EAAK,WAAU,gCAA+B,UAAS,aAAA;AAAA,cACvDA,kCAAA,IAAA,QAAA,EAAK,WAAU,eAAe,gCAAsB,UAAS;AAAA,YAAA,GAChE;AAAA,YACAc,kCAAAA,KAAC,OAAI,EAAA,WAAU,wBACb,UAAA;AAAA,cAACd,kCAAA,IAAA,QAAA,EAAK,WAAU,gCAA+B,UAAQ,YAAA;AAAA,oDACtD,QAAK,EAAA,WAAU,eAAe,UAAsB,sBAAA,sBAAsB,OAAO,GAAE;AAAA,YAAA,GACtF;AAAA,YACAc,kCAAAA,KAAC,OAAI,EAAA,WAAU,wBACb,UAAA;AAAA,cAACd,kCAAA,IAAA,QAAA,EAAK,WAAU,gCAA+B,UAAI,QAAA;AAAA,cAClDA,kCAAA,IAAA,QAAA,EAAK,WAAU,eAAc,UAAK,SAAA;AAAA,YAAA,GACrC;AAAA,UAAA,GACF;AAAA,QAAA,GACF;AAAA,8CAGC,OAAI,EAAA,WAAU,QACb,UAACc,kCAAA,KAAA,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,UAAAd,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAM,eAAe,QAAQ;AAAA,cACtC,WAAW,iCACT,gBAAgB,WACZ,+CACA,mCACN;AAAA,cACD,UAAA;AAAA,YAAA;AAAA,UAED;AAAA,UACAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAM,eAAe,QAAQ;AAAA,cACtC,WAAW,iCACT,gBAAgB,WACZ,+CACA,mCACN;AAAA,cACD,UAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA,EAAA,CACF,EACF,CAAA;AAAA,QAEC;AAAA;AAAA,gDAEE,OAAI,EAAA,WAAU,kCACb,UAACc,kCAAA,KAAA,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,YAACd,kCAAA,IAAA,OAAA,EAAI,WAAU,sCACb,UAACA,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,sBAAqB,MAAK,QAAO,SAAQ,aAAY,QAAO,gBAC5G,UAAAA,kCAAAA,IAAC,QAAK,EAAA,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,6BAA6B,CAAA,EACpG,CAAA,GACF;AAAA,mDACC,OACC,EAAA,UAAA;AAAA,cAACA,kCAAA,IAAA,MAAA,EAAG,WAAU,6BAA4B,UAE1C,qBAAA;AAAA,cACCA,kCAAA,IAAA,KAAA,EAAE,WAAU,yBAAwB,UAErC,oDAAA;AAAA,YAAA,GACF;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,YACE,gBAAgB;AAAA;AAAA,UAElBA,kCAAAA,IAAC,OAAI,EAAA,WAAU,QACb,UAAAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAe,2BAA2B;AAAA,cAC1C,QAAQ,QAAQ,eAAe,QAAQ;AAAA,cACvC,UAAU,sBAAsB;AAAA,cAChC,SAAS,sBAAsB;AAAA,cAC/B;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA;AAAA;AAAA,UAGAc,kCAAAA,KAAC,OAAI,EAAA,WAAU,kBACZ,UAAA;AAAA,YAAiB,iBAAA,WAAW,IAC1Bd,kCAAAA,IAAA,OAAA,EAAI,WAAU,+BACb,UAAAc,kCAAA,KAAC,OAAI,EAAA,WAAU,qBACb,UAAA;AAAA,cAACd,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,gCAA+B,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACtH,UAACA,kCAAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,uIAAA,CAAuI,EAC9M,CAAA;AAAA,qDACC,OACC,EAAA,UAAA;AAAA,gBAACA,kCAAA,IAAA,MAAA,EAAG,WAAU,6BAA4B,UAAqB,yBAAA;AAAA,gBAC/Dc,kCAAAA,KAAC,KAAE,EAAA,WAAU,yBAAwB,UAAA;AAAA,kBAAA;AAAA,kBACV,sBAAsB,sBAAsB,OAAO;AAAA,kBAAE;AAAA,gBAAA,GAChF;AAAA,cAAA,GACF;AAAA,YAAA,EACF,CAAA,EACF,CAAA,IAEA,iBAAiB,IAAI,CAAC,eACnBd,kCAAAA,IAAA,OAAA,EAAqB,WAAU,6BAC9B,UAACc,kCAAA,KAAA,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,cAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,gBAAAd,kCAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAK,cAAc,UAAU;AAAA,oBAC7B,KAAK,qBAAqB,UAAU;AAAA,oBACpC,WAAU;AAAA,oBACV,SAAS,CAAC,MAAM;AACZ,wBAAA,OAAO,MAAM,UAAU;AAAA,oBAC3B;AAAA,kBAAA;AAAA,gBACF;AAAA,uDACC,OACC,EAAA,UAAA;AAAA,kBAAAA,sCAAC,MAAG,EAAA,WAAU,6BACX,UAAA,qBAAqB,UAAU,GAClC;AAAA,kBACAc,kCAAAA,KAAC,KAAE,EAAA,WAAU,yBAAwB,UAAA;AAAA,oBAAA;AAAA,oBACzB,qBAAqB,UAAU;AAAA,kBAAA,GAC3C;AAAA,gBAAA,GACF;AAAA,cAAA,GACF;AAAA,eAEC,qDAAkB,gBAAe,aAC/BA,kCAAA,KAAA,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,gBAACd,kCAAAA,IAAA,OAAA,EAAI,WAAU,oCAAoC,CAAA;AAAA,gBAClDA,kCAAA,IAAA,QAAA,EAAK,WAAU,0BAAyB,UAAS,aAAA;AAAA,cAAA,EAAA,CACpD,IAEAA,kCAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACL,4BAAA,IAAI,sCAAsC,UAAU;AAC5D,oCAAgB,UAAU;AAAA,kBAC5B;AAAA,kBACA,WAAU;AAAA,kBACX,UAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YAAA,GAEJ,EAAA,GArCQ,UAsCV,CACD;AAAA,YAIFA,kCAAAA,IAAA,OAAA,EAAI,WAAU,aACZ,UAAO,OAAA,QAAQ,gBAAgB,EAC7B,OAAO,CAAC,CAAC,YAAY,WAAW,MAAM,CAAC,WAAW,EAClD,IAAI,CAAC,CAAC,UAAU,MACdA,kCAAAA,IAAA,OAAA,EAAqB,WAAU,6BAC9B,UAACc,kCAAA,KAAA,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,cAACA,kCAAAA,KAAA,QAAA,EAAK,WAAU,yBACb,UAAA;AAAA,gBAAA,qBAAqB,UAAU;AAAA,gBAAE;AAAA,cAAA,GACpC;AAAA,cAEAd,kCAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAAE,MAAM,oBAAoB,UAAU;AAAA,kBACrC,QAAO;AAAA,kBACP,KAAI;AAAA,kBACJ,WAAU;AAAA,kBACX,UAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YACF,EAAA,CAAA,EAAA,GAbQ,UAcV,CACD,GACL;AAAA,UAAA,GACF;AAAA;AAAA,QAID,SACCA,kCAAA,IAAC,OAAI,EAAA,WAAU,sDACZ,UACH,OAAA;AAAA,QAIFc,kCAAAA,KAAC,OAAI,EAAA,WAAU,0BACb,UAAA;AAAA,UAAAd,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS;AAAA,cACT,WAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAED;AAAA,UACAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM,UAAU,gBAAgB,QAAQ;AAAA,cACjD,WAAU;AAAA,cACV,UAAU,CAAC,YAAY,gBAAgB,YAAY,CAAC;AAAA,cAEnD,UAAA,gBAAgB,WAAW,4BAA4B;AAAA,YAAA;AAAA,UAC1D;AAAA,QAAA,GACF;AAAA,MAAA,GACF;AAAA,MAID,SAAS,gBACRA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAO;AAAA,UACP;AAAA,UACA,SAAQ;AAAA,QAAA;AAAA,MACV;AAAA,MAID,SAAS,aACRc,kCAAAA,KAAC,OACC,EAAA,UAAA;AAAA,QAAAd,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,SAAQ;AAAA,UAAA;AAAA,QACV;AAAA,QACF,mBACIc,kCAAA,KAAC,OAAI,EAAA,WAAU,mCACb,UAAA;AAAA,UAACd,kCAAA,IAAA,KAAA,EAAE,WAAU,8BAA6B,UAE1C,qBAAA;AAAA,gDACC,KAAE,EAAA,WAAU,6CACV,UAAA,sBAAsB,eAAe,GACxC;AAAA,UACC,yBACCA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAM,GAAG,eAAe,sBAAsB,OAAO,CAAC,IAAI,gBAAgB,sBAAsB,OAAO,CAAC,IAAI,eAAe;AAAA,cAC3H,QAAO;AAAA,cACP,KAAI;AAAA,cACJ,WAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA,GAEJ;AAAA,MAAA,GAEJ;AAAA,MAID,SAAS,WACRc,kCAAAA,KAAC,OACC,EAAA,UAAA;AAAA,QAAAd,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,SAAS,SAAS;AAAA,UAAA;AAAA,QACpB;AAAA,QACAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA,GACF;AAAA,IAAA,GAEJ;AAAA,IAGCA,sCAAA,OAAA,EAAI,WAAU,qCACb,iDAAC,KAAE,EAAA,UAAA;AAAA,MAAA;AAAA,MAAYA,kCAAA,IAAA,QAAA,EAAK,WAAU,kBAAiB,UAAO,WAAA;AAAA,MAAO;AAAA,IAAA,EAAA,CAAiC,EAChG,CAAA;AAAA,EAAA,GACF,GACF,EACF,CAAA;AAEJ;AAGA,MAAM,iBAAiB,CAAC,YAAY;AAClC,QAAM,YAAY;AAAA,IAChB,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAEL,SAAA,UAAU,OAAO,KAAK;AAC/B;AAEA,MAAM,kBAAkB,CAAC,YAAY;AACnC,QAAM,QAAQ;AAAA,IACZ,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAEL,SAAA,MAAM,OAAO,KAAK;AAC3B;AC9FM,MAAA,kBAAkB,WAAW,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,0BAA0B,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,oBAAoB,CAAC;AAAA,EACrB,mBAAmB,cAAc;AAAA,EACjC,kBAAkB,aAAa;AACjC,GAAG,QAAQ;AAET,QAAM,iBAAiB;AACvB,QAAM,EAAE,OAAO,aAAa,IAAI,SAAS;AAGzC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,QAAQ;AAC7C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,MAAM;AACzD,QAAM,CAAC,uBAAuB,wBAAwB,IAAI,SAAS,IAAI;AACvE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,IAAI;AACvC,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,IAAI;AAC3D,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,IAAI;AAC7D,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,CAAE,CAAA;AAC3D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,iBAAiB;AAClD,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,CAAE,CAAA;AACzD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,KAAK;AAGxD,QAAA,kBAAkB,WAAU,iDAAgB;AAC5C,QAAA,qBAAqB,cAAa,iDAAgB;AAChC,aAAU,iDAAgB;AAClD,QAAM,iBAAiB,SAAS;AAC1B,QAAA,iBAAiB,UAAS,iDAAgB;AAChD,QAAM,6BAA6B,kBAAkB,SAAS,IAC1D,oBACA,CAAC,cAAc,UAAU,cAAc,KAAK,cAAc,MAAM,cAAc,QAAQ;AAG1F,sBAAoB,KAAK,OAAO;AAAA,IAC9B,MAAM,CAAC,mBAAmB;AACxB,iBAAW,cAAc;AAAA,IAC3B;AAAA,IACA,OAAO,MAAM;AACC;IACd;AAAA,IACA,YAAY,MAAM;AAAA,IAClB,qBAAqB,MAAM;AAAA,IAC3B,oBAAoB,MAAM;AAAA,IAC1B,cAAc,MAAM,uBAAuB;AAAA,EAC3C,EAAA;AAGI,QAAA,MAAM,CAAC,SAAS,SAAS;AAC7B,QAAI,gBAAgB;AAClB,cAAQ,IAAI,iBAAiB,OAAO,IAAI,IAAI;AAAA,IAC9C;AAAA,EAAA;AAIF,YAAU,MAAM;AACV,QAAA,OAAO,WAAW,aAAa;AACjC,YAAM,qBAAqB,MAAY;AACrC,cAAM,UAAU,MAAM,uBAAuB,GAAG,GAAI;AACpD,4BAAoB,OAAO;AAC3B,YAAI,+BAA+B,OAAO;AAAA,MAAA;AAGzB;IACrB;AAAA,EAAA,GACC,CAAC,cAAc,CAAC;AAGnB,YAAU,MAAM;AACd,UAAM,sBAAsB,MAAY;AAClC,UAAA,CAAC,mBAAmB,CAAC,oBAAoB;AAC3C,YAAI,0DAA0D;AAC9D;AAAA,MACF;AAEA,0BAAoB,IAAI;AAEpB,UAAA;AAEF,cAAMe,aAAY;AACd,YAAAA,WAAU,2BAA2B,OAAO,KAAKA,WAAU,uBAAuB,EAAE,SAAS,GAAG;AAClG,6BAAmBA,WAAU,uBAAuB;AAChD,cAAA,4CAA4CA,WAAU,uBAAuB;AAAA,QAAA,OAC5E;AAEC,gBAAA,kBAAkB,MAAM;AAC9B,cAAI,mBAAmB,OAAO,KAAK,eAAe,EAAE,SAAS,GAAG;AAC9D,+BAAmB,eAAe;AAClC,gBAAI,sCAAsC,eAAe;AAAA,UAAA,OACpD;AACL,gBAAI,2CAA2C;AAAA,UACjD;AAAA,QACF;AAGA,YAAI,2BAA2B,OAAO,KAAK,uBAAuB,EAAE,SAAS,GAAG;AAC9E,6BAAmB,CAAS,SAAA,kCACvB,OACA,wBACH;AACF,cAAI,kCAAkC,uBAAuB;AAAA,QAC/D;AAAA,eACOC,QAAO;AACd,YAAI,4CAA4CA,MAAK;AAC7C,gBAAA,KAAK,6CAA6CA,OAAM,OAAO;AAGvE,YAAI,2BAA2B,OAAO,KAAK,uBAAuB,EAAE,SAAS,GAAG;AAC9E,6BAAmB,uBAAuB;AAC1C,cAAI,2CAA2C,uBAAuB;AAAA,QACxE;AAAA,MAAA,UACA;AACA,4BAAoB,KAAK;AAAA,MAC3B;AAAA,IAAA;AAGkB;KACnB,CAAC,iBAAiB,oBAAoB,yBAAyB,cAAc,CAAC;AAG3E,QAAA,aAAa,CAAO,mBAAmB;AAC3C,QAAI,CAAC,kBAAkB,CAAC,eAAe,QAAQ;AAC7C,eAAS,4BAA4B;AACjC,UAAA;AAAiB,gBAAA,IAAI,MAAM,4BAA4B,CAAC;AAC5D;AAAA,IACF;AAEA,qBAAiB,SAAS;AAC1B,cAAU,IAAI;AACd,YAAQ,iBAAiB;AAErB,QAAA;AACF,UAAI,kCAAkC,cAAc;AAGhD,UAAA,uBAAuB,mBAAK;AAEhC,UAAI,OAAO,KAAK,oBAAoB,EAAE,WAAW,GAAG;AAClD,YAAI,uDAAuD;AACvD,YAAA;AACI,gBAAA,iBAAiB,MAAM;AAC7B,cAAI,gBAAgB;AACK,mCAAA;AACvB,+BAAmB,cAAc;AAAA,UACnC;AAAA,iBACO,YAAY;AACnB,cAAI,qCAAqC,UAAU;AAAA,QACrD;AAAA,MACF;AAGA,UAAI,eAAe,yBAAyB;AACnB,+BAAA,kCAClB,uBACA,eAAe;AAAA,MAEtB;AAEA,UAAI,yBAAyB;AACJ,+BAAA,kCAClB,uBACA;AAAA,MAEP;AAEA,UAAI,uCAAuC,oBAAoB;AAGzD,YAAA,kBAAkB,MAAM,cAAc;AAAA,QAC1C,QAAQ,eAAe;AAAA,QACvB,UAAU,eAAe,YAAY;AAAA,QACrC,SAAS,eAAe,WAAW;AAAA,QACnC,eAAe,eAAe,iBAAiB;AAAA,QAC/C,aAAa,eAAe;AAAA,QAC5B,UAAU,iCACL,eAAe,WADV;AAAA,UAER,YAAY;AAAA,UACZ,iBAAiB;AAAA,QACnB;AAAA,QACA,yBAAyB;AAAA,MAAA,CAC1B;AAED,UAAI,oBAAoB,eAAe;AAEvC,UAAI,gBAAgB,SAAS;AAC3B,mBAAW,gBAAgB,OAAO;AAGlC,YAAI,gBAAgB,kBAAkB,gBAAgB,eAAe,iBAAiB;AACpF,6BAAmB,CAAS,SAAA,kCACvB,OACA,gBAAgB,eAAe,gBAClC;AACE,cAAA,mDAAmD,gBAAgB,eAAe,eAAe;AAAA,QACvG;AAEA,yBAAiB,MAAM;AACvB,iBAAS,IAAI;AAAA,MAAA,OACR;AACC,cAAA,IAAI,MAAM,oCAAoC;AAAA,MACtD;AAEA,UAAI,gDAAgD;AAAA,aAC7C,KAAK;AACZ,UAAI,2BAA2B,GAAG;AACzB,eAAA,IAAI,WAAW,0BAA0B;AAClD,uBAAiB,OAAO;AACpB,UAAA;AAAS,gBAAQ,GAAG;AAAA,IAC1B;AAAA,EAAA;AAIF,QAAM,cAAc,MAAM;AACxB,cAAU,KAAK;AACf,uBAAmB,IAAI;AACvB,wBAAoB,IAAI;AACxB,6BAAyB,IAAI;AAC7B,YAAQ,iBAAiB;AACzB,aAAS,IAAI;AACT,QAAA;AAAiB;EAAA;AAIjB,QAAA,4BAA4B,CAAC,kBAAkB;AACnD,QAAI,4BAA4B,aAAa;AAC7C,6BAAyB,aAAa;AACtC,YAAQ,SAAS;AAAA,EAAA;AAInB,QAAM,aAAa,MAAM;AACvB,QAAI,SAAS,WAAW;AACtB,cAAQ,iBAAiB;AACzB,0BAAoB,IAAI;AACxB,eAAS,IAAI;AAAA,IAAA,WACJ,SAAS,SAAS;AAC3B,cAAQ,SAAS;AACjB,eAAS,IAAI;AAAA,IACf;AAAA,EAAA;AAII,QAAA,sBAAsB,CAAO,eAAe;AAChD,QAAI,CAAC,uBAAuB;AAC1B,eAAS,sCAAsC;AAC/C;AAAA,IACF;AAEI,QAAA;AACF,eAAS,IAAI;AACb,UAAI,sBAAsB,EAAE,YAAY,SAAS,sBAAsB,SAAS;AAEhF,YAAM,aAAa,MAAM,cAAc,YAAY,sBAAsB,SAAS,CAAC;AACnF,0BAAoB,UAAU;AAC9B,eAAS,IAAI;AAEb,UAAI,kCAAkC,UAAU;AAAA,aACzC,KAAK;AACZ,UAAI,4BAA4B,GAAG;AAC1B,eAAA,IAAI,WAAW,0BAA0B;AAAA,IACpD;AAAA,EAAA;AAIF,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC;AAA8B,aAAA;AAEnC,UAAM,UAAU,sBAAsB;AAOlC,QAAA,WAAW,QAAQ,iBAAiB;AACtC,aAAO,QAAQ;AAAA,IACjB;AAEI,QAAA,gBAAgB,OAAO,GAAG;AAC5B,aAAO,gBAAgB,OAAO;AAAA,IAChC;AAEI,QAAA,wBAAwB,OAAO,GAAG;AACpC,aAAO,wBAAwB,OAAO;AAAA,IACxC;AAEO,WAAA;AAAA,EAAA;AAIT,QAAM,gBAAgB,MAAY;AAC5B,QAAA,CAAC,WAAW,CAAC,uBAAuB;AACtC,eAAS,6BAA6B;AACtC;AAAA,IACF;AAEA,UAAM,mBAAmB;AAErB,QAAA,CAAC,oBAAoB,CAAC,UAAU;AACzB,eAAA,8CAA8C,sBAAsB,OAAO,UAAU;AAC9F;AAAA,IACF;AAEI,QAAA,CAAC,oBAAoB,CAAC,UAAU;AAClC,eAAS,kCAAkC;AAC3C;AAAA,IACF;AAEA,QAAI,6BAA6B;AACjC,qBAAiB,SAAS;AAC1B,uBAAmB,IAAI;AACvB,YAAQ,YAAY;AAEhB,QAAA;AACE,UAAA;AAEJ,UAAI,UAAU;AAEZ,YAAI,2CAA2C;AAC/C,iBAAS,QAAQ,KAAK,IAAA,EAAM,SAAS,EAAE,CAAC,IAAI,KAAK,SAAS,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC;AAAA,MAAA,OAClF;AAEL,YAAI,yCAAyC;AAAA,UAC3C;AAAA,UACA,QAAQ,QAAQ,eAAe,QAAQ;AAAA,UACvC,SAAS,sBAAsB;AAAA,QAAA,CAChC;AAGK,cAAA,cAAc,QAAQ,SAAS,sBAAsB;AAElD,iBAAA,MAAM,gBAAgB,kBAAkB;AAAA,UAC/C,IAAI;AAAA,UACJ,QAAQ,QAAQ,eAAe,QAAQ;AAAA,UACvC,cAAc,2CAAa;AAAA,UAC3B,eAAe,2CAAa;AAAA,UAC5B,UAAU,sBAAsB;AAAA,UAChC,SAAS,sBAAsB;AAAA,UAC/B;AAAA,QAAA,CACD;AAAA,MACH;AAEA,UAAI,qBAAqB,MAAM;AAC/B,yBAAmB,MAAM;AAGzB,UAAI,oCAAoC;AAClC,YAAA,kBAAkB,MAAM,eAAe;AAAA,QAC3C,WAAW,QAAQ;AAAA,QACnB,iBAAiB;AAAA,QACjB,SAAS,sBAAsB;AAAA,QAC/B,UAAU,sBAAsB;AAAA,QAChC,eAAe,qDAAkB;AAAA,MAAA,CAClC;AAED,UAAI,mCAAmC,eAAe;AAEtD,uBAAiB,SAAS;AAC1B,cAAQ,SAAS;AAGjB,UAAI,WAAW;AACb,YAAI,+BAA+B;AACzB,kBAAA,QAAQ,IAAI,QAAQ;AAAA,UAC5B,SAAS,sBAAsB;AAAA,UAC/B,UAAU,sBAAsB;AAAA,UAChC,QAAQ,QAAQ,eAAe,QAAQ;AAAA,UACvC;AAAA,QAAA,CACD;AAAA,MACH;AAAA,aAEO,KAAK;AACZ,UAAI,kBAAkB,GAAG;AAGrB,UAAA,eAAe,IAAI,WAAW;AAElC,UAAI,aAAa,SAAS,eAAe,KAAK,aAAa,SAAS,eAAe,GAAG;AACrE,uBAAA;AAAA,MACN,WAAA,aAAa,SAAS,oBAAoB,GAAG;AACvC,uBAAA;AAAA,MACN,WAAA,aAAa,SAAS,SAAS,GAAG;AAC5B,uBAAA;AAAA,MAAA,WACN,aAAa,SAAS,WAAW,KAAK,aAAa,SAAS,SAAS,GAAG;AAClE,uBAAA;AAAA,MACjB;AAEA,eAAS,YAAY;AACrB,uBAAiB,OAAO;AACxB,cAAQ,OAAO;AACX,UAAA;AAAiB,gBAAA,IAAI,MAAM,YAAY,CAAC;AAAA,IAC9C;AAAA,EAAA;AAIF,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC;AAAuB,aAAO;AAC5B,WAAA,8BAA8B,sBAAsB,OAAO;AAAA,EAAA;AAIpE,MAAI,kBAAkB;AAElB,WAAAhB,kCAAAA,IAAC,OAAI,EAAA,WAAU,mEACb,UAAAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,qCACb,UAAAc,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACb,UAAA;AAAA,MAACd,kCAAAA,IAAA,OAAA,EAAI,WAAU,kFAAkF,CAAA;AAAA,MAChGA,kCAAA,IAAA,QAAA,EAAK,WAAU,iBAAgB,UAA0B,8BAAA;AAAA,IAAA,GAC5D,GACF,EACF,CAAA;AAAA,EAEJ;AAEA,6EAEK,UACC,UAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,uBAAuB;AAAA,MACvB,WAAW;AAAA,MACX,QAAQ;AAAA,MACR;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA,kBAAkB,oBAAoB;AAAA,MACtC;AAAA,MACA,yBAAyB;AAAA,MACzB,kBAAkB,oBAAoB;AAAA,MACtC,OAAO;AAAA,IAAA;AAAA,EAGb,EAAA,CAAA;AAEJ,CAAC;AAGD,gBAAgB,cAAc;ACrxBlB,MAAC,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,OAAO;AAAA,EACP,mBAAmB,CAAC,YAAY,OAAO,QAAQ,UAAU;AAC3D;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,39,42]}
1
+ {"version":3,"file":"coinley-checkout.es.js","sources":["../node_modules/ethers/lib.esm/_version.js","../node_modules/ethers/lib.esm/utils/properties.js","../node_modules/ethers/lib.esm/utils/errors.js","../node_modules/ethers/lib.esm/utils/data.js","../node_modules/ethers/lib.esm/utils/maths.js","../node_modules/ethers/lib.esm/utils/events.js","../node_modules/ethers/lib.esm/utils/utf8.js","../node_modules/ethers/lib.esm/utils/fixednumber.js","../node_modules/ethers/lib.esm/utils/units.js","../node_modules/ethers/lib.esm/abi/coders/abstract-coder.js","../node_modules/ethers/node_modules/@noble/hashes/esm/_assert.js","../node_modules/ethers/node_modules/@noble/hashes/esm/utils.js","../node_modules/ethers/node_modules/@noble/hashes/esm/_u64.js","../node_modules/ethers/node_modules/@noble/hashes/esm/sha3.js","../node_modules/ethers/lib.esm/crypto/keccak.js","../node_modules/ethers/lib.esm/address/address.js","../node_modules/ethers/lib.esm/address/checks.js","../node_modules/ethers/lib.esm/abi/typed.js","../node_modules/ethers/lib.esm/abi/coders/address.js","../node_modules/ethers/lib.esm/abi/coders/anonymous.js","../node_modules/ethers/lib.esm/abi/coders/array.js","../node_modules/ethers/lib.esm/abi/coders/boolean.js","../node_modules/ethers/lib.esm/abi/coders/bytes.js","../node_modules/ethers/lib.esm/abi/coders/fixed-bytes.js","../node_modules/ethers/lib.esm/abi/coders/null.js","../node_modules/ethers/lib.esm/abi/coders/number.js","../node_modules/ethers/lib.esm/abi/coders/string.js","../node_modules/ethers/lib.esm/abi/coders/tuple.js","../node_modules/ethers/lib.esm/transaction/accesslist.js","../node_modules/ethers/lib.esm/hash/id.js","../node_modules/ethers/lib.esm/abi/fragments.js","../node_modules/ethers/lib.esm/abi/abi-coder.js","../node_modules/ethers/lib.esm/abi/interface.js","../node_modules/ethers/lib.esm/providers/provider.js","../node_modules/ethers/lib.esm/contract/wrappers.js","../node_modules/ethers/lib.esm/contract/contract.js","../src/services/walletService.js","../src/services/api.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/context/ThemeContext.jsx","../src/context/CoinleyContext.jsx","../node_modules/qrcode.react/lib/esm/index.js","../src/components/QRCode.jsx","../src/components/PaymentStatus.jsx","../src/components/PaymentMethods.jsx","../src/assets/Logo.png","../src/components/CoinleyModal.jsx","../src/components/CoinleyCheckout.jsx","../src/index.js"],"sourcesContent":["/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n/**\n * The current version of Ethers.\n */\nexport const version = \"6.14.3\";\n//# sourceMappingURL=_version.js.map","/**\n * Property helper functions.\n *\n * @_subsection api/utils:Properties [about-properties]\n */\nfunction checkType(value, type, name) {\n const types = type.split(\"|\").map(t => t.trim());\n for (let i = 0; i < types.length; i++) {\n switch (type) {\n case \"any\":\n return;\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n if (typeof (value) === type) {\n return;\n }\n }\n }\n const error = new Error(`invalid value for type ${type}`);\n error.code = \"INVALID_ARGUMENT\";\n error.argument = `value.${name}`;\n error.value = value;\n throw error;\n}\n/**\n * Resolves to a new object that is a copy of %%value%%, but with all\n * values resolved.\n */\nexport async function resolveProperties(value) {\n const keys = Object.keys(value);\n const results = await Promise.all(keys.map((k) => Promise.resolve(value[k])));\n return results.reduce((accum, v, index) => {\n accum[keys[index]] = v;\n return accum;\n }, {});\n}\n/**\n * Assigns the %%values%% to %%target%% as read-only values.\n *\n * It %%types%% is specified, the values are checked.\n */\nexport function defineProperties(target, values, types) {\n for (let key in values) {\n let value = values[key];\n const type = (types ? types[key] : null);\n if (type) {\n checkType(value, type, key);\n }\n Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n }\n}\n//# sourceMappingURL=properties.js.map","/**\n * All errors in ethers include properties to ensure they are both\n * human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n * The [[isError]] function can be used to check the error ``code`` and\n * provide a type guard for the properties present on that error interface.\n *\n * @_section: api/utils/errors:Errors [about-errors]\n */\nimport { version } from \"../_version.js\";\nimport { defineProperties } from \"./properties.js\";\nfunction stringify(value, seen) {\n if (value == null) {\n return \"null\";\n }\n if (seen == null) {\n seen = new Set();\n }\n if (typeof (value) === \"object\") {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n seen.add(value);\n }\n if (Array.isArray(value)) {\n return \"[ \" + (value.map((v) => stringify(v, seen))).join(\", \") + \" ]\";\n }\n if (value instanceof Uint8Array) {\n const HEX = \"0123456789abcdef\";\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n result += HEX[value[i] >> 4];\n result += HEX[value[i] & 0xf];\n }\n return result;\n }\n if (typeof (value) === \"object\" && typeof (value.toJSON) === \"function\") {\n return stringify(value.toJSON(), seen);\n }\n switch (typeof (value)) {\n case \"boolean\":\n case \"number\":\n case \"symbol\":\n return value.toString();\n case \"bigint\":\n return BigInt(value).toString();\n case \"string\":\n return JSON.stringify(value);\n case \"object\": {\n const keys = Object.keys(value);\n keys.sort();\n return \"{ \" + keys.map((k) => `${stringify(k, seen)}: ${stringify(value[k], seen)}`).join(\", \") + \" }\";\n }\n }\n return `[ COULD NOT SERIALIZE ]`;\n}\n/**\n * Returns true if the %%error%% matches an error thrown by ethers\n * that matches the error %%code%%.\n *\n * In TypeScript environments, this can be used to check that %%error%%\n * matches an EthersError type, which means the expected properties will\n * be set.\n *\n * @See [ErrorCodes](api:ErrorCode)\n * @example\n * try {\n * // code....\n * } catch (e) {\n * if (isError(e, \"CALL_EXCEPTION\")) {\n * // The Type Guard has validated this object\n * console.log(e.data);\n * }\n * }\n */\nexport function isError(error, code) {\n return (error && error.code === code);\n}\n/**\n * Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error) {\n return isError(error, \"CALL_EXCEPTION\");\n}\n/**\n * Returns a new Error configured to the format ethers emits errors, with\n * the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n * for the corresponding EthersError.\n *\n * Each error in ethers includes the version of ethers, a\n * machine-readable [[ErrorCode]], and depending on %%code%%, additional\n * required properties. The error message will also include the %%message%%,\n * ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError(message, code, info) {\n let shortMessage = message;\n {\n const details = [];\n if (info) {\n if (\"message\" in info || \"code\" in info || \"name\" in info) {\n throw new Error(`value will overwrite populated values: ${stringify(info)}`);\n }\n for (const key in info) {\n if (key === \"shortMessage\") {\n continue;\n }\n const value = (info[key]);\n // try {\n details.push(key + \"=\" + stringify(value));\n // } catch (error: any) {\n // console.log(\"MMM\", error.message);\n // details.push(key + \"=[could not serialize object]\");\n // }\n }\n }\n details.push(`code=${code}`);\n details.push(`version=${version}`);\n if (details.length) {\n message += \" (\" + details.join(\", \") + \")\";\n }\n }\n let error;\n switch (code) {\n case \"INVALID_ARGUMENT\":\n error = new TypeError(message);\n break;\n case \"NUMERIC_FAULT\":\n case \"BUFFER_OVERRUN\":\n error = new RangeError(message);\n break;\n default:\n error = new Error(message);\n }\n defineProperties(error, { code });\n if (info) {\n Object.assign(error, info);\n }\n if (error.shortMessage == null) {\n defineProperties(error, { shortMessage });\n }\n return error;\n}\n/**\n * Throws an EthersError with %%message%%, %%code%% and additional error\n * %%info%% when %%check%% is falsish..\n *\n * @see [[api:makeError]]\n */\nexport function assert(check, message, code, info) {\n if (!check) {\n throw makeError(message, code, info);\n }\n}\n/**\n * A simple helper to simply ensuring provided arguments match expected\n * constraints, throwing if not.\n *\n * In TypeScript environments, the %%check%% has been asserted true, so\n * any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check, message, name, value) {\n assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\nexport function assertArgumentCount(count, expectedCount, message) {\n if (message == null) {\n message = \"\";\n }\n if (message) {\n message = \": \" + message;\n }\n assert(count >= expectedCount, \"missing argument\" + message, \"MISSING_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n count: count,\n expectedCount: expectedCount\n });\n}\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n try {\n // General test for normalize\n /* c8 ignore start */\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad\");\n }\n ;\n /* c8 ignore stop */\n if (form === \"NFD\") {\n const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n const expected = String.fromCharCode(0x65, 0x0301);\n /* c8 ignore start */\n if (check !== expected) {\n throw new Error(\"broken\");\n }\n /* c8 ignore stop */\n }\n accum.push(form);\n }\n catch (error) { }\n return accum;\n}, []);\n/**\n * Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form) {\n assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n operation: \"String.prototype.normalize\", info: { form }\n });\n}\n/**\n * Many classes use file-scoped values to guard the constructor,\n * making it effectively private. This facilitates that pattern\n * by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n * throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard, guard, className) {\n if (className == null) {\n className = \"\";\n }\n if (givenGuard !== guard) {\n let method = className, operation = \"new\";\n if (className) {\n method += \".\";\n operation += \" \" + className;\n }\n assert(false, `private constructor; use ${method}from* methods`, \"UNSUPPORTED_OPERATION\", {\n operation\n });\n }\n}\n//# sourceMappingURL=errors.js.map","/**\n * Some data helpers.\n *\n *\n * @_subsection api/utils:Data Helpers [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\nfunction _getBytes(value, name, copy) {\n if (value instanceof Uint8Array) {\n if (copy) {\n return new Uint8Array(value);\n }\n return value;\n }\n if (typeof (value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n const result = new Uint8Array((value.length - 2) / 2);\n let offset = 2;\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(value.substring(offset, offset + 2), 16);\n offset += 2;\n }\n return result;\n }\n assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n/**\n * Get a typed Uint8Array for %%value%%. If already a Uint8Array\n * the original %%value%% is returned; if a copy is required use\n * [[getBytesCopy]].\n *\n * @see: getBytesCopy\n */\nexport function getBytes(value, name) {\n return _getBytes(value, name, false);\n}\n/**\n * Get a typed Uint8Array for %%value%%, creating a copy if necessary\n * to prevent any modifications of the returned value from being\n * reflected elsewhere.\n *\n * @see: getBytes\n */\nexport function getBytesCopy(value, name) {\n return _getBytes(value, name, true);\n}\n/**\n * Returns true if %%value%% is a valid [[HexString]].\n *\n * If %%length%% is ``true`` or a //number//, it also checks that\n * %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n * bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value, length) {\n if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (typeof (length) === \"number\" && value.length !== 2 + 2 * length) {\n return false;\n }\n if (length === true && (value.length % 2) !== 0) {\n return false;\n }\n return true;\n}\n/**\n * Returns true if %%value%% is a valid representation of arbitrary\n * data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value) {\n return (isHexString(value, true) || (value instanceof Uint8Array));\n}\nconst HexCharacters = \"0123456789abcdef\";\n/**\n * Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data) {\n const bytes = getBytes(data);\n let result = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const v = bytes[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n}\n/**\n * Returns a [[DataHexString]] by concatenating all values\n * within %%data%%.\n */\nexport function concat(datas) {\n return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n/**\n * Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data) {\n if (isHexString(data, true)) {\n return (data.length - 2) / 2;\n }\n return getBytes(data).length;\n}\n/**\n * Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n * offset to the %%end%% offset.\n *\n * By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data, start, end) {\n const bytes = getBytes(data);\n if (end != null && end > bytes.length) {\n assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n buffer: bytes, length: bytes.length, offset: end\n });\n }\n return hexlify(bytes.slice((start == null) ? 0 : start, (end == null) ? bytes.length : end));\n}\n/**\n * Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data) {\n let bytes = hexlify(data).substring(2);\n while (bytes.startsWith(\"00\")) {\n bytes = bytes.substring(2);\n }\n return \"0x\" + bytes;\n}\nfunction zeroPad(data, length, left) {\n const bytes = getBytes(data);\n assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n buffer: new Uint8Array(bytes),\n length: length,\n offset: length + 1\n });\n const result = new Uint8Array(length);\n result.fill(0);\n if (left) {\n result.set(bytes, length - bytes.length);\n }\n else {\n result.set(bytes, 0);\n }\n return hexlify(result);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **left**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **values** are in Solidity\n * (e.g. ``uint128``).\n */\nexport function zeroPadValue(data, length) {\n return zeroPad(data, length, true);\n}\n/**\n * Return the [[DataHexString]] of %%data%% padded on the **right**\n * to %%length%% bytes.\n *\n * If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n * thrown.\n *\n * This pads data the same as **bytes** are in Solidity\n * (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data, length) {\n return zeroPad(data, length, false);\n}\n//# sourceMappingURL=data.js.map","/**\n * Some mathematic operations.\n *\n * @_subsection: api/utils:Math Helpers [about-maths]\n */\nimport { hexlify, isBytesLike } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1;\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n/**\n * Convert %%value%% from a twos-compliment representation of %%width%%\n * bits to its value.\n *\n * If the highest bit is ``1``, the result will be negative.\n */\nexport function fromTwos(_value, _width) {\n const value = getUint(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n assert((value >> width) === BN_0, \"overflow\", \"NUMERIC_FAULT\", {\n operation: \"fromTwos\", fault: \"overflow\", value: _value\n });\n // Top bit set; treat as a negative value\n if (value >> (width - BN_1)) {\n const mask = (BN_1 << width) - BN_1;\n return -(((~value) & mask) + BN_1);\n }\n return value;\n}\n/**\n * Convert %%value%% to a twos-compliment representation of\n * %%width%% bits.\n *\n * The result will always be positive.\n */\nexport function toTwos(_value, _width) {\n let value = getBigInt(_value, \"value\");\n const width = BigInt(getNumber(_width, \"width\"));\n const limit = (BN_1 << (width - BN_1));\n if (value < BN_0) {\n value = -value;\n assert(value <= limit, \"too low\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n const mask = (BN_1 << width) - BN_1;\n return ((~value) & mask) + BN_1;\n }\n else {\n assert(value < limit, \"too high\", \"NUMERIC_FAULT\", {\n operation: \"toTwos\", fault: \"overflow\", value: _value\n });\n }\n return value;\n}\n/**\n * Mask %%value%% with a bitmask of %%bits%% ones.\n */\nexport function mask(_value, _bits) {\n const value = getUint(_value, \"value\");\n const bits = BigInt(getNumber(_bits, \"bits\"));\n return value & ((BN_1 << bits) - BN_1);\n}\n/**\n * Gets a BigInt from %%value%%. If it is an invalid value for\n * a BigInt, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getBigInt(value, name) {\n switch (typeof (value)) {\n case \"bigint\": return value;\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return BigInt(value);\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n if (value[0] === \"-\" && value[1] !== \"-\") {\n return -BigInt(value.substring(1));\n }\n return BigInt(value);\n }\n catch (e) {\n assertArgument(false, `invalid BigNumberish string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid BigNumberish value\", name || \"value\", value);\n}\n/**\n * Returns %%value%% as a bigint, validating it is valid as a bigint\n * value and that it is positive.\n */\nexport function getUint(value, name) {\n const result = getBigInt(value, name);\n assert(result >= BN_0, \"unsigned value cannot be negative\", \"NUMERIC_FAULT\", {\n fault: \"overflow\", operation: \"getUint\", value\n });\n return result;\n}\nconst Nibbles = \"0123456789abcdef\";\n/*\n * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data.\n */\nexport function toBigInt(value) {\n if (value instanceof Uint8Array) {\n let result = \"0x0\";\n for (const v of value) {\n result += Nibbles[v >> 4];\n result += Nibbles[v & 0x0f];\n }\n return BigInt(result);\n }\n return getBigInt(value);\n}\n/**\n * Gets a //number// from %%value%%. If it is an invalid value for\n * a //number//, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getNumber(value, name) {\n switch (typeof (value)) {\n case \"bigint\":\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return Number(value);\n case \"number\":\n assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n return value;\n case \"string\":\n try {\n if (value === \"\") {\n throw new Error(\"empty string\");\n }\n return getNumber(BigInt(value), name);\n }\n catch (e) {\n assertArgument(false, `invalid numeric string: ${e.message}`, name || \"value\", value);\n }\n }\n assertArgument(false, \"invalid numeric value\", name || \"value\", value);\n}\n/**\n * Converts %%value%% to a number. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data. Throws if the value is not safe.\n */\nexport function toNumber(value) {\n return getNumber(toBigInt(value));\n}\n/**\n * Converts %%value%% to a Big Endian hexstring, optionally padded to\n * %%width%% bytes.\n */\nexport function toBeHex(_value, _width) {\n const value = getUint(_value, \"value\");\n let result = value.toString(16);\n if (_width == null) {\n // Ensure the value is of even length\n if (result.length % 2) {\n result = \"0\" + result;\n }\n }\n else {\n const width = getNumber(_width, \"width\");\n assert(width * 2 >= result.length, `value exceeds width (${width} bytes)`, \"NUMERIC_FAULT\", {\n operation: \"toBeHex\",\n fault: \"overflow\",\n value: _value\n });\n // Pad the value to the required width\n while (result.length < (width * 2)) {\n result = \"0\" + result;\n }\n }\n return \"0x\" + result;\n}\n/**\n * Converts %%value%% to a Big Endian Uint8Array.\n */\nexport function toBeArray(_value) {\n const value = getUint(_value, \"value\");\n if (value === BN_0) {\n return new Uint8Array([]);\n }\n let hex = value.toString(16);\n if (hex.length % 2) {\n hex = \"0\" + hex;\n }\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < result.length; i++) {\n const offset = i * 2;\n result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n }\n return result;\n}\n/**\n * Returns a [[HexString]] for %%value%% safe to use as a //Quantity//.\n *\n * A //Quantity// does not have and leading 0 values unless the value is\n * the literal value `0x0`. This is most commonly used for JSSON-RPC\n * numeric values.\n */\nexport function toQuantity(value) {\n let result = hexlify(isBytesLike(value) ? value : toBeArray(value)).substring(2);\n while (result.startsWith(\"0\")) {\n result = result.substring(1);\n }\n if (result === \"\") {\n result = \"0\";\n }\n return \"0x\" + result;\n}\n//# sourceMappingURL=maths.js.map","/**\n * Events allow for applications to use the observer pattern, which\n * allows subscribing and publishing events, outside the normal\n * execution paths.\n *\n * @_section api/utils/events:Events [about-events]\n */\nimport { defineProperties } from \"./properties.js\";\n/**\n * When an [[EventEmitterable]] triggers a [[Listener]], the\n * callback always ahas one additional argument passed, which is\n * an **EventPayload**.\n */\nexport class EventPayload {\n /**\n * The event filter.\n */\n filter;\n /**\n * The **EventEmitterable**.\n */\n emitter;\n #listener;\n /**\n * Create a new **EventPayload** for %%emitter%% with\n * the %%listener%% and for %%filter%%.\n */\n constructor(emitter, listener, filter) {\n this.#listener = listener;\n defineProperties(this, { emitter, filter });\n }\n /**\n * Unregister the triggered listener for future events.\n */\n async removeListener() {\n if (this.#listener == null) {\n return;\n }\n await this.emitter.off(this.filter, this.#listener);\n }\n}\n//# sourceMappingURL=events.js.map","/**\n * Using strings in Ethereum (or any security-basd system) requires\n * additional care. These utilities attempt to mitigate some of the\n * safety issues as well as provide the ability to recover and analyse\n * strings.\n *\n * @_subsection api/utils:Strings and UTF-8 [about-strings]\n */\nimport { getBytes } from \"./data.js\";\nimport { assertArgument, assertNormalize } from \"./errors.js\";\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n assertArgument(false, `invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === \"BAD_PREFIX\" || reason === \"UNEXPECTED_CONTINUE\") {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === \"OVERRUN\") {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === \"OVERLONG\") {\n assertArgument(typeof (badCodepoint) === \"number\", \"invalid bad code point for replacement\", \"badCodepoint\", badCodepoint);\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n/**\n * A handful of popular, built-in UTF-8 error handling strategies.\n *\n * **``\"error\"``** - throws on ANY illegal UTF-8 sequence or\n * non-canonical (overlong) codepoints (this is the default)\n *\n * **``\"ignore\"``** - silently drops any illegal UTF-8 sequence\n * and accepts non-canonical (overlong) codepoints\n *\n * **``\"replace\"``** - replace any illegal UTF-8 sequence with the\n * UTF-8 replacement character (i.e. ``\"\\\\ufffd\"``) and accepts\n * non-canonical (overlong) codepoints\n *\n * @returns: Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>\n */\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n const bytes = getBytes(_bytes, \"bytes\");\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(\"UNEXPECTED_CONTINUE\", i - 1, bytes, result);\n }\n else {\n i += onError(\"BAD_PREFIX\", i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(\"OVERRUN\", i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(\"MISSING_CONTINUE\", i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(\"OUT_OF_RANGE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(\"UTF16_SURROGATE\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(\"OVERLONG\", i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n/**\n * Returns the UTF-8 byte representation of %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8Bytes(str, form) {\n assertArgument(typeof (str) === \"string\", \"invalid string value\", \"str\", str);\n if (form != null) {\n assertNormalize(form);\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00), \"invalid surrogate pair\", \"str\", str);\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return new Uint8Array(result);\n}\n;\n//export \nfunction _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\n/**\n * Returns the string represented by the UTF-8 data %%bytes%%.\n *\n * When %%onError%% function is specified, it is called on UTF-8\n * errors allowing recovery using the [[Utf8ErrorFunc]] API.\n * (default: [error](Utf8ErrorFuncs))\n */\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n/**\n * Returns the UTF-8 code-points for %%str%%.\n *\n * If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8CodePoints(str, form) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","/**\n * The **FixedNumber** class permits using values with decimal places,\n * using fixed-pont math.\n *\n * Fixed-point math is still based on integers under-the-hood, but uses an\n * internal offset to store fractional components below, and each operation\n * corrects for this after each operation.\n *\n * @_section: api/utils/fixed-point-math:Fixed-Point Maths [about-fixed-point-math]\n */\nimport { getBytes } from \"./data.js\";\nimport { assert, assertArgument, assertPrivate } from \"./errors.js\";\nimport { getBigInt, getNumber, fromTwos, mask, toBigInt } from \"./maths.js\";\nimport { defineProperties } from \"./properties.js\";\nconst BN_N1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_5 = BigInt(5);\nconst _guard = {};\n// Constant to pull zeros from for multipliers\nlet Zeros = \"0000\";\nwhile (Zeros.length < 80) {\n Zeros += Zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getTens(decimals) {\n let result = Zeros;\n while (result.length < decimals) {\n result += result;\n }\n return BigInt(\"1\" + result.substring(0, decimals));\n}\nfunction checkValue(val, format, safeOp) {\n const width = BigInt(format.width);\n if (format.signed) {\n const limit = (BN_1 << (width - BN_1));\n assert(safeOp == null || (val >= -limit && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n operation: safeOp, fault: \"overflow\", value: val\n });\n if (val > BN_0) {\n val = fromTwos(mask(val, width), width);\n }\n else {\n val = -fromTwos(mask(-val, width), width);\n }\n }\n else {\n const limit = (BN_1 << width);\n assert(safeOp == null || (val >= 0 && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n operation: safeOp, fault: \"overflow\", value: val\n });\n val = (((val % limit) + limit) % limit) & (limit - BN_1);\n }\n return val;\n}\nfunction getFormat(value) {\n if (typeof (value) === \"number\") {\n value = `fixed128x${value}`;\n }\n let signed = true;\n let width = 128;\n let decimals = 18;\n if (typeof (value) === \"string\") {\n // Parse the format string\n if (value === \"fixed\") {\n // defaults...\n }\n else if (value === \"ufixed\") {\n signed = false;\n }\n else {\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n assertArgument(match, \"invalid fixed format\", \"format\", value);\n signed = (match[1] !== \"u\");\n width = parseInt(match[2]);\n decimals = parseInt(match[3]);\n }\n }\n else if (value) {\n // Extract the values from the object\n const v = value;\n const check = (key, type, defaultValue) => {\n if (v[key] == null) {\n return defaultValue;\n }\n assertArgument(typeof (v[key]) === type, \"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, v[key]);\n return v[key];\n };\n signed = check(\"signed\", \"boolean\", signed);\n width = check(\"width\", \"number\", width);\n decimals = check(\"decimals\", \"number\", decimals);\n }\n assertArgument((width % 8) === 0, \"invalid FixedNumber width (not byte aligned)\", \"format.width\", width);\n assertArgument(decimals <= 80, \"invalid FixedNumber decimals (too large)\", \"format.decimals\", decimals);\n const name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n return { signed, width, decimals, name };\n}\nfunction toString(val, decimals) {\n let negative = \"\";\n if (val < BN_0) {\n negative = \"-\";\n val *= BN_N1;\n }\n let str = val.toString();\n // No decimal point for whole values\n if (decimals === 0) {\n return (negative + str);\n }\n // Pad out to the whole component (including a whole digit)\n while (str.length <= decimals) {\n str = Zeros + str;\n }\n // Insert the decimal point\n const index = str.length - decimals;\n str = str.substring(0, index) + \".\" + str.substring(index);\n // Trim the whole component (leaving at least one 0)\n while (str[0] === \"0\" && str[1] !== \".\") {\n str = str.substring(1);\n }\n // Trim the decimal component (leaving at least one 0)\n while (str[str.length - 1] === \"0\" && str[str.length - 2] !== \".\") {\n str = str.substring(0, str.length - 1);\n }\n return (negative + str);\n}\n/**\n * A FixedNumber represents a value over its [[FixedFormat]]\n * arithmetic field.\n *\n * A FixedNumber can be used to perform math, losslessly, on\n * values which have decmial places.\n *\n * A FixedNumber has a fixed bit-width to store values in, and stores all\n * values internally by multiplying the value by 10 raised to the power of\n * %%decimals%%.\n *\n * If operations are performed that cause a value to grow too high (close to\n * positive infinity) or too low (close to negative infinity), the value\n * is said to //overflow//.\n *\n * For example, an 8-bit signed value, with 0 decimals may only be within\n * the range ``-128`` to ``127``; so ``-128 - 1`` will overflow and become\n * ``127``. Likewise, ``127 + 1`` will overflow and become ``-127``.\n *\n * Many operation have a normal and //unsafe// variant. The normal variant\n * will throw a [[NumericFaultError]] on any overflow, while the //unsafe//\n * variant will silently allow overflow, corrupting its value value.\n *\n * If operations are performed that cause a value to become too small\n * (close to zero), the value loses precison and is said to //underflow//.\n *\n * For example, a value with 1 decimal place may store a number as small\n * as ``0.1``, but the value of ``0.1 / 2`` is ``0.05``, which cannot fit\n * into 1 decimal place, so underflow occurs which means precision is lost\n * and the value becomes ``0``.\n *\n * Some operations have a normal and //signalling// variant. The normal\n * variant will silently ignore underflow, while the //signalling// variant\n * will thow a [[NumericFaultError]] on underflow.\n */\nexport class FixedNumber {\n /**\n * The specific fixed-point arithmetic field for this value.\n */\n format;\n #format;\n // The actual value (accounting for decimals)\n #val;\n // A base-10 value to multiple values by to maintain the magnitude\n #tens;\n /**\n * This is a property so console.log shows a human-meaningful value.\n *\n * @private\n */\n _value;\n // Use this when changing this file to get some typing info,\n // but then switch to any to mask the internal type\n //constructor(guard: any, value: bigint, format: _FixedFormat) {\n /**\n * @private\n */\n constructor(guard, value, format) {\n assertPrivate(guard, _guard, \"FixedNumber\");\n this.#val = value;\n this.#format = format;\n const _value = toString(value, format.decimals);\n defineProperties(this, { format: format.name, _value });\n this.#tens = getTens(format.decimals);\n }\n /**\n * If true, negative values are permitted, otherwise only\n * positive values and zero are allowed.\n */\n get signed() { return this.#format.signed; }\n /**\n * The number of bits available to store the value.\n */\n get width() { return this.#format.width; }\n /**\n * The number of decimal places in the fixed-point arithment field.\n */\n get decimals() { return this.#format.decimals; }\n /**\n * The value as an integer, based on the smallest unit the\n * [[decimals]] allow.\n */\n get value() { return this.#val; }\n #checkFormat(other) {\n assertArgument(this.format === other.format, \"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n }\n #checkValue(val, safeOp) {\n /*\n const width = BigInt(this.width);\n if (this.signed) {\n const limit = (BN_1 << (width - BN_1));\n assert(safeOp == null || (val >= -limit && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n operation: <string>safeOp, fault: \"overflow\", value: val\n });\n \n if (val > BN_0) {\n val = fromTwos(mask(val, width), width);\n } else {\n val = -fromTwos(mask(-val, width), width);\n }\n \n } else {\n const masked = mask(val, width);\n assert(safeOp == null || (val >= 0 && val === masked), \"overflow\", \"NUMERIC_FAULT\", {\n operation: <string>safeOp, fault: \"overflow\", value: val\n });\n val = masked;\n }\n */\n val = checkValue(val, this.#format, safeOp);\n return new FixedNumber(_guard, val, this.#format);\n }\n #add(o, safeOp) {\n this.#checkFormat(o);\n return this.#checkValue(this.#val + o.#val, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% added\n * to %%other%%, ignoring overflow.\n */\n addUnsafe(other) { return this.#add(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% added\n * to %%other%%. A [[NumericFaultError]] is thrown if overflow\n * occurs.\n */\n add(other) { return this.#add(other, \"add\"); }\n #sub(o, safeOp) {\n this.#checkFormat(o);\n return this.#checkValue(this.#val - o.#val, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n * from %%this%%, ignoring overflow.\n */\n subUnsafe(other) { return this.#sub(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n * from %%this%%. A [[NumericFaultError]] is thrown if overflow\n * occurs.\n */\n sub(other) { return this.#sub(other, \"sub\"); }\n #mul(o, safeOp) {\n this.#checkFormat(o);\n return this.#checkValue((this.#val * o.#val) / this.#tens, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n * by %%other%%, ignoring overflow and underflow (precision loss).\n */\n mulUnsafe(other) { return this.#mul(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n * by %%other%%. A [[NumericFaultError]] is thrown if overflow\n * occurs.\n */\n mul(other) { return this.#mul(other, \"mul\"); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n * by %%other%%. A [[NumericFaultError]] is thrown if overflow\n * occurs or if underflow (precision loss) occurs.\n */\n mulSignal(other) {\n this.#checkFormat(other);\n const value = this.#val * other.#val;\n assert((value % this.#tens) === BN_0, \"precision lost during signalling mul\", \"NUMERIC_FAULT\", {\n operation: \"mulSignal\", fault: \"underflow\", value: this\n });\n return this.#checkValue(value / this.#tens, \"mulSignal\");\n }\n #div(o, safeOp) {\n assert(o.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n operation: \"div\", fault: \"divide-by-zero\", value: this\n });\n this.#checkFormat(o);\n return this.#checkValue((this.#val * this.#tens) / o.#val, safeOp);\n }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% divided\n * by %%other%%, ignoring underflow (precision loss). A\n * [[NumericFaultError]] is thrown if overflow occurs.\n */\n divUnsafe(other) { return this.#div(other); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% divided\n * by %%other%%, ignoring underflow (precision loss). A\n * [[NumericFaultError]] is thrown if overflow occurs.\n */\n div(other) { return this.#div(other, \"div\"); }\n /**\n * Returns a new [[FixedNumber]] with the result of %%this%% divided\n * by %%other%%. A [[NumericFaultError]] is thrown if underflow\n * (precision loss) occurs.\n */\n divSignal(other) {\n assert(other.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n operation: \"div\", fault: \"divide-by-zero\", value: this\n });\n this.#checkFormat(other);\n const value = (this.#val * this.#tens);\n assert((value % other.#val) === BN_0, \"precision lost during signalling div\", \"NUMERIC_FAULT\", {\n operation: \"divSignal\", fault: \"underflow\", value: this\n });\n return this.#checkValue(value / other.#val, \"divSignal\");\n }\n /**\n * Returns a comparison result between %%this%% and %%other%%.\n *\n * This is suitable for use in sorting, where ``-1`` implies %%this%%\n * is smaller, ``1`` implies %%this%% is larger and ``0`` implies\n * both are equal.\n */\n cmp(other) {\n let a = this.value, b = other.value;\n // Coerce a and b to the same magnitude\n const delta = this.decimals - other.decimals;\n if (delta > 0) {\n b *= getTens(delta);\n }\n else if (delta < 0) {\n a *= getTens(-delta);\n }\n // Comnpare\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n }\n /**\n * Returns true if %%other%% is equal to %%this%%.\n */\n eq(other) { return this.cmp(other) === 0; }\n /**\n * Returns true if %%other%% is less than to %%this%%.\n */\n lt(other) { return this.cmp(other) < 0; }\n /**\n * Returns true if %%other%% is less than or equal to %%this%%.\n */\n lte(other) { return this.cmp(other) <= 0; }\n /**\n * Returns true if %%other%% is greater than to %%this%%.\n */\n gt(other) { return this.cmp(other) > 0; }\n /**\n * Returns true if %%other%% is greater than or equal to %%this%%.\n */\n gte(other) { return this.cmp(other) >= 0; }\n /**\n * Returns a new [[FixedNumber]] which is the largest **integer**\n * that is less than or equal to %%this%%.\n *\n * The decimal component of the result will always be ``0``.\n */\n floor() {\n let val = this.#val;\n if (this.#val < BN_0) {\n val -= this.#tens - BN_1;\n }\n val = (this.#val / this.#tens) * this.#tens;\n return this.#checkValue(val, \"floor\");\n }\n /**\n * Returns a new [[FixedNumber]] which is the smallest **integer**\n * that is greater than or equal to %%this%%.\n *\n * The decimal component of the result will always be ``0``.\n */\n ceiling() {\n let val = this.#val;\n if (this.#val > BN_0) {\n val += this.#tens - BN_1;\n }\n val = (this.#val / this.#tens) * this.#tens;\n return this.#checkValue(val, \"ceiling\");\n }\n /**\n * Returns a new [[FixedNumber]] with the decimal component\n * rounded up on ties at %%decimals%% places.\n */\n round(decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n // Not enough precision to not already be rounded\n if (decimals >= this.decimals) {\n return this;\n }\n const delta = this.decimals - decimals;\n const bump = BN_5 * getTens(delta - 1);\n let value = this.value + bump;\n const tens = getTens(delta);\n value = (value / tens) * tens;\n checkValue(value, this.#format, \"round\");\n return new FixedNumber(_guard, value, this.#format);\n }\n /**\n * Returns true if %%this%% is equal to ``0``.\n */\n isZero() { return (this.#val === BN_0); }\n /**\n * Returns true if %%this%% is less than ``0``.\n */\n isNegative() { return (this.#val < BN_0); }\n /**\n * Returns the string representation of %%this%%.\n */\n toString() { return this._value; }\n /**\n * Returns a float approximation.\n *\n * Due to IEEE 754 precission (or lack thereof), this function\n * can only return an approximation and most values will contain\n * rounding errors.\n */\n toUnsafeFloat() { return parseFloat(this.toString()); }\n /**\n * Return a new [[FixedNumber]] with the same value but has had\n * its field set to %%format%%.\n *\n * This will throw if the value cannot fit into %%format%%.\n */\n toFormat(format) {\n return FixedNumber.fromString(this.toString(), format);\n }\n /**\n * Creates a new [[FixedNumber]] for %%value%% divided by\n * %%decimal%% places with %%format%%.\n *\n * This will throw a [[NumericFaultError]] if %%value%% (once adjusted\n * for %%decimals%%) cannot fit in %%format%%, either due to overflow\n * or underflow (precision loss).\n */\n static fromValue(_value, _decimals, _format) {\n const decimals = (_decimals == null) ? 0 : getNumber(_decimals);\n const format = getFormat(_format);\n let value = getBigInt(_value, \"value\");\n const delta = decimals - format.decimals;\n if (delta > 0) {\n const tens = getTens(delta);\n assert((value % tens) === BN_0, \"value loses precision for format\", \"NUMERIC_FAULT\", {\n operation: \"fromValue\", fault: \"underflow\", value: _value\n });\n value /= tens;\n }\n else if (delta < 0) {\n value *= getTens(-delta);\n }\n checkValue(value, format, \"fromValue\");\n return new FixedNumber(_guard, value, format);\n }\n /**\n * Creates a new [[FixedNumber]] for %%value%% with %%format%%.\n *\n * This will throw a [[NumericFaultError]] if %%value%% cannot fit\n * in %%format%%, either due to overflow or underflow (precision loss).\n */\n static fromString(_value, _format) {\n const match = _value.match(/^(-?)([0-9]*)\\.?([0-9]*)$/);\n assertArgument(match && (match[2].length + match[3].length) > 0, \"invalid FixedNumber string value\", \"value\", _value);\n const format = getFormat(_format);\n let whole = (match[2] || \"0\"), decimal = (match[3] || \"\");\n // Pad out the decimals\n while (decimal.length < format.decimals) {\n decimal += Zeros;\n }\n // Check precision is safe\n assert(decimal.substring(format.decimals).match(/^0*$/), \"too many decimals for format\", \"NUMERIC_FAULT\", {\n operation: \"fromString\", fault: \"underflow\", value: _value\n });\n // Remove extra padding\n decimal = decimal.substring(0, format.decimals);\n const value = BigInt(match[1] + whole + decimal);\n checkValue(value, format, \"fromString\");\n return new FixedNumber(_guard, value, format);\n }\n /**\n * Creates a new [[FixedNumber]] with the big-endian representation\n * %%value%% with %%format%%.\n *\n * This will throw a [[NumericFaultError]] if %%value%% cannot fit\n * in %%format%% due to overflow.\n */\n static fromBytes(_value, _format) {\n let value = toBigInt(getBytes(_value, \"value\"));\n const format = getFormat(_format);\n if (format.signed) {\n value = fromTwos(value, format.width);\n }\n checkValue(value, format, \"fromBytes\");\n return new FixedNumber(_guard, value, format);\n }\n}\n//const f1 = FixedNumber.fromString(\"12.56\", \"fixed16x2\");\n//const f2 = FixedNumber.fromString(\"0.3\", \"fixed16x2\");\n//console.log(f1.divSignal(f2));\n//const BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","/**\n * Most interactions with Ethereum requires integer values, which use\n * the smallest magnitude unit.\n *\n * For example, imagine dealing with dollars and cents. Since dollars\n * are divisible, non-integer values are possible, such as ``$10.77``.\n * By using the smallest indivisible unit (i.e. cents), the value can\n * be kept as the integer ``1077``.\n *\n * When receiving decimal input from the user (as a decimal string),\n * the value should be converted to an integer and when showing a user\n * a value, the integer value should be converted to a decimal string.\n *\n * This creates a clear distinction, between values to be used by code\n * (integers) and values used for display logic to users (decimals).\n *\n * The native unit in Ethereum, //ether// is divisible to 18 decimal places,\n * where each individual unit is called a //wei//.\n *\n * @_subsection api/utils:Unit Conversion [about-units]\n */\nimport { assertArgument } from \"./errors.js\";\nimport { FixedNumber } from \"./fixednumber.js\";\nimport { getNumber } from \"./maths.js\";\nconst names = [\n \"wei\",\n \"kwei\",\n \"mwei\",\n \"gwei\",\n \"szabo\",\n \"finney\",\n \"ether\",\n];\n/**\n * Converts %%value%% into a //decimal string//, assuming %%unit%% decimal\n * places. The %%unit%% may be the number of decimal places or the name of\n * a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n *\n */\nexport function formatUnits(value, unit) {\n let decimals = 18;\n if (typeof (unit) === \"string\") {\n const index = names.indexOf(unit);\n assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n decimals = 3 * index;\n }\n else if (unit != null) {\n decimals = getNumber(unit, \"unit\");\n }\n return FixedNumber.fromValue(value, decimals, { decimals, width: 512 }).toString();\n}\n/**\n * Converts the //decimal string// %%value%% to a BigInt, assuming\n * %%unit%% decimal places. The %%unit%% may the number of decimal places\n * or the name of a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n */\nexport function parseUnits(value, unit) {\n assertArgument(typeof (value) === \"string\", \"value must be a string\", \"value\", value);\n let decimals = 18;\n if (typeof (unit) === \"string\") {\n const index = names.indexOf(unit);\n assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n decimals = 3 * index;\n }\n else if (unit != null) {\n decimals = getNumber(unit, \"unit\");\n }\n return FixedNumber.fromString(value, { decimals, width: 512 }).value;\n}\n/**\n * Converts %%value%% into a //decimal string// using 18 decimal places.\n */\nexport function formatEther(wei) {\n return formatUnits(wei, 18);\n}\n/**\n * Converts the //decimal string// %%ether%% to a BigInt, using 18\n * decimal places.\n */\nexport function parseEther(ether) {\n return parseUnits(ether, 18);\n}\n//# sourceMappingURL=units.js.map","import { defineProperties, concat, getBytesCopy, getNumber, hexlify, toBeArray, toBigInt, toNumber, assert, assertArgument\n/*, isError*/\n } from \"../../utils/index.js\";\n/**\n * @_ignore:\n */\nexport const WordSize = 32;\nconst Padding = new Uint8Array(WordSize);\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [\"then\"];\nconst _guard = {};\nconst resultNames = new WeakMap();\nfunction getNames(result) {\n return resultNames.get(result);\n}\nfunction setNames(result, names) {\n resultNames.set(result, names);\n}\nfunction throwError(name, error) {\n const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${name}`);\n wrapped.error = error;\n throw wrapped;\n}\nfunction toObject(names, items, deep) {\n if (names.indexOf(null) >= 0) {\n return items.map((item, index) => {\n if (item instanceof Result) {\n return toObject(getNames(item), item, deep);\n }\n return item;\n });\n }\n return names.reduce((accum, name, index) => {\n let item = items.getValue(name);\n if (!(name in accum)) {\n if (deep && item instanceof Result) {\n item = toObject(getNames(item), item, deep);\n }\n accum[name] = item;\n }\n return accum;\n }, {});\n}\n/**\n * A [[Result]] is a sub-class of Array, which allows accessing any\n * of its values either positionally by its index or, if keys are\n * provided by its name.\n *\n * @_docloc: api/abi\n */\nexport class Result extends Array {\n // No longer used; but cannot be removed as it will remove the\n // #private field from the .d.ts which may break backwards\n // compatibility\n #names;\n /**\n * @private\n */\n constructor(...args) {\n // To properly sub-class Array so the other built-in\n // functions work, the constructor has to behave fairly\n // well. So, in the event we are created via fromItems()\n // we build the read-only Result object we want, but on\n // any other input, we use the default constructor\n // constructor(guard: any, items: Array<any>, keys?: Array<null | string>);\n const guard = args[0];\n let items = args[1];\n let names = (args[2] || []).slice();\n let wrap = true;\n if (guard !== _guard) {\n items = args;\n names = [];\n wrap = false;\n }\n // Can't just pass in ...items since an array of length 1\n // is a special case in the super.\n super(items.length);\n items.forEach((item, index) => { this[index] = item; });\n // Find all unique keys\n const nameCounts = names.reduce((accum, name) => {\n if (typeof (name) === \"string\") {\n accum.set(name, (accum.get(name) || 0) + 1);\n }\n return accum;\n }, (new Map()));\n // Remove any key thats not unique\n setNames(this, Object.freeze(items.map((item, index) => {\n const name = names[index];\n if (name != null && nameCounts.get(name) === 1) {\n return name;\n }\n return null;\n })));\n // Dummy operations to prevent TypeScript from complaining\n this.#names = [];\n if (this.#names == null) {\n void (this.#names);\n }\n if (!wrap) {\n return;\n }\n // A wrapped Result is immutable\n Object.freeze(this);\n // Proxy indices and names so we can trap deferred errors\n const proxy = new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"string\") {\n // Index accessor\n if (prop.match(/^[0-9]+$/)) {\n const index = getNumber(prop, \"%index\");\n if (index < 0 || index >= this.length) {\n throw new RangeError(\"out of result range\");\n }\n const item = target[index];\n if (item instanceof Error) {\n throwError(`index ${index}`, item);\n }\n return item;\n }\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n const value = target[prop];\n if (value instanceof Function) {\n // Make sure functions work with private variables\n // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#no_private_property_forwarding\n return function (...args) {\n return value.apply((this === receiver) ? target : this, args);\n };\n }\n else if (!(prop in target)) {\n // Possible name accessor\n return target.getValue.apply((this === receiver) ? target : this, [prop]);\n }\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n setNames(proxy, getNames(this));\n return proxy;\n }\n /**\n * Returns the Result as a normal Array. If %%deep%%, any children\n * which are Result objects are also converted to a normal Array.\n *\n * This will throw if there are any outstanding deferred\n * errors.\n */\n toArray(deep) {\n const result = [];\n this.forEach((item, index) => {\n if (item instanceof Error) {\n throwError(`index ${index}`, item);\n }\n if (deep && item instanceof Result) {\n item = item.toArray(deep);\n }\n result.push(item);\n });\n return result;\n }\n /**\n * Returns the Result as an Object with each name-value pair. If\n * %%deep%%, any children which are Result objects are also\n * converted to an Object.\n *\n * This will throw if any value is unnamed, or if there are\n * any outstanding deferred errors.\n */\n toObject(deep) {\n const names = getNames(this);\n return names.reduce((accum, name, index) => {\n assert(name != null, `value at index ${index} unnamed`, \"UNSUPPORTED_OPERATION\", {\n operation: \"toObject()\"\n });\n return toObject(names, this, deep);\n }, {});\n }\n /**\n * @_ignore\n */\n slice(start, end) {\n if (start == null) {\n start = 0;\n }\n if (start < 0) {\n start += this.length;\n if (start < 0) {\n start = 0;\n }\n }\n if (end == null) {\n end = this.length;\n }\n if (end < 0) {\n end += this.length;\n if (end < 0) {\n end = 0;\n }\n }\n if (end > this.length) {\n end = this.length;\n }\n const _names = getNames(this);\n const result = [], names = [];\n for (let i = start; i < end; i++) {\n result.push(this[i]);\n names.push(_names[i]);\n }\n return new Result(_guard, result, names);\n }\n /**\n * @_ignore\n */\n filter(callback, thisArg) {\n const _names = getNames(this);\n const result = [], names = [];\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n if (item instanceof Error) {\n throwError(`index ${i}`, item);\n }\n if (callback.call(thisArg, item, i, this)) {\n result.push(item);\n names.push(_names[i]);\n }\n }\n return new Result(_guard, result, names);\n }\n /**\n * @_ignore\n */\n map(callback, thisArg) {\n const result = [];\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n if (item instanceof Error) {\n throwError(`index ${i}`, item);\n }\n result.push(callback.call(thisArg, item, i, this));\n }\n return result;\n }\n /**\n * Returns the value for %%name%%.\n *\n * Since it is possible to have a key whose name conflicts with\n * a method on a [[Result]] or its superclass Array, or any\n * JavaScript keyword, this ensures all named values are still\n * accessible by name.\n */\n getValue(name) {\n const index = getNames(this).indexOf(name);\n if (index === -1) {\n return undefined;\n }\n const value = this[index];\n if (value instanceof Error) {\n throwError(`property ${JSON.stringify(name)}`, value.error);\n }\n return value;\n }\n /**\n * Creates a new [[Result]] for %%items%% with each entry\n * also accessible by its corresponding name in %%keys%%.\n */\n static fromItems(items, keys) {\n return new Result(_guard, items, keys);\n }\n}\n/**\n * Returns all errors found in a [[Result]].\n *\n * Since certain errors encountered when creating a [[Result]] do\n * not impact the ability to continue parsing data, they are\n * deferred until they are actually accessed. Hence a faulty string\n * in an Event that is never used does not impact the program flow.\n *\n * However, sometimes it may be useful to access, identify or\n * validate correctness of a [[Result]].\n *\n * @_docloc api/abi\n */\nexport function checkResultErrors(result) {\n // Find the first error (if any)\n const errors = [];\n const checkErrors = function (path, object) {\n if (!Array.isArray(object)) {\n return;\n }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n try {\n checkErrors(childPath, object[key]);\n }\n catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n };\n checkErrors([], result);\n return errors;\n}\nfunction getValue(value) {\n let bytes = toBeArray(value);\n assert(bytes.length <= WordSize, \"value out-of-bounds\", \"BUFFER_OVERRUN\", { buffer: bytes, length: WordSize, offset: bytes.length });\n if (bytes.length !== WordSize) {\n bytes = getBytesCopy(concat([Padding.slice(bytes.length % WordSize), bytes]));\n }\n return bytes;\n}\n/**\n * @_ignore\n */\nexport class Coder {\n // The coder name:\n // - address, uint256, tuple, array, etc.\n name;\n // The fully expanded type, including composite types:\n // - address, uint256, tuple(address,bytes), uint256[3][4][], etc.\n type;\n // The localName bound in the signature, in this example it is \"baz\":\n // - tuple(address foo, uint bar) baz\n localName;\n // Whether this type is dynamic:\n // - Dynamic: bytes, string, address[], tuple(boolean[]), etc.\n // - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8)\n dynamic;\n constructor(name, type, localName, dynamic) {\n defineProperties(this, { name, type, localName, dynamic }, {\n name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n });\n }\n _throwError(message, value) {\n assertArgument(false, message, this.localName, value);\n }\n}\n/**\n * @_ignore\n */\nexport class Writer {\n // An array of WordSize lengthed objects to concatenation\n #data;\n #dataLength;\n constructor() {\n this.#data = [];\n this.#dataLength = 0;\n }\n get data() {\n return concat(this.#data);\n }\n get length() { return this.#dataLength; }\n #writeData(data) {\n this.#data.push(data);\n this.#dataLength += data.length;\n return data.length;\n }\n appendWriter(writer) {\n return this.#writeData(getBytesCopy(writer.data));\n }\n // Arrayish item; pad on the right to *nearest* WordSize\n writeBytes(value) {\n let bytes = getBytesCopy(value);\n const paddingOffset = bytes.length % WordSize;\n if (paddingOffset) {\n bytes = getBytesCopy(concat([bytes, Padding.slice(paddingOffset)]));\n }\n return this.#writeData(bytes);\n }\n // Numeric item; pad on the left *to* WordSize\n writeValue(value) {\n return this.#writeData(getValue(value));\n }\n // Inserts a numeric place-holder, returning a callback that can\n // be used to asjust the value later\n writeUpdatableValue() {\n const offset = this.#data.length;\n this.#data.push(Padding);\n this.#dataLength += WordSize;\n return (value) => {\n this.#data[offset] = getValue(value);\n };\n }\n}\n/**\n * @_ignore\n */\nexport class Reader {\n // Allows incomplete unpadded data to be read; otherwise an error\n // is raised if attempting to overrun the buffer. This is required\n // to deal with an old Solidity bug, in which event data for\n // external (not public thoguh) was tightly packed.\n allowLoose;\n #data;\n #offset;\n #bytesRead;\n #parent;\n #maxInflation;\n constructor(data, allowLoose, maxInflation) {\n defineProperties(this, { allowLoose: !!allowLoose });\n this.#data = getBytesCopy(data);\n this.#bytesRead = 0;\n this.#parent = null;\n this.#maxInflation = (maxInflation != null) ? maxInflation : 1024;\n this.#offset = 0;\n }\n get data() { return hexlify(this.#data); }\n get dataLength() { return this.#data.length; }\n get consumed() { return this.#offset; }\n get bytes() { return new Uint8Array(this.#data); }\n #incrementBytesRead(count) {\n if (this.#parent) {\n return this.#parent.#incrementBytesRead(count);\n }\n this.#bytesRead += count;\n // Check for excessive inflation (see: #4537)\n assert(this.#maxInflation < 1 || this.#bytesRead <= this.#maxInflation * this.dataLength, `compressed ABI data exceeds inflation ratio of ${this.#maxInflation} ( see: https:/\\/github.com/ethers-io/ethers.js/issues/4537 )`, \"BUFFER_OVERRUN\", {\n buffer: getBytesCopy(this.#data), offset: this.#offset,\n length: count, info: {\n bytesRead: this.#bytesRead,\n dataLength: this.dataLength\n }\n });\n }\n #peekBytes(offset, length, loose) {\n let alignedLength = Math.ceil(length / WordSize) * WordSize;\n if (this.#offset + alignedLength > this.#data.length) {\n if (this.allowLoose && loose && this.#offset + length <= this.#data.length) {\n alignedLength = length;\n }\n else {\n assert(false, \"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n buffer: getBytesCopy(this.#data),\n length: this.#data.length,\n offset: this.#offset + alignedLength\n });\n }\n }\n return this.#data.slice(this.#offset, this.#offset + alignedLength);\n }\n // Create a sub-reader with the same underlying data, but offset\n subReader(offset) {\n const reader = new Reader(this.#data.slice(this.#offset + offset), this.allowLoose, this.#maxInflation);\n reader.#parent = this;\n return reader;\n }\n // Read bytes\n readBytes(length, loose) {\n let bytes = this.#peekBytes(0, length, !!loose);\n this.#incrementBytesRead(length);\n this.#offset += bytes.length;\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n // Read a numeric values\n readValue() {\n return toBigInt(this.readBytes(WordSize));\n }\n readIndex() {\n return toNumber(this.readBytes(WordSize));\n }\n}\n//# sourceMappingURL=abstract-coder.js.map","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nfunction bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!u8a(data))\n throw new Error(`expected Uint8Array, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapXOFConstructorWithOpts, } from './utils.js';\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n number(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n exists(this);\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n exists(this, false);\n bytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n number(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n output(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","/**\n * Cryptographic hashing functions\n *\n * @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\nlet locked = false;\nconst _keccak256 = function (data) {\n return keccak_256(data);\n};\nlet __keccak256 = _keccak256;\n/**\n * Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n * The %%data%% **must** be a data representation, to compute the\n * hash of UTF-8 data use the [[id]] function.\n *\n * @returns DataHexstring\n * @example:\n * keccak256(\"0x\")\n * //_result:\n *\n * keccak256(\"0x1337\")\n * //_result:\n *\n * keccak256(new Uint8Array([ 0x13, 0x37 ]))\n * //_result:\n *\n * // Strings are assumed to be DataHexString, otherwise it will\n * // throw. To hash UTF-8 data, see the note above.\n * keccak256(\"Hello World\")\n * //_error:\n */\nexport function keccak256(_data) {\n const data = getBytes(_data, \"data\");\n return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function () { locked = true; };\nkeccak256.register = function (func) {\n if (locked) {\n throw new TypeError(\"keccak256 is locked\");\n }\n __keccak256 = func;\n};\nObject.freeze(keccak256);\n//# sourceMappingURL=keccak.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\nfunction getChecksumAddress(address) {\n // if (!isHexString(address, 20)) {\n // logger.throwArgumentError(\"invalid address\", \"address\", address);\n // }\n address = address.toLowerCase();\n const chars = address.substring(2).split(\"\");\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n const hashed = getBytes(keccak256(expanded));\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return \"0x\" + chars.join(\"\");\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nconst ibanLookup = {};\nfor (let i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (let i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = \"0\" + checksum;\n }\n return checksum;\n}\n;\nconst Base36 = (function () {\n ;\n const result = {};\n for (let i = 0; i < 36; i++) {\n const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n result[key] = BigInt(i);\n }\n return result;\n})();\nfunction fromBase36(value) {\n value = value.toLowerCase();\n let result = BN_0;\n for (let i = 0; i < value.length; i++) {\n result = result * BN_36 + Base36[value[i]];\n }\n return result;\n}\n/**\n * Returns a normalized and checksumed address for %%address%%.\n * This accepts non-checksum addresses, checksum addresses and\n * [[getIcapAddress]] formats.\n *\n * The checksum in Ethereum uses the capitalization (upper-case\n * vs lower-case) of the characters within an address to encode\n * its checksum, which offers, on average, a checksum of 15-bits.\n *\n * If %%address%% contains both upper-case and lower-case, it is\n * assumed to already be a checksum address and its checksum is\n * validated, and if the address fails its expected checksum an\n * error is thrown.\n *\n * If you wish the checksum of %%address%% to be ignore, it should\n * be converted to lower-case (i.e. ``.toLowercase()``) before\n * being passed in. This should be a very rare situation though,\n * that you wish to bypass the safegaurds in place to protect\n * against an address that has been incorrectly copied from another\n * source.\n *\n * @example:\n * // Adds the checksum (via upper-casing specific letters)\n * getAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\")\n * //_result:\n *\n * // Converts ICAP address and adds checksum\n * getAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if an address contains mixed case,\n * // but the checksum fails\n * getAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_error:\n */\nexport function getAddress(address) {\n assertArgument(typeof (address) === \"string\", \"invalid address\", \"address\", address);\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (!address.startsWith(\"0x\")) {\n address = \"0x\" + address;\n }\n const result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address, \"bad address checksum\", \"address\", address);\n return result;\n }\n // Maybe ICAP? (we only support direct mode)\n if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n assertArgument(address.substring(2, 4) === ibanChecksum(address), \"bad icap checksum\", \"address\", address);\n let result = fromBase36(address.substring(4)).toString(16);\n while (result.length < 40) {\n result = \"0\" + result;\n }\n return getChecksumAddress(\"0x\" + result);\n }\n assertArgument(false, \"invalid address\", \"address\", address);\n}\n/**\n * The [ICAP Address format](link-icap) format is an early checksum\n * format which attempts to be compatible with the banking\n * industry [IBAN format](link-wiki-iban) for bank accounts.\n *\n * It is no longer common or a recommended format.\n *\n * @example:\n * getIcapAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\");\n * //_result:\n *\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n * //_result:\n *\n * // Throws an error if the ICAP checksum is wrong\n * getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37\");\n * //_error:\n */\nexport function getIcapAddress(address) {\n //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = \"0\" + base36;\n }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n//# sourceMappingURL=address.js.map","import { assert, assertArgument } from \"../utils/index.js\";\nimport { getAddress } from \"./address.js\";\n/**\n * Returns true if %%value%% is an object which implements the\n * [[Addressable]] interface.\n *\n * @example:\n * // Wallets and AbstractSigner sub-classes\n * isAddressable(Wallet.createRandom())\n * //_result:\n *\n * // Contracts\n * contract = new Contract(\"dai.tokens.ethers.eth\", [ ], provider)\n * isAddressable(contract)\n * //_result:\n */\nexport function isAddressable(value) {\n return (value && typeof (value.getAddress) === \"function\");\n}\n/**\n * Returns true if %%value%% is a valid address.\n *\n * @example:\n * // Valid address\n * isAddress(\"0x8ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_result:\n *\n * // Valid ICAP address\n * isAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\")\n * //_result:\n *\n * // Invalid checksum\n * isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBa72\")\n * //_result:\n *\n * // Invalid ICAP checksum\n * isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n * //_result:\n *\n * // Not an address (an ENS name requires a provided and an\n * // asynchronous API to access)\n * isAddress(\"ricmoo.eth\")\n * //_result:\n */\nexport function isAddress(value) {\n try {\n getAddress(value);\n return true;\n }\n catch (error) { }\n return false;\n}\nasync function checkAddress(target, promise) {\n const result = await promise;\n if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n assert(typeof (target) !== \"string\", \"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n assertArgument(false, \"invalid AddressLike value; did not resolve to a value address\", \"target\", target);\n }\n return getAddress(result);\n}\n/**\n * Resolves to an address for the %%target%%, which may be any\n * supported address type, an [[Addressable]] or a Promise which\n * resolves to an address.\n *\n * If an ENS name is provided, but that name has not been correctly\n * configured a [[UnconfiguredNameError]] is thrown.\n *\n * @example:\n * addr = \"0x6B175474E89094C44Da98b954EedeAC495271d0F\"\n *\n * // Addresses are return synchronously\n * resolveAddress(addr, provider)\n * //_result:\n *\n * // Address promises are resolved asynchronously\n * resolveAddress(Promise.resolve(addr))\n * //_result:\n *\n * // ENS names are resolved asynchronously\n * resolveAddress(\"dai.tokens.ethers.eth\", provider)\n * //_result:\n *\n * // Addressable objects are resolved asynchronously\n * contract = new Contract(addr, [ ])\n * resolveAddress(contract, provider)\n * //_result:\n *\n * // Unconfigured ENS names reject\n * resolveAddress(\"nothing-here.ricmoo.eth\", provider)\n * //_error:\n *\n * // ENS names require a NameResolver object passed in\n * // (notice the provider was omitted)\n * resolveAddress(\"nothing-here.ricmoo.eth\")\n * //_error:\n */\nexport function resolveAddress(target, resolver) {\n if (typeof (target) === \"string\") {\n if (target.match(/^0x[0-9a-f]{40}$/i)) {\n return getAddress(target);\n }\n assert(resolver != null, \"ENS resolution requires a provider\", \"UNSUPPORTED_OPERATION\", { operation: \"resolveName\" });\n return checkAddress(target, resolver.resolveName(target));\n }\n else if (isAddressable(target)) {\n return checkAddress(target, target.getAddress());\n }\n else if (target && typeof (target.then) === \"function\") {\n return checkAddress(target, target);\n }\n assertArgument(false, \"unsupported addressable value\", \"target\", target);\n}\n//# sourceMappingURL=checks.js.map","/**\n * A Typed object allows a value to have its type explicitly\n * specified.\n *\n * For example, in Solidity, the value ``45`` could represent a\n * ``uint8`` or a ``uint256``. The value ``0x1234`` could represent\n * a ``bytes2`` or ``bytes``.\n *\n * Since JavaScript has no meaningful way to explicitly inform any\n * APIs which what the type is, this allows transparent interoperation\n * with Soldity.\n *\n * @_subsection: api/abi:Typed Values\n */\nimport { assertPrivate, defineProperties } from \"../utils/index.js\";\nconst _gaurd = {};\nfunction n(value, width) {\n let signed = false;\n if (width < 0) {\n signed = true;\n width *= -1;\n }\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `${signed ? \"\" : \"u\"}int${width}`, value, { signed, width });\n}\nfunction b(value, size) {\n // @TODO: Check range is valid for value\n return new Typed(_gaurd, `bytes${(size) ? size : \"\"}`, value, { size });\n}\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\n/**\n * The **Typed** class to wrap values providing explicit type information.\n */\nexport class Typed {\n /**\n * The type, as a Solidity-compatible type.\n */\n type;\n /**\n * The actual value.\n */\n value;\n #options;\n /**\n * @_ignore:\n */\n _typedSymbol;\n /**\n * @_ignore:\n */\n constructor(gaurd, type, value, options) {\n if (options == null) {\n options = null;\n }\n assertPrivate(_gaurd, gaurd, \"Typed\");\n defineProperties(this, { _typedSymbol, type, value });\n this.#options = options;\n // Check the value is valid\n this.format();\n }\n /**\n * Format the type as a Human-Readable type.\n */\n format() {\n if (this.type === \"array\") {\n throw new Error(\"\");\n }\n else if (this.type === \"dynamicArray\") {\n throw new Error(\"\");\n }\n else if (this.type === \"tuple\") {\n return `tuple(${this.value.map((v) => v.format()).join(\",\")})`;\n }\n return this.type;\n }\n /**\n * The default value returned by this type.\n */\n defaultValue() {\n return 0;\n }\n /**\n * The minimum value for numeric types.\n */\n minValue() {\n return 0;\n }\n /**\n * The maximum value for numeric types.\n */\n maxValue() {\n return 0;\n }\n /**\n * Returns ``true`` and provides a type guard is this is a [[TypedBigInt]].\n */\n isBigInt() {\n return !!(this.type.match(/^u?int[0-9]+$/));\n }\n /**\n * Returns ``true`` and provides a type guard is this is a [[TypedData]].\n */\n isData() {\n return this.type.startsWith(\"bytes\");\n }\n /**\n * Returns ``true`` and provides a type guard is this is a [[TypedString]].\n */\n isString() {\n return (this.type === \"string\");\n }\n /**\n * Returns the tuple name, if this is a tuple. Throws otherwise.\n */\n get tupleName() {\n if (this.type !== \"tuple\") {\n throw TypeError(\"not a tuple\");\n }\n return this.#options;\n }\n // Returns the length of this type as an array\n // - `null` indicates the length is unforced, it could be dynamic\n // - `-1` indicates the length is dynamic\n // - any other value indicates it is a static array and is its length\n /**\n * Returns the length of the array type or ``-1`` if it is dynamic.\n *\n * Throws if the type is not an array.\n */\n get arrayLength() {\n if (this.type !== \"array\") {\n throw TypeError(\"not an array\");\n }\n if (this.#options === true) {\n return -1;\n }\n if (this.#options === false) {\n return (this.value).length;\n }\n return null;\n }\n /**\n * Returns a new **Typed** of %%type%% with the %%value%%.\n */\n static from(type, value) {\n return new Typed(_gaurd, type, value);\n }\n /**\n * Return a new ``uint8`` type for %%v%%.\n */\n static uint8(v) { return n(v, 8); }\n /**\n * Return a new ``uint16`` type for %%v%%.\n */\n static uint16(v) { return n(v, 16); }\n /**\n * Return a new ``uint24`` type for %%v%%.\n */\n static uint24(v) { return n(v, 24); }\n /**\n * Return a new ``uint32`` type for %%v%%.\n */\n static uint32(v) { return n(v, 32); }\n /**\n * Return a new ``uint40`` type for %%v%%.\n */\n static uint40(v) { return n(v, 40); }\n /**\n * Return a new ``uint48`` type for %%v%%.\n */\n static uint48(v) { return n(v, 48); }\n /**\n * Return a new ``uint56`` type for %%v%%.\n */\n static uint56(v) { return n(v, 56); }\n /**\n * Return a new ``uint64`` type for %%v%%.\n */\n static uint64(v) { return n(v, 64); }\n /**\n * Return a new ``uint72`` type for %%v%%.\n */\n static uint72(v) { return n(v, 72); }\n /**\n * Return a new ``uint80`` type for %%v%%.\n */\n static uint80(v) { return n(v, 80); }\n /**\n * Return a new ``uint88`` type for %%v%%.\n */\n static uint88(v) { return n(v, 88); }\n /**\n * Return a new ``uint96`` type for %%v%%.\n */\n static uint96(v) { return n(v, 96); }\n /**\n * Return a new ``uint104`` type for %%v%%.\n */\n static uint104(v) { return n(v, 104); }\n /**\n * Return a new ``uint112`` type for %%v%%.\n */\n static uint112(v) { return n(v, 112); }\n /**\n * Return a new ``uint120`` type for %%v%%.\n */\n static uint120(v) { return n(v, 120); }\n /**\n * Return a new ``uint128`` type for %%v%%.\n */\n static uint128(v) { return n(v, 128); }\n /**\n * Return a new ``uint136`` type for %%v%%.\n */\n static uint136(v) { return n(v, 136); }\n /**\n * Return a new ``uint144`` type for %%v%%.\n */\n static uint144(v) { return n(v, 144); }\n /**\n * Return a new ``uint152`` type for %%v%%.\n */\n static uint152(v) { return n(v, 152); }\n /**\n * Return a new ``uint160`` type for %%v%%.\n */\n static uint160(v) { return n(v, 160); }\n /**\n * Return a new ``uint168`` type for %%v%%.\n */\n static uint168(v) { return n(v, 168); }\n /**\n * Return a new ``uint176`` type for %%v%%.\n */\n static uint176(v) { return n(v, 176); }\n /**\n * Return a new ``uint184`` type for %%v%%.\n */\n static uint184(v) { return n(v, 184); }\n /**\n * Return a new ``uint192`` type for %%v%%.\n */\n static uint192(v) { return n(v, 192); }\n /**\n * Return a new ``uint200`` type for %%v%%.\n */\n static uint200(v) { return n(v, 200); }\n /**\n * Return a new ``uint208`` type for %%v%%.\n */\n static uint208(v) { return n(v, 208); }\n /**\n * Return a new ``uint216`` type for %%v%%.\n */\n static uint216(v) { return n(v, 216); }\n /**\n * Return a new ``uint224`` type for %%v%%.\n */\n static uint224(v) { return n(v, 224); }\n /**\n * Return a new ``uint232`` type for %%v%%.\n */\n static uint232(v) { return n(v, 232); }\n /**\n * Return a new ``uint240`` type for %%v%%.\n */\n static uint240(v) { return n(v, 240); }\n /**\n * Return a new ``uint248`` type for %%v%%.\n */\n static uint248(v) { return n(v, 248); }\n /**\n * Return a new ``uint256`` type for %%v%%.\n */\n static uint256(v) { return n(v, 256); }\n /**\n * Return a new ``uint256`` type for %%v%%.\n */\n static uint(v) { return n(v, 256); }\n /**\n * Return a new ``int8`` type for %%v%%.\n */\n static int8(v) { return n(v, -8); }\n /**\n * Return a new ``int16`` type for %%v%%.\n */\n static int16(v) { return n(v, -16); }\n /**\n * Return a new ``int24`` type for %%v%%.\n */\n static int24(v) { return n(v, -24); }\n /**\n * Return a new ``int32`` type for %%v%%.\n */\n static int32(v) { return n(v, -32); }\n /**\n * Return a new ``int40`` type for %%v%%.\n */\n static int40(v) { return n(v, -40); }\n /**\n * Return a new ``int48`` type for %%v%%.\n */\n static int48(v) { return n(v, -48); }\n /**\n * Return a new ``int56`` type for %%v%%.\n */\n static int56(v) { return n(v, -56); }\n /**\n * Return a new ``int64`` type for %%v%%.\n */\n static int64(v) { return n(v, -64); }\n /**\n * Return a new ``int72`` type for %%v%%.\n */\n static int72(v) { return n(v, -72); }\n /**\n * Return a new ``int80`` type for %%v%%.\n */\n static int80(v) { return n(v, -80); }\n /**\n * Return a new ``int88`` type for %%v%%.\n */\n static int88(v) { return n(v, -88); }\n /**\n * Return a new ``int96`` type for %%v%%.\n */\n static int96(v) { return n(v, -96); }\n /**\n * Return a new ``int104`` type for %%v%%.\n */\n static int104(v) { return n(v, -104); }\n /**\n * Return a new ``int112`` type for %%v%%.\n */\n static int112(v) { return n(v, -112); }\n /**\n * Return a new ``int120`` type for %%v%%.\n */\n static int120(v) { return n(v, -120); }\n /**\n * Return a new ``int128`` type for %%v%%.\n */\n static int128(v) { return n(v, -128); }\n /**\n * Return a new ``int136`` type for %%v%%.\n */\n static int136(v) { return n(v, -136); }\n /**\n * Return a new ``int144`` type for %%v%%.\n */\n static int144(v) { return n(v, -144); }\n /**\n * Return a new ``int52`` type for %%v%%.\n */\n static int152(v) { return n(v, -152); }\n /**\n * Return a new ``int160`` type for %%v%%.\n */\n static int160(v) { return n(v, -160); }\n /**\n * Return a new ``int168`` type for %%v%%.\n */\n static int168(v) { return n(v, -168); }\n /**\n * Return a new ``int176`` type for %%v%%.\n */\n static int176(v) { return n(v, -176); }\n /**\n * Return a new ``int184`` type for %%v%%.\n */\n static int184(v) { return n(v, -184); }\n /**\n * Return a new ``int92`` type for %%v%%.\n */\n static int192(v) { return n(v, -192); }\n /**\n * Return a new ``int200`` type for %%v%%.\n */\n static int200(v) { return n(v, -200); }\n /**\n * Return a new ``int208`` type for %%v%%.\n */\n static int208(v) { return n(v, -208); }\n /**\n * Return a new ``int216`` type for %%v%%.\n */\n static int216(v) { return n(v, -216); }\n /**\n * Return a new ``int224`` type for %%v%%.\n */\n static int224(v) { return n(v, -224); }\n /**\n * Return a new ``int232`` type for %%v%%.\n */\n static int232(v) { return n(v, -232); }\n /**\n * Return a new ``int240`` type for %%v%%.\n */\n static int240(v) { return n(v, -240); }\n /**\n * Return a new ``int248`` type for %%v%%.\n */\n static int248(v) { return n(v, -248); }\n /**\n * Return a new ``int256`` type for %%v%%.\n */\n static int256(v) { return n(v, -256); }\n /**\n * Return a new ``int256`` type for %%v%%.\n */\n static int(v) { return n(v, -256); }\n /**\n * Return a new ``bytes1`` type for %%v%%.\n */\n static bytes1(v) { return b(v, 1); }\n /**\n * Return a new ``bytes2`` type for %%v%%.\n */\n static bytes2(v) { return b(v, 2); }\n /**\n * Return a new ``bytes3`` type for %%v%%.\n */\n static bytes3(v) { return b(v, 3); }\n /**\n * Return a new ``bytes4`` type for %%v%%.\n */\n static bytes4(v) { return b(v, 4); }\n /**\n * Return a new ``bytes5`` type for %%v%%.\n */\n static bytes5(v) { return b(v, 5); }\n /**\n * Return a new ``bytes6`` type for %%v%%.\n */\n static bytes6(v) { return b(v, 6); }\n /**\n * Return a new ``bytes7`` type for %%v%%.\n */\n static bytes7(v) { return b(v, 7); }\n /**\n * Return a new ``bytes8`` type for %%v%%.\n */\n static bytes8(v) { return b(v, 8); }\n /**\n * Return a new ``bytes9`` type for %%v%%.\n */\n static bytes9(v) { return b(v, 9); }\n /**\n * Return a new ``bytes10`` type for %%v%%.\n */\n static bytes10(v) { return b(v, 10); }\n /**\n * Return a new ``bytes11`` type for %%v%%.\n */\n static bytes11(v) { return b(v, 11); }\n /**\n * Return a new ``bytes12`` type for %%v%%.\n */\n static bytes12(v) { return b(v, 12); }\n /**\n * Return a new ``bytes13`` type for %%v%%.\n */\n static bytes13(v) { return b(v, 13); }\n /**\n * Return a new ``bytes14`` type for %%v%%.\n */\n static bytes14(v) { return b(v, 14); }\n /**\n * Return a new ``bytes15`` type for %%v%%.\n */\n static bytes15(v) { return b(v, 15); }\n /**\n * Return a new ``bytes16`` type for %%v%%.\n */\n static bytes16(v) { return b(v, 16); }\n /**\n * Return a new ``bytes17`` type for %%v%%.\n */\n static bytes17(v) { return b(v, 17); }\n /**\n * Return a new ``bytes18`` type for %%v%%.\n */\n static bytes18(v) { return b(v, 18); }\n /**\n * Return a new ``bytes19`` type for %%v%%.\n */\n static bytes19(v) { return b(v, 19); }\n /**\n * Return a new ``bytes20`` type for %%v%%.\n */\n static bytes20(v) { return b(v, 20); }\n /**\n * Return a new ``bytes21`` type for %%v%%.\n */\n static bytes21(v) { return b(v, 21); }\n /**\n * Return a new ``bytes22`` type for %%v%%.\n */\n static bytes22(v) { return b(v, 22); }\n /**\n * Return a new ``bytes23`` type for %%v%%.\n */\n static bytes23(v) { return b(v, 23); }\n /**\n * Return a new ``bytes24`` type for %%v%%.\n */\n static bytes24(v) { return b(v, 24); }\n /**\n * Return a new ``bytes25`` type for %%v%%.\n */\n static bytes25(v) { return b(v, 25); }\n /**\n * Return a new ``bytes26`` type for %%v%%.\n */\n static bytes26(v) { return b(v, 26); }\n /**\n * Return a new ``bytes27`` type for %%v%%.\n */\n static bytes27(v) { return b(v, 27); }\n /**\n * Return a new ``bytes28`` type for %%v%%.\n */\n static bytes28(v) { return b(v, 28); }\n /**\n * Return a new ``bytes29`` type for %%v%%.\n */\n static bytes29(v) { return b(v, 29); }\n /**\n * Return a new ``bytes30`` type for %%v%%.\n */\n static bytes30(v) { return b(v, 30); }\n /**\n * Return a new ``bytes31`` type for %%v%%.\n */\n static bytes31(v) { return b(v, 31); }\n /**\n * Return a new ``bytes32`` type for %%v%%.\n */\n static bytes32(v) { return b(v, 32); }\n /**\n * Return a new ``address`` type for %%v%%.\n */\n static address(v) { return new Typed(_gaurd, \"address\", v); }\n /**\n * Return a new ``bool`` type for %%v%%.\n */\n static bool(v) { return new Typed(_gaurd, \"bool\", !!v); }\n /**\n * Return a new ``bytes`` type for %%v%%.\n */\n static bytes(v) { return new Typed(_gaurd, \"bytes\", v); }\n /**\n * Return a new ``string`` type for %%v%%.\n */\n static string(v) { return new Typed(_gaurd, \"string\", v); }\n /**\n * Return a new ``array`` type for %%v%%, allowing %%dynamic%% length.\n */\n static array(v, dynamic) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"array\", v, dynamic);\n }\n /**\n * Return a new ``tuple`` type for %%v%%, with the optional %%name%%.\n */\n static tuple(v, name) {\n throw new Error(\"not implemented yet\");\n return new Typed(_gaurd, \"tuple\", v, name);\n }\n /**\n * Return a new ``uint8`` type for %%v%%.\n */\n static overrides(v) {\n return new Typed(_gaurd, \"overrides\", Object.assign({}, v));\n }\n /**\n * Returns true only if %%value%% is a [[Typed]] instance.\n */\n static isTyped(value) {\n return (value\n && typeof (value) === \"object\"\n && \"_typedSymbol\" in value\n && value._typedSymbol === _typedSymbol);\n }\n /**\n * If the value is a [[Typed]] instance, validates the underlying value\n * and returns it, otherwise returns value directly.\n *\n * This is useful for functions that with to accept either a [[Typed]]\n * object or values.\n */\n static dereference(value, type) {\n if (Typed.isTyped(value)) {\n if (value.type !== type) {\n throw new Error(`invalid type: expecetd ${type}, got ${value.type}`);\n }\n return value.value;\n }\n return value;\n }\n}\n//# sourceMappingURL=typed.js.map","import { getAddress } from \"../../address/index.js\";\nimport { toBeHex } from \"../../utils/maths.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, _value) {\n let value = Typed.dereference(_value, \"string\");\n try {\n value = getAddress(value);\n }\n catch (error) {\n return this._throwError(error.message, _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(toBeHex(reader.readValue(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","import { Coder } from \"./abstract-coder.js\";\n/**\n * Clones the functionality of an existing Coder, but without a localName\n *\n * @_ignore\n */\nexport class AnonymousCoder extends Coder {\n coder;\n constructor(coder) {\n super(coder.name, coder.type, \"_\", coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","import { defineProperties, isError, assert, assertArgument, assertArgumentCount } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\n/**\n * @_ignore\n */\nexport function pack(writer, coders, values) {\n let arrayValues = [];\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n assert(name, \"cannot encode object for signature with missing names\", \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n assert(!unique[name], \"cannot encode object for signature with duplicate names\", \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n unique[name] = true;\n return values[name];\n });\n }\n else {\n assertArgument(false, \"invalid tuple value\", \"tuple\", values);\n }\n assertArgument(coders.length === arrayValues.length, \"types/value length mismatch\", \"tuple\", values);\n let staticWriter = new Writer();\n let dynamicWriter = new Writer();\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\n/**\n * @_ignore\n */\nexport function unpack(reader, coders) {\n let values = [];\n let keys = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readIndex();\n let offsetReader = baseReader.subReader(offset);\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (isError(error, \"BUFFER_OVERRUN\")) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value == undefined) {\n throw new Error(\"investigate\");\n }\n values.push(value);\n keys.push(coder.localName || null);\n });\n return Result.fromItems(values, keys);\n}\n/**\n * @_ignore\n */\nexport class ArrayCoder extends Coder {\n coder;\n length;\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n defineProperties(this, { coder, length });\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"array\");\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n assertArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readIndex();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n assert(count * WordSize <= reader.dataLength, \"insufficient data length\", \"BUFFER_OVERRUN\", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength });\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return unpack(reader, coders);\n }\n}\n//# sourceMappingURL=array.js.map","import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"bool\");\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return !!reader.readValue();\n }\n}\n//# sourceMappingURL=boolean.js.map","import { getBytesCopy, hexlify } from \"../../utils/index.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = getBytesCopy(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readIndex(), true);\n }\n}\n/**\n * @_ignore\n */\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return hexlify(super.decode(reader));\n }\n}\n//# sourceMappingURL=bytes.js.map","import { defineProperties, getBytesCopy, hexlify } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n/**\n * @_ignore\n */\nexport class FixedBytesCoder extends Coder {\n size;\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n defineProperties(this, { size }, { size: \"number\" });\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, _value) {\n let data = getBytesCopy(Typed.dereference(_value, this.type));\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", _value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return hexlify(reader.readBytes(this.size));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","import { Coder } from \"./abstract-coder.js\";\nconst Empty = new Uint8Array([]);\n/**\n * @_ignore\n */\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes(Empty);\n }\n decode(reader) {\n reader.readBytes(0);\n return null;\n }\n}\n//# sourceMappingURL=null.js.map","import { defineProperties, fromTwos, getBigInt, mask, toTwos } from \"../../utils/index.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n/**\n * @_ignore\n */\nexport class NumberCoder extends Coder {\n size;\n signed;\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n defineProperties(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n }\n defaultValue() {\n return 0;\n }\n encode(writer, _value) {\n let value = getBigInt(Typed.dereference(_value, this.type));\n // Check bounds are safe for encoding\n let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n if (this.signed) {\n let bounds = mask(maxUintValue, (this.size * 8) - 1);\n if (value > bounds || value < -(bounds + BN_1)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n value = toTwos(value, 8 * WordSize);\n }\n else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n this._throwError(\"value out-of-bounds\", _value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n let value = mask(reader.readValue(), this.size * 8);\n if (this.signed) {\n value = fromTwos(value, this.size * 8);\n }\n return value;\n }\n}\n//# sourceMappingURL=number.js.map","import { toUtf8Bytes, toUtf8String } from \"../../utils/utf8.js\";\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\n/**\n * @_ignore\n */\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, _value) {\n return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","import { defineProperties } from \"../../utils/properties.js\";\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\nimport { pack, unpack } from \"./array.js\";\n/**\n * @_ignore\n */\nexport class TupleCoder extends Coder {\n coders;\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n defineProperties(this, { coders: Object.freeze(coders.slice()) });\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, _value) {\n const value = Typed.dereference(_value, \"tuple\");\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return unpack(reader, this.coders);\n }\n}\n//# sourceMappingURL=tuple.js.map","import { getAddress } from \"../address/index.js\";\nimport { assertArgument, isHexString } from \"../utils/index.js\";\nfunction accessSetify(addr, storageKeys) {\n return {\n address: getAddress(addr),\n storageKeys: storageKeys.map((storageKey, index) => {\n assertArgument(isHexString(storageKey, 32), \"invalid slot\", `storageKeys[${index}]`, storageKey);\n return storageKey.toLowerCase();\n })\n };\n}\n/**\n * Returns a [[AccessList]] from any ethers-supported access-list structure.\n */\nexport function accessListify(value) {\n if (Array.isArray(value)) {\n return value.map((set, index) => {\n if (Array.isArray(set)) {\n assertArgument(set.length === 2, \"invalid slot set\", `value[${index}]`, set);\n return accessSetify(set[0], set[1]);\n }\n assertArgument(set != null && typeof (set) === \"object\", \"invalid address-slot set\", \"value\", value);\n return accessSetify(set.address, set.storageKeys);\n });\n }\n assertArgument(value != null && typeof (value) === \"object\", \"invalid access list\", \"value\", value);\n const result = Object.keys(value).map((addr) => {\n const storageKeys = value[addr].reduce((accum, storageKey) => {\n accum[storageKey] = true;\n return accum;\n }, {});\n return accessSetify(addr, Object.keys(storageKeys).sort());\n });\n result.sort((a, b) => (a.address.localeCompare(b.address)));\n return result;\n}\n//# sourceMappingURL=accesslist.js.map","import { keccak256 } from \"../crypto/index.js\";\nimport { toUtf8Bytes } from \"../utils/index.js\";\n/**\n * A simple hashing function which operates on UTF-8 strings to\n * compute an 32-byte identifier.\n *\n * This simply computes the [UTF-8 bytes](toUtf8Bytes) and computes\n * the [[keccak256]].\n *\n * @example:\n * id(\"hello world\")\n * //_result:\n */\nexport function id(value) {\n return keccak256(toUtf8Bytes(value));\n}\n//# sourceMappingURL=id.js.map","/**\n * A fragment is a single item from an ABI, which may represent any of:\n *\n * - [Functions](FunctionFragment)\n * - [Events](EventFragment)\n * - [Constructors](ConstructorFragment)\n * - Custom [Errors](ErrorFragment)\n * - [Fallback or Receive](FallbackFragment) functions\n *\n * @_subsection api/abi/abi-coder:Fragments [about-fragments]\n */\nimport { defineProperties, getBigInt, getNumber, assert, assertPrivate, assertArgument } from \"../utils/index.js\";\nimport { id } from \"../hash/index.js\";\n;\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items) {\n const result = new Set();\n items.forEach((k) => result.add(k));\n return Object.freeze(result);\n}\nconst _kwVisibDeploy = \"external public payable override\";\nconst KwVisibDeploy = setify(_kwVisibDeploy.split(\" \"));\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view override\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\nconst _kwTypes = \"constructor error event fallback function receive struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\nconst _kwOther = \"tuple returns\";\n// All Keywords\nconst _keywords = [_kwTypes, _kwModifiers, _kwOther, _kwVisib].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n// Single character tokens\nconst SimpleTokens = {\n \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n \",\": \"COMMA\", \"@\": \"AT\"\n};\n// Parser regexes to consume the next token\nconst regexWhitespacePrefix = new RegExp(\"^(\\\\s*)\");\nconst regexNumberPrefix = new RegExp(\"^([0-9]+)\");\nconst regexIdPrefix = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\n// Parser regexs to check validity\nconst regexId = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)$\");\nconst regexType = new RegExp(\"^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$\");\nclass TokenString {\n #offset;\n #tokens;\n get offset() { return this.#offset; }\n get length() { return this.#tokens.length - this.#offset; }\n constructor(tokens) {\n this.#offset = 0;\n this.#tokens = tokens.slice();\n }\n clone() { return new TokenString(this.#tokens); }\n reset() { this.#offset = 0; }\n #subTokenString(from = 0, to = 0) {\n return new TokenString(this.#tokens.slice(from, to).map((t) => {\n return Object.freeze(Object.assign({}, t, {\n match: (t.match - from),\n linkBack: (t.linkBack - from),\n linkNext: (t.linkNext - from),\n }));\n }));\n }\n // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n popKeyword(allowed) {\n const top = this.peek();\n if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) {\n throw new Error(`expected keyword ${top.text}`);\n }\n return this.pop().text;\n }\n // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n popType(type) {\n if (this.peek().type !== type) {\n const top = this.peek();\n throw new Error(`expected ${type}; got ${top.type} ${JSON.stringify(top.text)}`);\n }\n return this.pop().text;\n }\n // Pops and returns a \"(\" TOKENS \")\"\n popParen() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = this.#subTokenString(this.#offset + 1, top.match + 1);\n this.#offset = top.match + 1;\n return result;\n }\n // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n popParams() {\n const top = this.peek();\n if (top.type !== \"OPEN_PAREN\") {\n throw new Error(\"bad start\");\n }\n const result = [];\n while (this.#offset < top.match - 1) {\n const link = this.peek().linkNext;\n result.push(this.#subTokenString(this.#offset + 1, link));\n this.#offset = link;\n }\n this.#offset = top.match + 1;\n return result;\n }\n // Returns the top Token, throwing if out of tokens\n peek() {\n if (this.#offset >= this.#tokens.length) {\n throw new Error(\"out-of-bounds\");\n }\n return this.#tokens[this.#offset];\n }\n // Returns the next value, if it is a keyword in `allowed`\n peekKeyword(allowed) {\n const top = this.peekType(\"KEYWORD\");\n return (top != null && allowed.has(top)) ? top : null;\n }\n // Returns the value of the next token if it is `type`\n peekType(type) {\n if (this.length === 0) {\n return null;\n }\n const top = this.peek();\n return (top.type === type) ? top.text : null;\n }\n // Returns the next token; throws if out of tokens\n pop() {\n const result = this.peek();\n this.#offset++;\n return result;\n }\n toString() {\n const tokens = [];\n for (let i = this.#offset; i < this.#tokens.length; i++) {\n const token = this.#tokens[i];\n tokens.push(`${token.type}:${token.text}`);\n }\n return `<TokenString ${tokens.join(\" \")}>`;\n }\n}\nfunction lex(text) {\n const tokens = [];\n const throwError = (message) => {\n const token = (offset < text.length) ? JSON.stringify(text[offset]) : \"$EOI\";\n throw new Error(`invalid token ${token} at ${offset}: ${message}`);\n };\n let brackets = [];\n let commas = [];\n let offset = 0;\n while (offset < text.length) {\n // Strip off any leading whitespace\n let cur = text.substring(offset);\n let match = cur.match(regexWhitespacePrefix);\n if (match) {\n offset += match[1].length;\n cur = text.substring(offset);\n }\n const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n tokens.push(token);\n let type = (SimpleTokens[cur[0]] || \"\");\n if (type) {\n token.type = type;\n token.text = cur[0];\n offset++;\n if (type === \"OPEN_PAREN\") {\n brackets.push(tokens.length - 1);\n commas.push(tokens.length - 1);\n }\n else if (type == \"CLOSE_PAREN\") {\n if (brackets.length === 0) {\n throwError(\"no matching open bracket\");\n }\n token.match = brackets.pop();\n (tokens[token.match]).match = tokens.length - 1;\n token.depth--;\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n }\n else if (type === \"COMMA\") {\n token.linkBack = commas.pop();\n (tokens[token.linkBack]).linkNext = tokens.length - 1;\n commas.push(tokens.length - 1);\n }\n else if (type === \"OPEN_BRACKET\") {\n token.type = \"BRACKET\";\n }\n else if (type === \"CLOSE_BRACKET\") {\n // Remove the CLOSE_BRACKET\n let suffix = tokens.pop().text;\n if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n const value = tokens.pop().text;\n suffix = value + suffix;\n (tokens[tokens.length - 1]).value = getNumber(value);\n }\n if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n throw new Error(\"missing opening bracket\");\n }\n (tokens[tokens.length - 1]).text += suffix;\n }\n continue;\n }\n match = cur.match(regexIdPrefix);\n if (match) {\n token.text = match[1];\n offset += token.text.length;\n if (Keywords.has(token.text)) {\n token.type = \"KEYWORD\";\n continue;\n }\n if (token.text.match(regexType)) {\n token.type = \"TYPE\";\n continue;\n }\n token.type = \"ID\";\n continue;\n }\n match = cur.match(regexNumberPrefix);\n if (match) {\n token.text = match[1];\n token.type = \"NUMBER\";\n offset += token.text.length;\n continue;\n }\n throw new Error(`unexpected token ${JSON.stringify(cur[0])} at position ${offset}`);\n }\n return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set, allowed) {\n let included = [];\n for (const key in allowed.keys()) {\n if (set.has(key)) {\n included.push(key);\n }\n }\n if (included.length > 1) {\n throw new Error(`conflicting types: ${included.join(\", \")}`);\n }\n}\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n// ...the name with an optional type, returning the name\nfunction consumeName(type, tokens) {\n if (tokens.peekKeyword(KwTypes)) {\n const keyword = tokens.pop().text;\n if (keyword !== type) {\n throw new Error(`expected ${type}, got ${keyword}`);\n }\n }\n return tokens.popType(\"ID\");\n}\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens, allowed) {\n const keywords = new Set();\n while (true) {\n const keyword = tokens.peekType(\"KEYWORD\");\n if (keyword == null || (allowed && !allowed.has(keyword))) {\n break;\n }\n tokens.pop();\n if (keywords.has(keyword)) {\n throw new Error(`duplicate keywords: ${JSON.stringify(keyword)}`);\n }\n keywords.add(keyword);\n }\n return Object.freeze(keywords);\n}\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens) {\n let modifiers = consumeKeywords(tokens, KwVisib);\n // Detect conflicting modifiers\n allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n // Process mutability states\n if (modifiers.has(\"view\")) {\n return \"view\";\n }\n if (modifiers.has(\"pure\")) {\n return \"pure\";\n }\n if (modifiers.has(\"payable\")) {\n return \"payable\";\n }\n if (modifiers.has(\"nonpayable\")) {\n return \"nonpayable\";\n }\n // Process legacy `constant` last\n if (modifiers.has(\"constant\")) {\n return \"view\";\n }\n return \"nonpayable\";\n}\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens, allowIndexed) {\n return tokens.popParams().map((t) => ParamType.from(t, allowIndexed));\n}\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens) {\n if (tokens.peekType(\"AT\")) {\n tokens.pop();\n if (tokens.peekType(\"NUMBER\")) {\n return getBigInt(tokens.pop().text);\n }\n throw new Error(\"invalid gas\");\n }\n return null;\n}\nfunction consumeEoi(tokens) {\n if (tokens.length) {\n throw new Error(`unexpected tokens at offset ${tokens.offset}: ${tokens.toString()}`);\n }\n}\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction verifyBasicType(type) {\n const match = type.match(regexType);\n assertArgument(match, \"invalid type\", \"type\", type);\n if (type === \"uint\") {\n return \"uint256\";\n }\n if (type === \"int\") {\n return \"int256\";\n }\n if (match[2]) {\n // bytesXX\n const length = parseInt(match[2]);\n assertArgument(length !== 0 && length <= 32, \"invalid bytes length\", \"type\", type);\n }\n else if (match[3]) {\n // intXX or uintXX\n const size = parseInt(match[3]);\n assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid numeric width\", \"type\", type);\n }\n return type;\n}\n// Make the Fragment constructors effectively private\nconst _guard = {};\nconst internal = Symbol.for(\"_ethers_internal\");\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nconst ErrorFragmentInternal = \"_ErrorInternal\";\nconst EventFragmentInternal = \"_EventInternal\";\nconst ConstructorFragmentInternal = \"_ConstructorInternal\";\nconst FallbackFragmentInternal = \"_FallbackInternal\";\nconst FunctionFragmentInternal = \"_FunctionInternal\";\nconst StructFragmentInternal = \"_StructInternal\";\n/**\n * Each input and output of a [[Fragment]] is an Array of **ParamType**.\n */\nexport class ParamType {\n /**\n * The local name of the parameter (or ``\"\"`` if unbound)\n */\n name;\n /**\n * The fully qualified type (e.g. ``\"address\"``, ``\"tuple(address)\"``,\n * ``\"uint256[3][]\"``)\n */\n type;\n /**\n * The base type (e.g. ``\"address\"``, ``\"tuple\"``, ``\"array\"``)\n */\n baseType;\n /**\n * True if the parameters is indexed.\n *\n * For non-indexable types this is ``null``.\n */\n indexed;\n /**\n * The components for the tuple.\n *\n * For non-tuple types this is ``null``.\n */\n components;\n /**\n * The array length, or ``-1`` for dynamic-lengthed arrays.\n *\n * For non-array types this is ``null``.\n */\n arrayLength;\n /**\n * The type of each child in the array.\n *\n * For non-array types this is ``null``.\n */\n arrayChildren;\n /**\n * @private\n */\n constructor(guard, name, type, baseType, indexed, components, arrayLength, arrayChildren) {\n assertPrivate(guard, _guard, \"ParamType\");\n Object.defineProperty(this, internal, { value: ParamTypeInternal });\n if (components) {\n components = Object.freeze(components.slice());\n }\n if (baseType === \"array\") {\n if (arrayLength == null || arrayChildren == null) {\n throw new Error(\"\");\n }\n }\n else if (arrayLength != null || arrayChildren != null) {\n throw new Error(\"\");\n }\n if (baseType === \"tuple\") {\n if (components == null) {\n throw new Error(\"\");\n }\n }\n else if (components != null) {\n throw new Error(\"\");\n }\n defineProperties(this, {\n name, type, baseType, indexed, components, arrayLength, arrayChildren\n });\n }\n /**\n * Return a string representation of this type.\n *\n * For example,\n *\n * ``sighash\" => \"(uint256,address)\"``\n *\n * ``\"minimal\" => \"tuple(uint256,address) indexed\"``\n *\n * ``\"full\" => \"tuple(uint256 foo, address bar) indexed baz\"``\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n const name = this.name || \"\";\n if (this.isArray()) {\n const result = JSON.parse(this.arrayChildren.format(\"json\"));\n result.name = name;\n result.type += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n return JSON.stringify(result);\n }\n const result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.isTuple()) {\n result.components = this.components.map((c) => JSON.parse(c.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.isArray()) {\n result += this.arrayChildren.format(format);\n result += `[${(this.arrayLength < 0 ? \"\" : String(this.arrayLength))}]`;\n }\n else {\n if (this.isTuple()) {\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === \"full\") ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== \"sighash\") {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === \"full\" && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n /**\n * Returns true if %%this%% is an Array type.\n *\n * This provides a type gaurd ensuring that [[arrayChildren]]\n * and [[arrayLength]] are non-null.\n */\n isArray() {\n return (this.baseType === \"array\");\n }\n /**\n * Returns true if %%this%% is a Tuple type.\n *\n * This provides a type gaurd ensuring that [[components]]\n * is non-null.\n */\n isTuple() {\n return (this.baseType === \"tuple\");\n }\n /**\n * Returns true if %%this%% is an Indexable type.\n *\n * This provides a type gaurd ensuring that [[indexed]]\n * is non-null.\n */\n isIndexable() {\n return (this.indexed != null);\n }\n /**\n * Walks the **ParamType** with %%value%%, calling %%process%%\n * on each type, destructing the %%value%% recursively.\n */\n walk(value, process) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const _this = this;\n return value.map((v) => (_this.arrayChildren.walk(v, process)));\n }\n if (this.isTuple()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid tuple value\");\n }\n if (value.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n const _this = this;\n return value.map((v, i) => (_this.components[i].walk(v, process)));\n }\n return process(this.type, value);\n }\n #walkAsync(promises, value, process, setValue) {\n if (this.isArray()) {\n if (!Array.isArray(value)) {\n throw new Error(\"invalid array value\");\n }\n if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n throw new Error(\"array is wrong length\");\n }\n const childType = this.arrayChildren;\n const result = value.slice();\n result.forEach((value, index) => {\n childType.#walkAsync(promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n if (this.isTuple()) {\n const components = this.components;\n // Convert the object into an array\n let result;\n if (Array.isArray(value)) {\n result = value.slice();\n }\n else {\n if (value == null || typeof (value) !== \"object\") {\n throw new Error(\"invalid tuple value\");\n }\n result = components.map((param) => {\n if (!param.name) {\n throw new Error(\"cannot use object value with unnamed components\");\n }\n if (!(param.name in value)) {\n throw new Error(`missing value for component ${param.name}`);\n }\n return value[param.name];\n });\n }\n if (result.length !== this.components.length) {\n throw new Error(\"array is wrong length\");\n }\n result.forEach((value, index) => {\n components[index].#walkAsync(promises, value, process, (value) => {\n result[index] = value;\n });\n });\n setValue(result);\n return;\n }\n const result = process(this.type, value);\n if (result.then) {\n promises.push((async function () { setValue(await result); })());\n }\n else {\n setValue(result);\n }\n }\n /**\n * Walks the **ParamType** with %%value%%, asynchronously calling\n * %%process%% on each type, destructing the %%value%% recursively.\n *\n * This can be used to resolve ENS names by walking and resolving each\n * ``\"address\"`` type.\n */\n async walkAsync(value, process) {\n const promises = [];\n const result = [value];\n this.#walkAsync(promises, value, process, (value) => {\n result[0] = value;\n });\n if (promises.length) {\n await Promise.all(promises);\n }\n return result[0];\n }\n /**\n * Creates a new **ParamType** for %%obj%%.\n *\n * If %%allowIndexed%% then the ``indexed`` keyword is permitted,\n * otherwise the ``indexed`` keyword will throw an error.\n */\n static from(obj, allowIndexed) {\n if (ParamType.isParamType(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return ParamType.from(lex(obj), allowIndexed);\n }\n catch (error) {\n assertArgument(false, \"invalid param type\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n let type = \"\", baseType = \"\";\n let comps = null;\n if (consumeKeywords(obj, setify([\"tuple\"])).has(\"tuple\") || obj.peekType(\"OPEN_PAREN\")) {\n // Tuple\n baseType = \"tuple\";\n comps = obj.popParams().map((t) => ParamType.from(t));\n type = `tuple(${comps.map((c) => c.format()).join(\",\")})`;\n }\n else {\n // Normal\n type = verifyBasicType(obj.popType(\"TYPE\"));\n baseType = type;\n }\n // Check for Array\n let arrayChildren = null;\n let arrayLength = null;\n while (obj.length && obj.peekType(\"BRACKET\")) {\n const bracket = obj.pop(); //arrays[i];\n arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n arrayLength = bracket.value;\n type += bracket.text;\n baseType = \"array\";\n comps = null;\n }\n let indexed = null;\n const keywords = consumeKeywords(obj, KwModifiers);\n if (keywords.has(\"indexed\")) {\n if (!allowIndexed) {\n throw new Error(\"\");\n }\n indexed = true;\n }\n const name = (obj.peekType(\"ID\") ? obj.pop().text : \"\");\n if (obj.length) {\n throw new Error(\"leftover tokens\");\n }\n return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n }\n const name = obj.name;\n assertArgument(!name || (typeof (name) === \"string\" && name.match(regexId)), \"invalid name\", \"obj.name\", name);\n let indexed = obj.indexed;\n if (indexed != null) {\n assertArgument(allowIndexed, \"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n indexed = !!indexed;\n }\n let type = obj.type;\n let arrayMatch = type.match(regexArrayType);\n if (arrayMatch) {\n const arrayLength = parseInt(arrayMatch[2] || \"-1\");\n const arrayChildren = ParamType.from({\n type: arrayMatch[1],\n components: obj.components\n });\n return new ParamType(_guard, name || \"\", type, \"array\", indexed, null, arrayLength, arrayChildren);\n }\n if (type === \"tuple\" || type.startsWith(\"tuple(\" /* fix: ) */) || type.startsWith(\"(\" /* fix: ) */)) {\n const comps = (obj.components != null) ? obj.components.map((c) => ParamType.from(c)) : null;\n const tuple = new ParamType(_guard, name || \"\", type, \"tuple\", indexed, comps, null, null);\n // @TODO: use lexer to validate and normalize type\n return tuple;\n }\n type = verifyBasicType(obj.type);\n return new ParamType(_guard, name || \"\", type, type, indexed, null, null, null);\n }\n /**\n * Returns true if %%value%% is a **ParamType**.\n */\n static isParamType(value) {\n return (value && value[internal] === ParamTypeInternal);\n }\n}\n/**\n * An abstract class to represent An individual fragment from a parse ABI.\n */\nexport class Fragment {\n /**\n * The type of the fragment.\n */\n type;\n /**\n * The inputs for the fragment.\n */\n inputs;\n /**\n * @private\n */\n constructor(guard, type, inputs) {\n assertPrivate(guard, _guard, \"Fragment\");\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { type, inputs });\n }\n /**\n * Creates a new **Fragment** for %%obj%%, wich can be any supported\n * ABI frgament type.\n */\n static from(obj) {\n if (typeof (obj) === \"string\") {\n // Try parsing JSON...\n try {\n Fragment.from(JSON.parse(obj));\n }\n catch (e) { }\n // ...otherwise, use the human-readable lexer\n return Fragment.from(lex(obj));\n }\n if (obj instanceof TokenString) {\n // Human-readable ABI (already lexed)\n const type = obj.peekKeyword(KwTypes);\n switch (type) {\n case \"constructor\": return ConstructorFragment.from(obj);\n case \"error\": return ErrorFragment.from(obj);\n case \"event\": return EventFragment.from(obj);\n case \"fallback\":\n case \"receive\":\n return FallbackFragment.from(obj);\n case \"function\": return FunctionFragment.from(obj);\n case \"struct\": return StructFragment.from(obj);\n }\n }\n else if (typeof (obj) === \"object\") {\n // JSON ABI\n switch (obj.type) {\n case \"constructor\": return ConstructorFragment.from(obj);\n case \"error\": return ErrorFragment.from(obj);\n case \"event\": return EventFragment.from(obj);\n case \"fallback\":\n case \"receive\":\n return FallbackFragment.from(obj);\n case \"function\": return FunctionFragment.from(obj);\n case \"struct\": return StructFragment.from(obj);\n }\n assert(false, `unsupported type: ${obj.type}`, \"UNSUPPORTED_OPERATION\", {\n operation: \"Fragment.from\"\n });\n }\n assertArgument(false, \"unsupported frgament object\", \"obj\", obj);\n }\n /**\n * Returns true if %%value%% is a [[ConstructorFragment]].\n */\n static isConstructor(value) {\n return ConstructorFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is an [[ErrorFragment]].\n */\n static isError(value) {\n return ErrorFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is an [[EventFragment]].\n */\n static isEvent(value) {\n return EventFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is a [[FunctionFragment]].\n */\n static isFunction(value) {\n return FunctionFragment.isFragment(value);\n }\n /**\n * Returns true if %%value%% is a [[StructFragment]].\n */\n static isStruct(value) {\n return StructFragment.isFragment(value);\n }\n}\n/**\n * An abstract class to represent An individual fragment\n * which has a name from a parse ABI.\n */\nexport class NamedFragment extends Fragment {\n /**\n * The name of the fragment.\n */\n name;\n /**\n * @private\n */\n constructor(guard, type, name, inputs) {\n super(guard, type, inputs);\n assertArgument(typeof (name) === \"string\" && name.match(regexId), \"invalid identifier\", \"name\", name);\n inputs = Object.freeze(inputs.slice());\n defineProperties(this, { name });\n }\n}\nfunction joinParams(format, params) {\n return \"(\" + params.map((p) => p.format(format)).join((format === \"full\") ? \", \" : \",\") + \")\";\n}\n/**\n * A Fragment which represents a //Custom Error//.\n */\nexport class ErrorFragment extends NamedFragment {\n /**\n * @private\n */\n constructor(guard, name, inputs) {\n super(guard, \"error\", name, inputs);\n Object.defineProperty(this, internal, { value: ErrorFragmentInternal });\n }\n /**\n * The Custom Error selector.\n */\n get selector() {\n return id(this.format(\"sighash\")).substring(0, 10);\n }\n /**\n * Returns a string representation of this fragment as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"error\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n return result.join(\" \");\n }\n /**\n * Returns a new **ErrorFragment** for %%obj%%.\n */\n static from(obj) {\n if (ErrorFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n return ErrorFragment.from(lex(obj));\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"error\", obj);\n const inputs = consumeParams(obj);\n consumeEoi(obj);\n return new ErrorFragment(_guard, name, inputs);\n }\n return new ErrorFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is an\n * **ErrorFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === ErrorFragmentInternal);\n }\n}\n/**\n * A Fragment which represents an Event.\n */\nexport class EventFragment extends NamedFragment {\n /**\n * Whether this event is anonymous.\n */\n anonymous;\n /**\n * @private\n */\n constructor(guard, name, inputs, anonymous) {\n super(guard, \"event\", name, inputs);\n Object.defineProperty(this, internal, { value: EventFragmentInternal });\n defineProperties(this, { anonymous });\n }\n /**\n * The Event topic hash.\n */\n get topicHash() {\n return id(this.format(\"sighash\"));\n }\n /**\n * Returns a string representation of this event as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"event\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== \"sighash\" && this.anonymous) {\n result.push(\"anonymous\");\n }\n return result.join(\" \");\n }\n /**\n * Return the topic hash for an event with %%name%% and %%params%%.\n */\n static getTopicHash(name, params) {\n params = (params || []).map((p) => ParamType.from(p));\n const fragment = new EventFragment(_guard, name, params, false);\n return fragment.topicHash;\n }\n /**\n * Returns a new **EventFragment** for %%obj%%.\n */\n static from(obj) {\n if (EventFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return EventFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid event fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"event\", obj);\n const inputs = consumeParams(obj, true);\n const anonymous = !!consumeKeywords(obj, setify([\"anonymous\"])).has(\"anonymous\");\n consumeEoi(obj);\n return new EventFragment(_guard, name, inputs, anonymous);\n }\n return new EventFragment(_guard, obj.name, obj.inputs ? obj.inputs.map((p) => ParamType.from(p, true)) : [], !!obj.anonymous);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is an\n * **EventFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === EventFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a constructor.\n */\nexport class ConstructorFragment extends Fragment {\n /**\n * Whether the constructor can receive an endowment.\n */\n payable;\n /**\n * The recommended gas limit for deployment or ``null``.\n */\n gas;\n /**\n * @private\n */\n constructor(guard, type, inputs, payable, gas) {\n super(guard, type, inputs);\n Object.defineProperty(this, internal, { value: ConstructorFragmentInternal });\n defineProperties(this, { payable, gas });\n }\n /**\n * Returns a string representation of this constructor as %%format%%.\n */\n format(format) {\n assert(format != null && format !== \"sighash\", \"cannot format a constructor for sighash\", \"UNSUPPORTED_OPERATION\", { operation: \"format(sighash)\" });\n if (format === \"json\") {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: (this.payable ? \"payable\" : \"undefined\"),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n });\n }\n const result = [`constructor${joinParams(format, this.inputs)}`];\n if (this.payable) {\n result.push(\"payable\");\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n return result.join(\" \");\n }\n /**\n * Returns a new **ConstructorFragment** for %%obj%%.\n */\n static from(obj) {\n if (ConstructorFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return ConstructorFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid constuctor fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n consumeKeywords(obj, setify([\"constructor\"]));\n const inputs = consumeParams(obj);\n const payable = !!consumeKeywords(obj, KwVisibDeploy).has(\"payable\");\n const gas = consumeGas(obj);\n consumeEoi(obj);\n return new ConstructorFragment(_guard, \"constructor\", inputs, payable, gas);\n }\n return new ConstructorFragment(_guard, \"constructor\", obj.inputs ? obj.inputs.map(ParamType.from) : [], !!obj.payable, (obj.gas != null) ? obj.gas : null);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **ConstructorFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === ConstructorFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a method.\n */\nexport class FallbackFragment extends Fragment {\n /**\n * If the function can be sent value during invocation.\n */\n payable;\n constructor(guard, inputs, payable) {\n super(guard, \"fallback\", inputs);\n Object.defineProperty(this, internal, { value: FallbackFragmentInternal });\n defineProperties(this, { payable });\n }\n /**\n * Returns a string representation of this fallback as %%format%%.\n */\n format(format) {\n const type = ((this.inputs.length === 0) ? \"receive\" : \"fallback\");\n if (format === \"json\") {\n const stateMutability = (this.payable ? \"payable\" : \"nonpayable\");\n return JSON.stringify({ type, stateMutability });\n }\n return `${type}()${this.payable ? \" payable\" : \"\"}`;\n }\n /**\n * Returns a new **FallbackFragment** for %%obj%%.\n */\n static from(obj) {\n if (FallbackFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return FallbackFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid fallback fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const errorObj = obj.toString();\n const topIsValid = obj.peekKeyword(setify([\"fallback\", \"receive\"]));\n assertArgument(topIsValid, \"type must be fallback or receive\", \"obj\", errorObj);\n const type = obj.popKeyword(setify([\"fallback\", \"receive\"]));\n // receive()\n if (type === \"receive\") {\n const inputs = consumeParams(obj);\n assertArgument(inputs.length === 0, `receive cannot have arguments`, \"obj.inputs\", inputs);\n consumeKeywords(obj, setify([\"payable\"]));\n consumeEoi(obj);\n return new FallbackFragment(_guard, [], true);\n }\n // fallback() [payable]\n // fallback(bytes) [payable] returns (bytes)\n let inputs = consumeParams(obj);\n if (inputs.length) {\n assertArgument(inputs.length === 1 && inputs[0].type === \"bytes\", \"invalid fallback inputs\", \"obj.inputs\", inputs.map((i) => i.format(\"minimal\")).join(\", \"));\n }\n else {\n inputs = [ParamType.from(\"bytes\")];\n }\n const mutability = consumeMutability(obj);\n assertArgument(mutability === \"nonpayable\" || mutability === \"payable\", \"fallback cannot be constants\", \"obj.stateMutability\", mutability);\n if (consumeKeywords(obj, setify([\"returns\"])).has(\"returns\")) {\n const outputs = consumeParams(obj);\n assertArgument(outputs.length === 1 && outputs[0].type === \"bytes\", \"invalid fallback outputs\", \"obj.outputs\", outputs.map((i) => i.format(\"minimal\")).join(\", \"));\n }\n consumeEoi(obj);\n return new FallbackFragment(_guard, inputs, mutability === \"payable\");\n }\n if (obj.type === \"receive\") {\n return new FallbackFragment(_guard, [], true);\n }\n if (obj.type === \"fallback\") {\n const inputs = [ParamType.from(\"bytes\")];\n const payable = (obj.stateMutability === \"payable\");\n return new FallbackFragment(_guard, inputs, payable);\n }\n assertArgument(false, \"invalid fallback description\", \"obj\", obj);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **FallbackFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === FallbackFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a method.\n */\nexport class FunctionFragment extends NamedFragment {\n /**\n * If the function is constant (e.g. ``pure`` or ``view`` functions).\n */\n constant;\n /**\n * The returned types for the result of calling this function.\n */\n outputs;\n /**\n * The state mutability (e.g. ``payable``, ``nonpayable``, ``view``\n * or ``pure``)\n */\n stateMutability;\n /**\n * If the function can be sent value during invocation.\n */\n payable;\n /**\n * The recommended gas limit to send when calling this function.\n */\n gas;\n /**\n * @private\n */\n constructor(guard, name, stateMutability, inputs, outputs, gas) {\n super(guard, \"function\", name, inputs);\n Object.defineProperty(this, internal, { value: FunctionFragmentInternal });\n outputs = Object.freeze(outputs.slice());\n const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n const payable = (stateMutability === \"payable\");\n defineProperties(this, { constant, gas, outputs, payable, stateMutability });\n }\n /**\n * The Function selector.\n */\n get selector() {\n return id(this.format(\"sighash\")).substring(0, 10);\n }\n /**\n * Returns a string representation of this function as %%format%%.\n */\n format(format) {\n if (format == null) {\n format = \"sighash\";\n }\n if (format === \"json\") {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: ((this.gas != null) ? this.gas : undefined),\n inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n });\n }\n const result = [];\n if (format !== \"sighash\") {\n result.push(\"function\");\n }\n result.push(this.name + joinParams(format, this.inputs));\n if (format !== \"sighash\") {\n if (this.stateMutability !== \"nonpayable\") {\n result.push(this.stateMutability);\n }\n if (this.outputs && this.outputs.length) {\n result.push(\"returns\");\n result.push(joinParams(format, this.outputs));\n }\n if (this.gas != null) {\n result.push(`@${this.gas.toString()}`);\n }\n }\n return result.join(\" \");\n }\n /**\n * Return the selector for a function with %%name%% and %%params%%.\n */\n static getSelector(name, params) {\n params = (params || []).map((p) => ParamType.from(p));\n const fragment = new FunctionFragment(_guard, name, \"view\", params, [], null);\n return fragment.selector;\n }\n /**\n * Returns a new **FunctionFragment** for %%obj%%.\n */\n static from(obj) {\n if (FunctionFragment.isFragment(obj)) {\n return obj;\n }\n if (typeof (obj) === \"string\") {\n try {\n return FunctionFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid function fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"function\", obj);\n const inputs = consumeParams(obj);\n const mutability = consumeMutability(obj);\n let outputs = [];\n if (consumeKeywords(obj, setify([\"returns\"])).has(\"returns\")) {\n outputs = consumeParams(obj);\n }\n const gas = consumeGas(obj);\n consumeEoi(obj);\n return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n }\n let stateMutability = obj.stateMutability;\n // Use legacy Solidity ABI logic if stateMutability is missing\n if (stateMutability == null) {\n stateMutability = \"payable\";\n if (typeof (obj.constant) === \"boolean\") {\n stateMutability = \"view\";\n if (!obj.constant) {\n stateMutability = \"payable\";\n if (typeof (obj.payable) === \"boolean\" && !obj.payable) {\n stateMutability = \"nonpayable\";\n }\n }\n }\n else if (typeof (obj.payable) === \"boolean\" && !obj.payable) {\n stateMutability = \"nonpayable\";\n }\n }\n // @TODO: verifyState for stateMutability (e.g. throw if\n // payable: false but stateMutability is \"nonpayable\")\n return new FunctionFragment(_guard, obj.name, stateMutability, obj.inputs ? obj.inputs.map(ParamType.from) : [], obj.outputs ? obj.outputs.map(ParamType.from) : [], (obj.gas != null) ? obj.gas : null);\n }\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **FunctionFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === FunctionFragmentInternal);\n }\n}\n/**\n * A Fragment which represents a structure.\n */\nexport class StructFragment extends NamedFragment {\n /**\n * @private\n */\n constructor(guard, name, inputs) {\n super(guard, \"struct\", name, inputs);\n Object.defineProperty(this, internal, { value: StructFragmentInternal });\n }\n /**\n * Returns a string representation of this struct as %%format%%.\n */\n format() {\n throw new Error(\"@TODO\");\n }\n /**\n * Returns a new **StructFragment** for %%obj%%.\n */\n static from(obj) {\n if (typeof (obj) === \"string\") {\n try {\n return StructFragment.from(lex(obj));\n }\n catch (error) {\n assertArgument(false, \"invalid struct fragment\", \"obj\", obj);\n }\n }\n else if (obj instanceof TokenString) {\n const name = consumeName(\"struct\", obj);\n const inputs = consumeParams(obj);\n consumeEoi(obj);\n return new StructFragment(_guard, name, inputs);\n }\n return new StructFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from) : []);\n }\n // @TODO: fix this return type\n /**\n * Returns ``true`` and provides a type guard if %%value%% is a\n * **StructFragment**.\n */\n static isFragment(value) {\n return (value && value[internal] === StructFragmentInternal);\n }\n}\n//# sourceMappingURL=fragments.js.map","/**\n * When sending values to or receiving values from a [[Contract]], the\n * data is generally encoded using the [ABI standard](link-solc-abi).\n *\n * The AbiCoder provides a utility to encode values to ABI data and\n * decode values from ABI data.\n *\n * Most of the time, developers should favour the [[Contract]] class,\n * which further abstracts a lot of the finer details of ABI data.\n *\n * @_section api/abi/abi-coder:ABI Encoding\n */\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nimport { assertArgumentCount, assertArgument } from \"../utils/index.js\";\nimport { Reader, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\nimport { getAddress } from \"../address/index.js\";\nimport { getBytes, hexlify, makeError } from \"../utils/index.js\";\n// https://docs.soliditylang.org/en/v0.8.17/control-structures.html\nconst PanicReasons = new Map();\nPanicReasons.set(0x00, \"GENERIC_PANIC\");\nPanicReasons.set(0x01, \"ASSERT_FALSE\");\nPanicReasons.set(0x11, \"OVERFLOW\");\nPanicReasons.set(0x12, \"DIVIDE_BY_ZERO\");\nPanicReasons.set(0x21, \"ENUM_RANGE_ERROR\");\nPanicReasons.set(0x22, \"BAD_STORAGE_DATA\");\nPanicReasons.set(0x31, \"STACK_UNDERFLOW\");\nPanicReasons.set(0x32, \"ARRAY_RANGE_ERROR\");\nPanicReasons.set(0x41, \"OUT_OF_MEMORY\");\nPanicReasons.set(0x51, \"UNINITIALIZED_FUNCTION_CALL\");\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nlet defaultCoder = null;\nlet defaultMaxInflation = 1024;\nfunction getBuiltinCallException(action, tx, data, abiCoder) {\n let message = \"missing revert data\";\n let reason = null;\n const invocation = null;\n let revert = null;\n if (data) {\n message = \"execution reverted\";\n const bytes = getBytes(data);\n data = hexlify(data);\n if (bytes.length === 0) {\n message += \" (no data present; likely require(false) occurred\";\n reason = \"require(false)\";\n }\n else if (bytes.length % 32 !== 4) {\n message += \" (could not decode reason; invalid data length)\";\n }\n else if (hexlify(bytes.slice(0, 4)) === \"0x08c379a0\") {\n // Error(string)\n try {\n reason = abiCoder.decode([\"string\"], bytes.slice(4))[0];\n revert = {\n signature: \"Error(string)\",\n name: \"Error\",\n args: [reason]\n };\n message += `: ${JSON.stringify(reason)}`;\n }\n catch (error) {\n message += \" (could not decode reason; invalid string data)\";\n }\n }\n else if (hexlify(bytes.slice(0, 4)) === \"0x4e487b71\") {\n // Panic(uint256)\n try {\n const code = Number(abiCoder.decode([\"uint256\"], bytes.slice(4))[0]);\n revert = {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n args: [code]\n };\n reason = `Panic due to ${PanicReasons.get(code) || \"UNKNOWN\"}(${code})`;\n message += `: ${reason}`;\n }\n catch (error) {\n message += \" (could not decode panic code)\";\n }\n }\n else {\n message += \" (unknown custom error)\";\n }\n }\n const transaction = {\n to: (tx.to ? getAddress(tx.to) : null),\n data: (tx.data || \"0x\")\n };\n if (tx.from) {\n transaction.from = getAddress(tx.from);\n }\n return makeError(message, \"CALL_EXCEPTION\", {\n action, data, reason, transaction, invocation, revert\n });\n}\n/**\n * The **AbiCoder** is a low-level class responsible for encoding JavaScript\n * values into binary data and decoding binary data into JavaScript values.\n */\nexport class AbiCoder {\n #getCoder(param) {\n if (param.isArray()) {\n return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name);\n }\n if (param.isTuple()) {\n return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name);\n }\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid \" + match[1] + \" bit length\", \"param\", param);\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n assertArgument(size !== 0 && size <= 32, \"invalid bytes length\", \"param\", param);\n return new FixedBytesCoder(size, param.name);\n }\n assertArgument(false, \"invalid type\", \"type\", param.type);\n }\n /**\n * Get the default values for the given %%types%%.\n *\n * For example, a ``uint`` is by default ``0`` and ``bool``\n * is by default ``false``.\n */\n getDefaultValue(types) {\n const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n /**\n * Encode the %%values%% as the %%types%% into ABI data.\n *\n * @returns DataHexstring\n */\n encode(types, values) {\n assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = new Writer();\n coder.encode(writer, values);\n return writer.data;\n }\n /**\n * Decode the ABI %%data%% as the %%types%% into values.\n *\n * If %%loose%% decoding is enabled, then strict padding is\n * not enforced. Some older versions of Solidity incorrectly\n * padded event data emitted from ``external`` functions.\n */\n decode(types, data, loose) {\n const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(new Reader(data, loose, defaultMaxInflation));\n }\n static _setDefaultMaxInflation(value) {\n assertArgument(typeof (value) === \"number\" && Number.isInteger(value), \"invalid defaultMaxInflation factor\", \"value\", value);\n defaultMaxInflation = value;\n }\n /**\n * Returns the shared singleton instance of a default [[AbiCoder]].\n *\n * On the first call, the instance is created internally.\n */\n static defaultAbiCoder() {\n if (defaultCoder == null) {\n defaultCoder = new AbiCoder();\n }\n return defaultCoder;\n }\n /**\n * Returns an ethers-compatible [[CallExceptionError]] Error for the given\n * result %%data%% for the [[CallExceptionAction]] %%action%% against\n * the Transaction %%tx%%.\n */\n static getBuiltinCallException(action, tx, data) {\n return getBuiltinCallException(action, tx, data, AbiCoder.defaultAbiCoder());\n }\n}\n//# sourceMappingURL=abi-coder.js.map","/**\n * The Interface class is a low-level class that accepts an\n * ABI and provides all the necessary functionality to encode\n * and decode paramaters to and results from methods, events\n * and errors.\n *\n * It also provides several convenience methods to automatically\n * search and find matching transactions and events to parse them.\n *\n * @_subsection api/abi:Interfaces [interfaces]\n */\nimport { keccak256 } from \"../crypto/index.js\";\nimport { id } from \"../hash/index.js\";\nimport { concat, dataSlice, getBigInt, getBytes, getBytesCopy, hexlify, zeroPadBytes, zeroPadValue, isHexString, defineProperties, assertArgument, toBeHex, assert } from \"../utils/index.js\";\nimport { AbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, Fragment, FunctionFragment, ParamType } from \"./fragments.js\";\nimport { Typed } from \"./typed.js\";\nexport { checkResultErrors, Result };\n/**\n * When using the [[Interface-parseLog]] to automatically match a Log to its event\n * for parsing, a **LogDescription** is returned.\n */\nexport class LogDescription {\n /**\n * The matching fragment for the ``topic0``.\n */\n fragment;\n /**\n * The name of the Event.\n */\n name;\n /**\n * The full Event signature.\n */\n signature;\n /**\n * The topic hash for the Event.\n */\n topic;\n /**\n * The arguments passed into the Event with ``emit``.\n */\n args;\n /**\n * @_ignore:\n */\n constructor(fragment, topic, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, signature, topic, args\n });\n }\n}\n/**\n * When using the [[Interface-parseTransaction]] to automatically match\n * a transaction data to its function for parsing,\n * a **TransactionDescription** is returned.\n */\nexport class TransactionDescription {\n /**\n * The matching fragment from the transaction ``data``.\n */\n fragment;\n /**\n * The name of the Function from the transaction ``data``.\n */\n name;\n /**\n * The arguments passed to the Function from the transaction ``data``.\n */\n args;\n /**\n * The full Function signature from the transaction ``data``.\n */\n signature;\n /**\n * The selector for the Function from the transaction ``data``.\n */\n selector;\n /**\n * The ``value`` (in wei) from the transaction.\n */\n value;\n /**\n * @_ignore:\n */\n constructor(fragment, selector, args, value) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector, value\n });\n }\n}\n/**\n * When using the [[Interface-parseError]] to automatically match an\n * error for a call result for parsing, an **ErrorDescription** is returned.\n */\nexport class ErrorDescription {\n /**\n * The matching fragment.\n */\n fragment;\n /**\n * The name of the Error.\n */\n name;\n /**\n * The arguments passed to the Error with ``revert``.\n */\n args;\n /**\n * The full Error signature.\n */\n signature;\n /**\n * The selector for the Error.\n */\n selector;\n /**\n * @_ignore:\n */\n constructor(fragment, selector, args) {\n const name = fragment.name, signature = fragment.format();\n defineProperties(this, {\n fragment, name, args, signature, selector\n });\n }\n}\n/**\n * An **Indexed** is used as a value when a value that does not\n * fit within a topic (i.e. not a fixed-length, 32-byte type). It\n * is the ``keccak256`` of the value, and used for types such as\n * arrays, tuples, bytes and strings.\n */\nexport class Indexed {\n /**\n * The ``keccak256`` of the value logged.\n */\n hash;\n /**\n * @_ignore:\n */\n _isIndexed;\n /**\n * Returns ``true`` if %%value%% is an **Indexed**.\n *\n * This provides a Type Guard for property access.\n */\n static isIndexed(value) {\n return !!(value && value._isIndexed);\n }\n /**\n * @_ignore:\n */\n constructor(hash) {\n defineProperties(this, { hash, _isIndexed: true });\n }\n}\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons = {\n \"0\": \"generic panic\",\n \"1\": \"assert(false)\",\n \"17\": \"arithmetic overflow\",\n \"18\": \"division or modulo by zero\",\n \"33\": \"enum overflow\",\n \"34\": \"invalid encoded storage byte array accessed\",\n \"49\": \"out-of-bounds array access; popping on an empty array\",\n \"50\": \"out-of-bounds access of an array or bytesN\",\n \"65\": \"out of memory\",\n \"81\": \"uninitialized function\",\n};\nconst BuiltinErrors = {\n \"0x08c379a0\": {\n signature: \"Error(string)\",\n name: \"Error\",\n inputs: [\"string\"],\n reason: (message) => {\n return `reverted with reason string ${JSON.stringify(message)}`;\n }\n },\n \"0x4e487b71\": {\n signature: \"Panic(uint256)\",\n name: \"Panic\",\n inputs: [\"uint256\"],\n reason: (code) => {\n let reason = \"unknown panic code\";\n if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n reason = PanicReasons[code.toString()];\n }\n return `reverted with panic code 0x${code.toString(16)} (${reason})`;\n }\n }\n};\n/**\n * An Interface abstracts many of the low-level details for\n * encoding and decoding the data on the blockchain.\n *\n * An ABI provides information on how to encode data to send to\n * a Contract, how to decode the results and events and how to\n * interpret revert errors.\n *\n * The ABI can be specified by [any supported format](InterfaceAbi).\n */\nexport class Interface {\n /**\n * All the Contract ABI members (i.e. methods, events, errors, etc).\n */\n fragments;\n /**\n * The Contract constructor.\n */\n deploy;\n /**\n * The Fallback method, if any.\n */\n fallback;\n /**\n * If receiving ether is supported.\n */\n receive;\n #errors;\n #events;\n #functions;\n // #structs: Map<string, StructFragment>;\n #abiCoder;\n /**\n * Create a new Interface for the %%fragments%%.\n */\n constructor(fragments) {\n let abi = [];\n if (typeof (fragments) === \"string\") {\n abi = JSON.parse(fragments);\n }\n else {\n abi = fragments;\n }\n this.#functions = new Map();\n this.#errors = new Map();\n this.#events = new Map();\n // this.#structs = new Map();\n const frags = [];\n for (const a of abi) {\n try {\n frags.push(Fragment.from(a));\n }\n catch (error) {\n console.log(`[Warning] Invalid Fragment ${JSON.stringify(a)}:`, error.message);\n }\n }\n defineProperties(this, {\n fragments: Object.freeze(frags)\n });\n let fallback = null;\n let receive = false;\n this.#abiCoder = this.getAbiCoder();\n // Add all fragments by their signature\n this.fragments.forEach((fragment, index) => {\n let bucket;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n console.log(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineProperties(this, { deploy: fragment });\n return;\n case \"fallback\":\n if (fragment.inputs.length === 0) {\n receive = true;\n }\n else {\n assertArgument(!fallback || fragment.payable !== fallback.payable, \"conflicting fallback fragments\", `fragments[${index}]`, fragment);\n fallback = fragment;\n receive = fallback.payable;\n }\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (<FunctionFragment>fragment).outputs);\n bucket = this.#functions;\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = this.#events;\n break;\n case \"error\":\n bucket = this.#errors;\n break;\n default:\n return;\n }\n // Two identical entries; ignore it\n const signature = fragment.format();\n if (bucket.has(signature)) {\n return;\n }\n bucket.set(signature, fragment);\n });\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineProperties(this, {\n deploy: ConstructorFragment.from(\"constructor()\")\n });\n }\n defineProperties(this, { fallback, receive });\n }\n /**\n * Returns the entire Human-Readable ABI, as an array of\n * signatures, optionally as %%minimal%% strings, which\n * removes parameter names and unneceesary spaces.\n */\n format(minimal) {\n const format = (minimal ? \"minimal\" : \"full\");\n const abi = this.fragments.map((f) => f.format(format));\n return abi;\n }\n /**\n * Return the JSON-encoded ABI. This is the format Solidiy\n * returns.\n */\n formatJson() {\n const abi = this.fragments.map((f) => f.format(\"json\"));\n // We need to re-bundle the JSON fragments a bit\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n /**\n * The ABI coder that will be used to encode and decode binary\n * data.\n */\n getAbiCoder() {\n return AbiCoder.defaultAbiCoder();\n }\n // Find a function definition by any means necessary (unless it is ambiguous)\n #getFunction(key, values, forceUnique) {\n // Selector\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n for (const fragment of this.#functions.values()) {\n if (selector === fragment.selector) {\n return fragment;\n }\n }\n return null;\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of this.#functions) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n const lastValue = (values.length > 0) ? values[values.length - 1] : null;\n let valueLength = values.length;\n let allowOptions = true;\n if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n allowOptions = false;\n valueLength--;\n }\n // Remove all matches that don't have a compatible length. The args\n // may contain an overrides, so the match may have n or n - 1 parameters\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs.length;\n if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // We are past the inputs\n if (j >= inputs.length) {\n if (values[j].type === \"overrides\") {\n continue;\n }\n matching.splice(i, 1);\n break;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n // We found a single matching signature with an overrides, but the\n // last value is something that cannot possibly be an options\n if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n const lastArg = values[values.length - 1];\n if (lastArg == null || Array.isArray(lastArg) || typeof (lastArg) !== \"object\") {\n matching.splice(0, 1);\n }\n }\n if (matching.length === 0) {\n return null;\n }\n if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n assertArgument(false, `ambiguous function description (i.e. matches ${matchStr})`, \"key\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = this.#functions.get(FunctionFragment.from(key).format());\n if (result) {\n return result;\n }\n return null;\n }\n /**\n * Get the function name for %%key%%, which may be a function selector,\n * function name or function signature that belongs to the ABI.\n */\n getFunctionName(key) {\n const fragment = this.#getFunction(key, null, false);\n assertArgument(fragment, \"no matching function\", \"key\", key);\n return fragment.name;\n }\n /**\n * Returns true if %%key%% (a function selector, function name or\n * function signature) is present in the ABI.\n *\n * In the case of a function name, the name may be ambiguous, so\n * accessing the [[FunctionFragment]] may require refinement.\n */\n hasFunction(key) {\n return !!this.#getFunction(key, null, false);\n }\n /**\n * Get the [[FunctionFragment]] for %%key%%, which may be a function\n * selector, function name or function signature that belongs to the ABI.\n *\n * If %%values%% is provided, it will use the Typed API to handle\n * ambiguous cases where multiple functions match by name.\n *\n * If the %%key%% and %%values%% do not refine to a single function in\n * the ABI, this will throw.\n */\n getFunction(key, values) {\n return this.#getFunction(key, values || null, true);\n }\n /**\n * Iterate over all functions, calling %%callback%%, sorted by their name.\n */\n forEachFunction(callback) {\n const names = Array.from(this.#functions.keys());\n names.sort((a, b) => a.localeCompare(b));\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n callback((this.#functions.get(name)), i);\n }\n }\n // Find an event definition by any means necessary (unless it is ambiguous)\n #getEvent(key, values, forceUnique) {\n // EventTopic\n if (isHexString(key)) {\n const eventTopic = key.toLowerCase();\n for (const fragment of this.#events.values()) {\n if (eventTopic === fragment.topicHash) {\n return fragment;\n }\n }\n return null;\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of this.#events) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (values) {\n // Remove all matches that don't have a compatible length.\n for (let i = matching.length - 1; i >= 0; i--) {\n if (matching[i].inputs.length < values.length) {\n matching.splice(i, 1);\n }\n }\n // Remove all matches that don't match the Typed signature\n for (let i = matching.length - 1; i >= 0; i--) {\n const inputs = matching[i].inputs;\n for (let j = 0; j < values.length; j++) {\n // Not a typed value\n if (!Typed.isTyped(values[j])) {\n continue;\n }\n // Make sure the value type matches the input type\n if (values[j].type !== inputs[j].baseType) {\n matching.splice(i, 1);\n break;\n }\n }\n }\n }\n if (matching.length === 0) {\n return null;\n }\n if (matching.length > 1 && forceUnique) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n assertArgument(false, `ambiguous event description (i.e. matches ${matchStr})`, \"key\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n const result = this.#events.get(EventFragment.from(key).format());\n if (result) {\n return result;\n }\n return null;\n }\n /**\n * Get the event name for %%key%%, which may be a topic hash,\n * event name or event signature that belongs to the ABI.\n */\n getEventName(key) {\n const fragment = this.#getEvent(key, null, false);\n assertArgument(fragment, \"no matching event\", \"key\", key);\n return fragment.name;\n }\n /**\n * Returns true if %%key%% (an event topic hash, event name or\n * event signature) is present in the ABI.\n *\n * In the case of an event name, the name may be ambiguous, so\n * accessing the [[EventFragment]] may require refinement.\n */\n hasEvent(key) {\n return !!this.#getEvent(key, null, false);\n }\n /**\n * Get the [[EventFragment]] for %%key%%, which may be a topic hash,\n * event name or event signature that belongs to the ABI.\n *\n * If %%values%% is provided, it will use the Typed API to handle\n * ambiguous cases where multiple events match by name.\n *\n * If the %%key%% and %%values%% do not refine to a single event in\n * the ABI, this will throw.\n */\n getEvent(key, values) {\n return this.#getEvent(key, values || null, true);\n }\n /**\n * Iterate over all events, calling %%callback%%, sorted by their name.\n */\n forEachEvent(callback) {\n const names = Array.from(this.#events.keys());\n names.sort((a, b) => a.localeCompare(b));\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n callback((this.#events.get(name)), i);\n }\n }\n /**\n * Get the [[ErrorFragment]] for %%key%%, which may be an error\n * selector, error name or error signature that belongs to the ABI.\n *\n * If %%values%% is provided, it will use the Typed API to handle\n * ambiguous cases where multiple errors match by name.\n *\n * If the %%key%% and %%values%% do not refine to a single error in\n * the ABI, this will throw.\n */\n getError(key, values) {\n if (isHexString(key)) {\n const selector = key.toLowerCase();\n if (BuiltinErrors[selector]) {\n return ErrorFragment.from(BuiltinErrors[selector].signature);\n }\n for (const fragment of this.#errors.values()) {\n if (selector === fragment.selector) {\n return fragment;\n }\n }\n return null;\n }\n // It is a bare name, look up the function (will return null if ambiguous)\n if (key.indexOf(\"(\") === -1) {\n const matching = [];\n for (const [name, fragment] of this.#errors) {\n if (name.split(\"(\" /* fix:) */)[0] === key) {\n matching.push(fragment);\n }\n }\n if (matching.length === 0) {\n if (key === \"Error\") {\n return ErrorFragment.from(\"error Error(string)\");\n }\n if (key === \"Panic\") {\n return ErrorFragment.from(\"error Panic(uint256)\");\n }\n return null;\n }\n else if (matching.length > 1) {\n const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n assertArgument(false, `ambiguous error description (i.e. ${matchStr})`, \"name\", key);\n }\n return matching[0];\n }\n // Normalize the signature and lookup the function\n key = ErrorFragment.from(key).format();\n if (key === \"Error(string)\") {\n return ErrorFragment.from(\"error Error(string)\");\n }\n if (key === \"Panic(uint256)\") {\n return ErrorFragment.from(\"error Panic(uint256)\");\n }\n const result = this.#errors.get(key);\n if (result) {\n return result;\n }\n return null;\n }\n /**\n * Iterate over all errors, calling %%callback%%, sorted by their name.\n */\n forEachError(callback) {\n const names = Array.from(this.#errors.keys());\n names.sort((a, b) => a.localeCompare(b));\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n callback((this.#errors.get(name)), i);\n }\n }\n // Get the 4-byte selector used by Solidity to identify a function\n /*\ngetSelector(fragment: ErrorFragment | FunctionFragment): string {\n if (typeof(fragment) === \"string\") {\n const matches: Array<Fragment> = [ ];\n\n try { matches.push(this.getFunction(fragment)); } catch (error) { }\n try { matches.push(this.getError(<string>fragment)); } catch (_) { }\n\n if (matches.length === 0) {\n logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n } else if (matches.length > 1) {\n logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n }\n\n fragment = matches[0];\n }\n\n return dataSlice(id(fragment.format()), 0, 4);\n}\n */\n // Get the 32-byte topic hash used by Solidity to identify an event\n /*\n getEventTopic(fragment: EventFragment): string {\n //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n return id(fragment.format());\n }\n */\n _decodeParams(params, data) {\n return this.#abiCoder.decode(params, data);\n }\n _encodeParams(params, values) {\n return this.#abiCoder.encode(params, values);\n }\n /**\n * Encodes a ``tx.data`` object for deploying the Contract with\n * the %%values%% as the constructor arguments.\n */\n encodeDeploy(values) {\n return this._encodeParams(this.deploy.inputs, values || []);\n }\n /**\n * Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n * specified error (see [[getError]] for valid values for\n * %%key%%).\n *\n * Most developers should prefer the [[parseCallResult]] method instead,\n * which will automatically detect a ``CALL_EXCEPTION`` and throw the\n * corresponding error.\n */\n decodeErrorResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n const f = this.getError(fragment);\n assertArgument(f, \"unknown error\", \"fragment\", fragment);\n fragment = f;\n }\n assertArgument(dataSlice(data, 0, 4) === fragment.selector, `data signature does not match error ${fragment.name}.`, \"data\", data);\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n /**\n * Encodes the transaction revert data for a call result that\n * reverted from the the Contract with the sepcified %%error%%\n * (see [[getError]] for valid values for %%fragment%%) with the %%values%%.\n *\n * This is generally not used by most developers, unless trying to mock\n * a result from a Contract.\n */\n encodeErrorResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getError(fragment);\n assertArgument(f, \"unknown error\", \"fragment\", fragment);\n fragment = f;\n }\n return concat([\n fragment.selector,\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n /**\n * Decodes the %%data%% from a transaction ``tx.data`` for\n * the function specified (see [[getFunction]] for valid values\n * for %%fragment%%).\n *\n * Most developers should prefer the [[parseTransaction]] method\n * instead, which will automatically detect the fragment.\n */\n decodeFunctionData(fragment, data) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n assertArgument(dataSlice(data, 0, 4) === fragment.selector, `data signature does not match function ${fragment.name}.`, \"data\", data);\n return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n }\n /**\n * Encodes the ``tx.data`` for a transaction that calls the function\n * specified (see [[getFunction]] for valid values for %%fragment%%) with\n * the %%values%%.\n */\n encodeFunctionData(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n return concat([\n fragment.selector,\n this._encodeParams(fragment.inputs, values || [])\n ]);\n }\n /**\n * Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n * specified function (see [[getFunction]] for valid values for\n * %%key%%).\n *\n * Most developers should prefer the [[parseCallResult]] method instead,\n * which will automatically detect a ``CALL_EXCEPTION`` and throw the\n * corresponding error.\n */\n decodeFunctionResult(fragment, data) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n let message = \"invalid length for result data\";\n const bytes = getBytesCopy(data);\n if ((bytes.length % 32) === 0) {\n try {\n return this.#abiCoder.decode(fragment.outputs, bytes);\n }\n catch (error) {\n message = \"could not decode result data\";\n }\n }\n // Call returned data with no error, but the data is junk\n assert(false, message, \"BAD_DATA\", {\n value: hexlify(bytes),\n info: { method: fragment.name, signature: fragment.format() }\n });\n }\n makeError(_data, tx) {\n const data = getBytes(_data, \"data\");\n const error = AbiCoder.getBuiltinCallException(\"call\", tx, data);\n // Not a built-in error; try finding a custom error\n const customPrefix = \"execution reverted (unknown custom error)\";\n if (error.message.startsWith(customPrefix)) {\n const selector = hexlify(data.slice(0, 4));\n const ef = this.getError(selector);\n if (ef) {\n try {\n const args = this.#abiCoder.decode(ef.inputs, data.slice(4));\n error.revert = {\n name: ef.name, signature: ef.format(), args\n };\n error.reason = error.revert.signature;\n error.message = `execution reverted: ${error.reason}`;\n }\n catch (e) {\n error.message = `execution reverted (coult not decode custom error)`;\n }\n }\n }\n // Add the invocation, if available\n const parsed = this.parseTransaction(tx);\n if (parsed) {\n error.invocation = {\n method: parsed.name,\n signature: parsed.signature,\n args: parsed.args\n };\n }\n return error;\n }\n /**\n * Encodes the result data (e.g. from an ``eth_call``) for the\n * specified function (see [[getFunction]] for valid values\n * for %%fragment%%) with %%values%%.\n *\n * This is generally not used by most developers, unless trying to mock\n * a result from a Contract.\n */\n encodeFunctionResult(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getFunction(fragment);\n assertArgument(f, \"unknown function\", \"fragment\", fragment);\n fragment = f;\n }\n return hexlify(this.#abiCoder.encode(fragment.outputs, values || []));\n }\n /*\n spelunk(inputs: Array<ParamType>, values: ReadonlyArray<any>, processfunc: (type: string, value: any) => Promise<any>): Promise<Array<any>> {\n const promises: Array<Promise<>> = [ ];\n const process = function(type: ParamType, value: any): any {\n if (type.baseType === \"array\") {\n return descend(type.child\n }\n if (type. === \"address\") {\n }\n };\n \n const descend = function (inputs: Array<ParamType>, values: ReadonlyArray<any>) {\n if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n \n };\n \n const result: Array<any> = [ ];\n values.forEach((value, index) => {\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n }\n */\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getEvent(fragment);\n assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n fragment = f;\n }\n assert(values.length <= fragment.inputs.length, `too many arguments for ${fragment.format()}`, \"UNEXPECTED_ARGUMENT\", { count: values.length, expectedCount: fragment.inputs.length });\n const topics = [];\n if (!fragment.anonymous) {\n topics.push(fragment.topicHash);\n }\n // @TODO: Use the coders for this; to properly support tuples, etc.\n const encodeTopic = (param, value) => {\n if (param.type === \"string\") {\n return id(value);\n }\n else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n if (param.type === \"bool\" && typeof (value) === \"boolean\") {\n value = (value ? \"0x01\" : \"0x00\");\n }\n else if (param.type.match(/^u?int/)) {\n value = toBeHex(value); // @TODO: Should this toTwos??\n }\n else if (param.type.match(/^bytes/)) {\n value = zeroPadBytes(value, 32);\n }\n else if (param.type === \"address\") {\n // Check addresses are valid\n this.#abiCoder.encode([\"address\"], [value]);\n }\n return zeroPadValue(hexlify(value), 32);\n };\n values.forEach((value, index) => {\n const param = fragment.inputs[index];\n if (!param.indexed) {\n assertArgument(value == null, \"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n return;\n }\n if (value == null) {\n topics.push(null);\n }\n else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n assertArgument(false, \"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n }\n else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n }\n else {\n topics.push(encodeTopic(param, value));\n }\n });\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n return topics;\n }\n encodeEventLog(fragment, values) {\n if (typeof (fragment) === \"string\") {\n const f = this.getEvent(fragment);\n assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n fragment = f;\n }\n const topics = [];\n const dataTypes = [];\n const dataValues = [];\n if (!fragment.anonymous) {\n topics.push(fragment.topicHash);\n }\n assertArgument(values.length === fragment.inputs.length, \"event arguments/values mismatch\", \"values\", values);\n fragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value));\n }\n else if (param.type === \"bytes\") {\n topics.push(keccak256(value));\n }\n else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n }\n else {\n topics.push(this.#abiCoder.encode([param.type], [value]));\n }\n }\n else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n return {\n data: this.#abiCoder.encode(dataTypes, dataValues),\n topics: topics\n };\n }\n // Decode a filter for the event and the search criteria\n decodeEventLog(fragment, data, topics) {\n if (typeof (fragment) === \"string\") {\n const f = this.getEvent(fragment);\n assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n fragment = f;\n }\n if (topics != null && !fragment.anonymous) {\n const eventTopic = fragment.topicHash;\n assertArgument(isHexString(topics[0], 32) && topics[0].toLowerCase() === eventTopic, \"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n topics = topics.slice(1);\n }\n const indexed = [];\n const nonIndexed = [];\n const dynamic = [];\n fragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.from({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n }\n else {\n indexed.push(param);\n dynamic.push(false);\n }\n }\n else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, concat(topics)) : null;\n const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true);\n //const result: (Array<any> & { [ key: string ]: any }) = [ ];\n const values = [];\n const keys = [];\n let nonIndexedIndex = 0, indexedIndex = 0;\n fragment.inputs.forEach((param, index) => {\n let value = null;\n if (param.indexed) {\n if (resultIndexed == null) {\n value = new Indexed(null);\n }\n else if (dynamic[index]) {\n value = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n try {\n value = resultIndexed[indexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n }\n else {\n try {\n value = resultNonIndexed[nonIndexedIndex++];\n }\n catch (error) {\n value = error;\n }\n }\n values.push(value);\n keys.push(param.name || null);\n });\n return Result.fromItems(values, keys);\n }\n /**\n * Parses a transaction, finding the matching function and extracts\n * the parameter values along with other useful function details.\n *\n * If the matching function cannot be found, return null.\n */\n parseTransaction(tx) {\n const data = getBytes(tx.data, \"tx.data\");\n const value = getBigInt((tx.value != null) ? tx.value : 0, \"tx.value\");\n const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n if (!fragment) {\n return null;\n }\n const args = this.#abiCoder.decode(fragment.inputs, data.slice(4));\n return new TransactionDescription(fragment, fragment.selector, args, value);\n }\n parseCallResult(data) {\n throw new Error(\"@TODO\");\n }\n /**\n * Parses a receipt log, finding the matching event and extracts\n * the parameter values along with other useful event details.\n *\n * If the matching event cannot be found, returns null.\n */\n parseLog(log) {\n const fragment = this.getEvent(log.topics[0]);\n if (!fragment || fragment.anonymous) {\n return null;\n }\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n return new LogDescription(fragment, fragment.topicHash, this.decodeEventLog(fragment, log.data, log.topics));\n }\n /**\n * Parses a revert data, finding the matching error and extracts\n * the parameter values along with other useful error details.\n *\n * If the matching error cannot be found, returns null.\n */\n parseError(data) {\n const hexData = hexlify(data);\n const fragment = this.getError(dataSlice(hexData, 0, 4));\n if (!fragment) {\n return null;\n }\n const args = this.#abiCoder.decode(fragment.inputs, dataSlice(hexData, 4));\n return new ErrorDescription(fragment, fragment.selector, args);\n }\n /**\n * Creates a new [[Interface]] from the ABI %%value%%.\n *\n * The %%value%% may be provided as an existing [[Interface]] object,\n * a JSON-encoded ABI or any Human-Readable ABI format.\n */\n static from(value) {\n // Already an Interface, which is immutable\n if (value instanceof Interface) {\n return value;\n }\n // JSON\n if (typeof (value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n // An Interface; possibly from another v6 instance\n if (typeof (value.formatJson) === \"function\") {\n return new Interface(value.formatJson());\n }\n // A legacy Interface; from an older version\n if (typeof (value.format) === \"function\") {\n return new Interface(value.format(\"json\"));\n }\n // Array of fragments\n return new Interface(value);\n }\n}\n//# sourceMappingURL=interface.js.map","//import { resolveAddress } from \"@ethersproject/address\";\nimport { defineProperties, getBigInt, getNumber, hexlify, isBytesLike, resolveProperties, assert, assertArgument, isError, makeError } from \"../utils/index.js\";\nimport { accessListify } from \"../transaction/index.js\";\nconst BN_0 = BigInt(0);\n// -----------------------\nfunction getValue(value) {\n if (value == null) {\n return null;\n }\n return value;\n}\nfunction toJson(value) {\n if (value == null) {\n return null;\n }\n return value.toString();\n}\n// @TODO? <T extends FeeData = { }> implements Required<T>\n/**\n * A **FeeData** wraps all the fee-related values associated with\n * the network.\n */\nexport class FeeData {\n /**\n * The gas price for legacy networks.\n */\n gasPrice;\n /**\n * The maximum fee to pay per gas.\n *\n * The base fee per gas is defined by the network and based on\n * congestion, increasing the cost during times of heavy load\n * and lowering when less busy.\n *\n * The actual fee per gas will be the base fee for the block\n * and the priority fee, up to the max fee per gas.\n *\n * This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n */\n maxFeePerGas;\n /**\n * The additional amout to pay per gas to encourage a validator\n * to include the transaction.\n *\n * The purpose of this is to compensate the validator for the\n * adjusted risk for including a given transaction.\n *\n * This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n */\n maxPriorityFeePerGas;\n /**\n * Creates a new FeeData for %%gasPrice%%, %%maxFeePerGas%% and\n * %%maxPriorityFeePerGas%%.\n */\n constructor(gasPrice, maxFeePerGas, maxPriorityFeePerGas) {\n defineProperties(this, {\n gasPrice: getValue(gasPrice),\n maxFeePerGas: getValue(maxFeePerGas),\n maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n });\n }\n /**\n * Returns a JSON-friendly value.\n */\n toJSON() {\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = this;\n return {\n _type: \"FeeData\",\n gasPrice: toJson(gasPrice),\n maxFeePerGas: toJson(maxFeePerGas),\n maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n };\n }\n}\n;\n/**\n * Returns a copy of %%req%% with all properties coerced to their strict\n * types.\n */\nexport function copyRequest(req) {\n const result = {};\n // These could be addresses, ENS names or Addressables\n if (req.to) {\n result.to = req.to;\n }\n if (req.from) {\n result.from = req.from;\n }\n if (req.data) {\n result.data = hexlify(req.data);\n }\n const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value\".split(/,/);\n for (const key of bigIntKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = getBigInt(req[key], `request.${key}`);\n }\n const numberKeys = \"type,nonce\".split(/,/);\n for (const key of numberKeys) {\n if (!(key in req) || req[key] == null) {\n continue;\n }\n result[key] = getNumber(req[key], `request.${key}`);\n }\n if (req.accessList) {\n result.accessList = accessListify(req.accessList);\n }\n if (req.authorizationList) {\n result.authorizationList = req.authorizationList.slice();\n }\n if (\"blockTag\" in req) {\n result.blockTag = req.blockTag;\n }\n if (\"enableCcipRead\" in req) {\n result.enableCcipRead = !!req.enableCcipRead;\n }\n if (\"customData\" in req) {\n result.customData = req.customData;\n }\n if (\"blobVersionedHashes\" in req && req.blobVersionedHashes) {\n result.blobVersionedHashes = req.blobVersionedHashes.slice();\n }\n if (\"kzg\" in req) {\n result.kzg = req.kzg;\n }\n if (\"blobs\" in req && req.blobs) {\n result.blobs = req.blobs.map((b) => {\n if (isBytesLike(b)) {\n return hexlify(b);\n }\n return Object.assign({}, b);\n });\n }\n return result;\n}\n/**\n * A **Block** represents the data associated with a full block on\n * Ethereum.\n */\nexport class Block {\n /**\n * The provider connected to the block used to fetch additional details\n * if necessary.\n */\n provider;\n /**\n * The block number, sometimes called the block height. This is a\n * sequential number that is one higher than the parent block.\n */\n number;\n /**\n * The block hash.\n *\n * This hash includes all properties, so can be safely used to identify\n * an exact set of block properties.\n */\n hash;\n /**\n * The timestamp for this block, which is the number of seconds since\n * epoch that this block was included.\n */\n timestamp;\n /**\n * The block hash of the parent block.\n */\n parentHash;\n /**\n * The hash tree root of the parent beacon block for the given\n * execution block. See [[link-eip-4788]].\n */\n parentBeaconBlockRoot;\n /**\n * The nonce.\n *\n * On legacy networks, this is the random number inserted which\n * permitted the difficulty target to be reached.\n */\n nonce;\n /**\n * The difficulty target.\n *\n * On legacy networks, this is the proof-of-work target required\n * for a block to meet the protocol rules to be included.\n *\n * On modern networks, this is a random number arrived at using\n * randao. @TODO: Find links?\n */\n difficulty;\n /**\n * The total gas limit for this block.\n */\n gasLimit;\n /**\n * The total gas used in this block.\n */\n gasUsed;\n /**\n * The root hash for the global state after applying changes\n * in this block.\n */\n stateRoot;\n /**\n * The hash of the transaction receipts trie.\n */\n receiptsRoot;\n /**\n * The total amount of blob gas consumed by the transactions\n * within the block. See [[link-eip-4844]].\n */\n blobGasUsed;\n /**\n * The running total of blob gas consumed in excess of the\n * target, prior to the block. See [[link-eip-4844]].\n */\n excessBlobGas;\n /**\n * The miner coinbase address, wihch receives any subsidies for\n * including this block.\n */\n miner;\n /**\n * The latest RANDAO mix of the post beacon state of\n * the previous block.\n */\n prevRandao;\n /**\n * Any extra data the validator wished to include.\n */\n extraData;\n /**\n * The base fee per gas that all transactions in this block were\n * charged.\n *\n * This adjusts after each block, depending on how congested the network\n * is.\n */\n baseFeePerGas;\n #transactions;\n /**\n * Create a new **Block** object.\n *\n * This should generally not be necessary as the unless implementing a\n * low-level library.\n */\n constructor(block, provider) {\n this.#transactions = block.transactions.map((tx) => {\n if (typeof (tx) !== \"string\") {\n return new TransactionResponse(tx, provider);\n }\n return tx;\n });\n defineProperties(this, {\n provider,\n hash: getValue(block.hash),\n number: block.number,\n timestamp: block.timestamp,\n parentHash: block.parentHash,\n parentBeaconBlockRoot: block.parentBeaconBlockRoot,\n nonce: block.nonce,\n difficulty: block.difficulty,\n gasLimit: block.gasLimit,\n gasUsed: block.gasUsed,\n blobGasUsed: block.blobGasUsed,\n excessBlobGas: block.excessBlobGas,\n miner: block.miner,\n prevRandao: getValue(block.prevRandao),\n extraData: block.extraData,\n baseFeePerGas: getValue(block.baseFeePerGas),\n stateRoot: block.stateRoot,\n receiptsRoot: block.receiptsRoot,\n });\n }\n /**\n * Returns the list of transaction hashes, in the order\n * they were executed within the block.\n */\n get transactions() {\n return this.#transactions.map((tx) => {\n if (typeof (tx) === \"string\") {\n return tx;\n }\n return tx.hash;\n });\n }\n /**\n * Returns the complete transactions, in the order they\n * were executed within the block.\n *\n * This is only available for blocks which prefetched\n * transactions, by passing ``true`` to %%prefetchTxs%%\n * into [[Provider-getBlock]].\n */\n get prefetchedTransactions() {\n const txs = this.#transactions.slice();\n // Doesn't matter...\n if (txs.length === 0) {\n return [];\n }\n // Make sure we prefetched the transactions\n assert(typeof (txs[0]) === \"object\", \"transactions were not prefetched with block request\", \"UNSUPPORTED_OPERATION\", {\n operation: \"transactionResponses()\"\n });\n return txs;\n }\n /**\n * Returns a JSON-friendly value.\n */\n toJSON() {\n const { baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash, miner, prevRandao, nonce, number, parentHash, parentBeaconBlockRoot, stateRoot, receiptsRoot, timestamp, transactions } = this;\n return {\n _type: \"Block\",\n baseFeePerGas: toJson(baseFeePerGas),\n difficulty: toJson(difficulty),\n extraData,\n gasLimit: toJson(gasLimit),\n gasUsed: toJson(gasUsed),\n blobGasUsed: toJson(this.blobGasUsed),\n excessBlobGas: toJson(this.excessBlobGas),\n hash, miner, prevRandao, nonce, number, parentHash, timestamp,\n parentBeaconBlockRoot, stateRoot, receiptsRoot,\n transactions,\n };\n }\n [Symbol.iterator]() {\n let index = 0;\n const txs = this.transactions;\n return {\n next: () => {\n if (index < this.length) {\n return {\n value: txs[index++], done: false\n };\n }\n return { value: undefined, done: true };\n }\n };\n }\n /**\n * The number of transactions in this block.\n */\n get length() { return this.#transactions.length; }\n /**\n * The [[link-js-date]] this block was included at.\n */\n get date() {\n if (this.timestamp == null) {\n return null;\n }\n return new Date(this.timestamp * 1000);\n }\n /**\n * Get the transaction at %%indexe%% within this block.\n */\n async getTransaction(indexOrHash) {\n // Find the internal value by its index or hash\n let tx = undefined;\n if (typeof (indexOrHash) === \"number\") {\n tx = this.#transactions[indexOrHash];\n }\n else {\n const hash = indexOrHash.toLowerCase();\n for (const v of this.#transactions) {\n if (typeof (v) === \"string\") {\n if (v !== hash) {\n continue;\n }\n tx = v;\n break;\n }\n else {\n if (v.hash !== hash) {\n continue;\n }\n tx = v;\n break;\n }\n }\n }\n if (tx == null) {\n throw new Error(\"no such tx\");\n }\n if (typeof (tx) === \"string\") {\n return (await this.provider.getTransaction(tx));\n }\n else {\n return tx;\n }\n }\n /**\n * If a **Block** was fetched with a request to include the transactions\n * this will allow synchronous access to those transactions.\n *\n * If the transactions were not prefetched, this will throw.\n */\n getPrefetchedTransaction(indexOrHash) {\n const txs = this.prefetchedTransactions;\n if (typeof (indexOrHash) === \"number\") {\n return txs[indexOrHash];\n }\n indexOrHash = indexOrHash.toLowerCase();\n for (const tx of txs) {\n if (tx.hash === indexOrHash) {\n return tx;\n }\n }\n assertArgument(false, \"no matching transaction\", \"indexOrHash\", indexOrHash);\n }\n /**\n * Returns true if this block been mined. This provides a type guard\n * for all properties on a [[MinedBlock]].\n */\n isMined() { return !!this.hash; }\n /**\n * Returns true if this block is an [[link-eip-2930]] block.\n */\n isLondon() {\n return !!this.baseFeePerGas;\n }\n /**\n * @_ignore:\n */\n orphanedEvent() {\n if (!this.isMined()) {\n throw new Error(\"\");\n }\n return createOrphanedBlockFilter(this);\n }\n}\n//////////////////////\n// Log\n/**\n * A **Log** in Ethereum represents an event that has been included in a\n * transaction using the ``LOG*`` opcodes, which are most commonly used by\n * Solidity's emit for announcing events.\n */\nexport class Log {\n /**\n * The provider connected to the log used to fetch additional details\n * if necessary.\n */\n provider;\n /**\n * The transaction hash of the transaction this log occurred in. Use the\n * [[Log-getTransaction]] to get the [[TransactionResponse]].\n */\n transactionHash;\n /**\n * The block hash of the block this log occurred in. Use the\n * [[Log-getBlock]] to get the [[Block]].\n */\n blockHash;\n /**\n * The block number of the block this log occurred in. It is preferred\n * to use the [[Block-hash]] when fetching the related [[Block]],\n * since in the case of an orphaned block, the block at that height may\n * have changed.\n */\n blockNumber;\n /**\n * If the **Log** represents a block that was removed due to an orphaned\n * block, this will be true.\n *\n * This can only happen within an orphan event listener.\n */\n removed;\n /**\n * The address of the contract that emitted this log.\n */\n address;\n /**\n * The data included in this log when it was emitted.\n */\n data;\n /**\n * The indexed topics included in this log when it was emitted.\n *\n * All topics are included in the bloom filters, so they can be\n * efficiently filtered using the [[Provider-getLogs]] method.\n */\n topics;\n /**\n * The index within the block this log occurred at. This is generally\n * not useful to developers, but can be used with the various roots\n * to proof inclusion within a block.\n */\n index;\n /**\n * The index within the transaction of this log.\n */\n transactionIndex;\n /**\n * @_ignore:\n */\n constructor(log, provider) {\n this.provider = provider;\n const topics = Object.freeze(log.topics.slice());\n defineProperties(this, {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n removed: log.removed,\n address: log.address,\n data: log.data,\n topics,\n index: log.index,\n transactionIndex: log.transactionIndex,\n });\n }\n /**\n * Returns a JSON-compatible object.\n */\n toJSON() {\n const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;\n return {\n _type: \"log\",\n address, blockHash, blockNumber, data, index,\n removed, topics, transactionHash, transactionIndex\n };\n }\n /**\n * Returns the block that this log occurred in.\n */\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n assert(!!block, \"failed to find transaction\", \"UNKNOWN_ERROR\", {});\n return block;\n }\n /**\n * Returns the transaction that this log occurred in.\n */\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.transactionHash);\n assert(!!tx, \"failed to find transaction\", \"UNKNOWN_ERROR\", {});\n return tx;\n }\n /**\n * Returns the transaction receipt fot the transaction that this\n * log occurred in.\n */\n async getTransactionReceipt() {\n const receipt = await this.provider.getTransactionReceipt(this.transactionHash);\n assert(!!receipt, \"failed to find transaction receipt\", \"UNKNOWN_ERROR\", {});\n return receipt;\n }\n /**\n * @_ignore:\n */\n removedEvent() {\n return createRemovedLogFilter(this);\n }\n}\n//////////////////////\n// Transaction Receipt\n/*\nexport interface LegacyTransactionReceipt {\n byzantium: false;\n status: null;\n root: string;\n}\n\nexport interface ByzantiumTransactionReceipt {\n byzantium: true;\n status: number;\n root: null;\n}\n*/\n/**\n * A **TransactionReceipt** includes additional information about a\n * transaction that is only available after it has been mined.\n */\nexport class TransactionReceipt {\n /**\n * The provider connected to the log used to fetch additional details\n * if necessary.\n */\n provider;\n /**\n * The address the transaction was sent to.\n */\n to;\n /**\n * The sender of the transaction.\n */\n from;\n /**\n * The address of the contract if the transaction was directly\n * responsible for deploying one.\n *\n * This is non-null **only** if the ``to`` is empty and the ``data``\n * was successfully executed as initcode.\n */\n contractAddress;\n /**\n * The transaction hash.\n */\n hash;\n /**\n * The index of this transaction within the block transactions.\n */\n index;\n /**\n * The block hash of the [[Block]] this transaction was included in.\n */\n blockHash;\n /**\n * The block number of the [[Block]] this transaction was included in.\n */\n blockNumber;\n /**\n * The bloom filter bytes that represent all logs that occurred within\n * this transaction. This is generally not useful for most developers,\n * but can be used to validate the included logs.\n */\n logsBloom;\n /**\n * The actual amount of gas used by this transaction.\n *\n * When creating a transaction, the amount of gas that will be used can\n * only be approximated, but the sender must pay the gas fee for the\n * entire gas limit. After the transaction, the difference is refunded.\n */\n gasUsed;\n /**\n * The gas used for BLObs. See [[link-eip-4844]].\n */\n blobGasUsed;\n /**\n * The amount of gas used by all transactions within the block for this\n * and all transactions with a lower ``index``.\n *\n * This is generally not useful for developers but can be used to\n * validate certain aspects of execution.\n */\n cumulativeGasUsed;\n /**\n * The actual gas price used during execution.\n *\n * Due to the complexity of [[link-eip-1559]] this value can only\n * be caluclated after the transaction has been mined, snce the base\n * fee is protocol-enforced.\n */\n gasPrice;\n /**\n * The price paid per BLOB in gas. See [[link-eip-4844]].\n */\n blobGasPrice;\n /**\n * The [[link-eip-2718]] transaction type.\n */\n type;\n //readonly byzantium!: boolean;\n /**\n * The status of this transaction, indicating success (i.e. ``1``) or\n * a revert (i.e. ``0``).\n *\n * This is available in post-byzantium blocks, but some backends may\n * backfill this value.\n */\n status;\n /**\n * The root hash of this transaction.\n *\n * This is no present and was only included in pre-byzantium blocks, but\n * could be used to validate certain parts of the receipt.\n */\n root;\n #logs;\n /**\n * @_ignore:\n */\n constructor(tx, provider) {\n this.#logs = Object.freeze(tx.logs.map((log) => {\n return new Log(log, provider);\n }));\n let gasPrice = BN_0;\n if (tx.effectiveGasPrice != null) {\n gasPrice = tx.effectiveGasPrice;\n }\n else if (tx.gasPrice != null) {\n gasPrice = tx.gasPrice;\n }\n defineProperties(this, {\n provider,\n to: tx.to,\n from: tx.from,\n contractAddress: tx.contractAddress,\n hash: tx.hash,\n index: tx.index,\n blockHash: tx.blockHash,\n blockNumber: tx.blockNumber,\n logsBloom: tx.logsBloom,\n gasUsed: tx.gasUsed,\n cumulativeGasUsed: tx.cumulativeGasUsed,\n blobGasUsed: tx.blobGasUsed,\n gasPrice,\n blobGasPrice: tx.blobGasPrice,\n type: tx.type,\n //byzantium: tx.byzantium,\n status: tx.status,\n root: tx.root\n });\n }\n /**\n * The logs for this transaction.\n */\n get logs() { return this.#logs; }\n /**\n * Returns a JSON-compatible representation.\n */\n toJSON() {\n const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, //byzantium, \n status, root } = this;\n return {\n _type: \"TransactionReceipt\",\n blockHash, blockNumber,\n //byzantium, \n contractAddress,\n cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n from,\n gasPrice: toJson(this.gasPrice),\n blobGasUsed: toJson(this.blobGasUsed),\n blobGasPrice: toJson(this.blobGasPrice),\n gasUsed: toJson(this.gasUsed),\n hash, index, logs, logsBloom, root, status, to\n };\n }\n /**\n * @_ignore:\n */\n get length() { return this.logs.length; }\n [Symbol.iterator]() {\n let index = 0;\n return {\n next: () => {\n if (index < this.length) {\n return { value: this.logs[index++], done: false };\n }\n return { value: undefined, done: true };\n }\n };\n }\n /**\n * The total fee for this transaction, in wei.\n */\n get fee() {\n return this.gasUsed * this.gasPrice;\n }\n /**\n * Resolves to the block this transaction occurred in.\n */\n async getBlock() {\n const block = await this.provider.getBlock(this.blockHash);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n /**\n * Resolves to the transaction this transaction occurred in.\n */\n async getTransaction() {\n const tx = await this.provider.getTransaction(this.hash);\n if (tx == null) {\n throw new Error(\"TODO\");\n }\n return tx;\n }\n /**\n * Resolves to the return value of the execution of this transaction.\n *\n * Support for this feature is limited, as it requires an archive node\n * with the ``debug_`` or ``trace_`` API enabled.\n */\n async getResult() {\n return (await this.provider.getTransactionResult(this.hash));\n }\n /**\n * Resolves to the number of confirmations this transaction has.\n */\n async confirmations() {\n return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n }\n /**\n * @_ignore:\n */\n removedEvent() {\n return createRemovedTransactionFilter(this);\n }\n /**\n * @_ignore:\n */\n reorderedEvent(other) {\n assert(!other || other.isMined(), \"unmined 'other' transction cannot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"reorderedEvent(other)\" });\n return createReorderedTransactionFilter(this, other);\n }\n}\n/**\n * A **TransactionResponse** includes all properties about a transaction\n * that was sent to the network, which may or may not be included in a\n * block.\n *\n * The [[TransactionResponse-isMined]] can be used to check if the\n * transaction has been mined as well as type guard that the otherwise\n * possibly ``null`` properties are defined.\n */\nexport class TransactionResponse {\n /**\n * The provider this is connected to, which will influence how its\n * methods will resolve its async inspection methods.\n */\n provider;\n /**\n * The block number of the block that this transaction was included in.\n *\n * This is ``null`` for pending transactions.\n */\n blockNumber;\n /**\n * The blockHash of the block that this transaction was included in.\n *\n * This is ``null`` for pending transactions.\n */\n blockHash;\n /**\n * The index within the block that this transaction resides at.\n */\n index;\n /**\n * The transaction hash.\n */\n hash;\n /**\n * The [[link-eip-2718]] transaction envelope type. This is\n * ``0`` for legacy transactions types.\n */\n type;\n /**\n * The receiver of this transaction.\n *\n * If ``null``, then the transaction is an initcode transaction.\n * This means the result of executing the [[data]] will be deployed\n * as a new contract on chain (assuming it does not revert) and the\n * address may be computed using [[getCreateAddress]].\n */\n to;\n /**\n * The sender of this transaction. It is implicitly computed\n * from the transaction pre-image hash (as the digest) and the\n * [[signature]] using ecrecover.\n */\n from;\n /**\n * The nonce, which is used to prevent replay attacks and offer\n * a method to ensure transactions from a given sender are explicitly\n * ordered.\n *\n * When sending a transaction, this must be equal to the number of\n * transactions ever sent by [[from]].\n */\n nonce;\n /**\n * The maximum units of gas this transaction can consume. If execution\n * exceeds this, the entries transaction is reverted and the sender\n * is charged for the full amount, despite not state changes being made.\n */\n gasLimit;\n /**\n * The gas price can have various values, depending on the network.\n *\n * In modern networks, for transactions that are included this is\n * the //effective gas price// (the fee per gas that was actually\n * charged), while for transactions that have not been included yet\n * is the [[maxFeePerGas]].\n *\n * For legacy transactions, or transactions on legacy networks, this\n * is the fee that will be charged per unit of gas the transaction\n * consumes.\n */\n gasPrice;\n /**\n * The maximum priority fee (per unit of gas) to allow a\n * validator to charge the sender. This is inclusive of the\n * [[maxFeeFeePerGas]].\n */\n maxPriorityFeePerGas;\n /**\n * The maximum fee (per unit of gas) to allow this transaction\n * to charge the sender.\n */\n maxFeePerGas;\n /**\n * The [[link-eip-4844]] max fee per BLOb gas.\n */\n maxFeePerBlobGas;\n /**\n * The data.\n */\n data;\n /**\n * The value, in wei. Use [[formatEther]] to format this value\n * as ether.\n */\n value;\n /**\n * The chain ID.\n */\n chainId;\n /**\n * The signature.\n */\n signature;\n /**\n * The [[link-eip-2930]] access list for transaction types that\n * support it, otherwise ``null``.\n */\n accessList;\n /**\n * The [[link-eip-4844]] BLOb versioned hashes.\n */\n blobVersionedHashes;\n /**\n * The [[link-eip-7702]] authorizations (if any).\n */\n authorizationList;\n #startBlock;\n /**\n * @_ignore:\n */\n constructor(tx, provider) {\n this.provider = provider;\n this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber : null;\n this.blockHash = (tx.blockHash != null) ? tx.blockHash : null;\n this.hash = tx.hash;\n this.index = tx.index;\n this.type = tx.type;\n this.from = tx.from;\n this.to = tx.to || null;\n this.gasLimit = tx.gasLimit;\n this.nonce = tx.nonce;\n this.data = tx.data;\n this.value = tx.value;\n this.gasPrice = tx.gasPrice;\n this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas : null;\n this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas : null;\n this.maxFeePerBlobGas = (tx.maxFeePerBlobGas != null) ? tx.maxFeePerBlobGas : null;\n this.chainId = tx.chainId;\n this.signature = tx.signature;\n this.accessList = (tx.accessList != null) ? tx.accessList : null;\n this.blobVersionedHashes = (tx.blobVersionedHashes != null) ? tx.blobVersionedHashes : null;\n this.authorizationList = (tx.authorizationList != null) ? tx.authorizationList : null;\n this.#startBlock = -1;\n }\n /**\n * Returns a JSON-compatible representation of this transaction.\n */\n toJSON() {\n const { blockNumber, blockHash, index, hash, type, to, from, nonce, data, signature, accessList, blobVersionedHashes } = this;\n return {\n _type: \"TransactionResponse\",\n accessList, blockNumber, blockHash,\n blobVersionedHashes,\n chainId: toJson(this.chainId),\n data, from,\n gasLimit: toJson(this.gasLimit),\n gasPrice: toJson(this.gasPrice),\n hash,\n maxFeePerGas: toJson(this.maxFeePerGas),\n maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n maxFeePerBlobGas: toJson(this.maxFeePerBlobGas),\n nonce, signature, to, index, type,\n value: toJson(this.value),\n };\n }\n /**\n * Resolves to the Block that this transaction was included in.\n *\n * This will return null if the transaction has not been included yet.\n */\n async getBlock() {\n let blockNumber = this.blockNumber;\n if (blockNumber == null) {\n const tx = await this.getTransaction();\n if (tx) {\n blockNumber = tx.blockNumber;\n }\n }\n if (blockNumber == null) {\n return null;\n }\n const block = this.provider.getBlock(blockNumber);\n if (block == null) {\n throw new Error(\"TODO\");\n }\n return block;\n }\n /**\n * Resolves to this transaction being re-requested from the\n * provider. This can be used if you have an unmined transaction\n * and wish to get an up-to-date populated instance.\n */\n async getTransaction() {\n return this.provider.getTransaction(this.hash);\n }\n /**\n * Resolve to the number of confirmations this transaction has.\n */\n async confirmations() {\n if (this.blockNumber == null) {\n const { tx, blockNumber } = await resolveProperties({\n tx: this.getTransaction(),\n blockNumber: this.provider.getBlockNumber()\n });\n // Not mined yet...\n if (tx == null || tx.blockNumber == null) {\n return 0;\n }\n return blockNumber - tx.blockNumber + 1;\n }\n const blockNumber = await this.provider.getBlockNumber();\n return blockNumber - this.blockNumber + 1;\n }\n /**\n * Resolves once this transaction has been mined and has\n * %%confirms%% blocks including it (default: ``1``) with an\n * optional %%timeout%%.\n *\n * This can resolve to ``null`` only if %%confirms%% is ``0``\n * and the transaction has not been mined, otherwise this will\n * wait until enough confirmations have completed.\n */\n async wait(_confirms, _timeout) {\n const confirms = (_confirms == null) ? 1 : _confirms;\n const timeout = (_timeout == null) ? 0 : _timeout;\n let startBlock = this.#startBlock;\n let nextScan = -1;\n let stopScanning = (startBlock === -1) ? true : false;\n const checkReplacement = async () => {\n // Get the current transaction count for this sender\n if (stopScanning) {\n return null;\n }\n const { blockNumber, nonce } = await resolveProperties({\n blockNumber: this.provider.getBlockNumber(),\n nonce: this.provider.getTransactionCount(this.from)\n });\n // No transaction or our nonce has not been mined yet; but we\n // can start scanning later when we do start\n if (nonce < this.nonce) {\n startBlock = blockNumber;\n return;\n }\n // We were mined; no replacement\n if (stopScanning) {\n return null;\n }\n const mined = await this.getTransaction();\n if (mined && mined.blockNumber != null) {\n return;\n }\n // We were replaced; start scanning for that transaction\n // Starting to scan; look back a few extra blocks for safety\n if (nextScan === -1) {\n nextScan = startBlock - 3;\n if (nextScan < this.#startBlock) {\n nextScan = this.#startBlock;\n }\n }\n while (nextScan <= blockNumber) {\n // Get the next block to scan\n if (stopScanning) {\n return null;\n }\n const block = await this.provider.getBlock(nextScan, true);\n // This should not happen; but we'll try again shortly\n if (block == null) {\n return;\n }\n // We were mined; no replacement\n for (const hash of block) {\n if (hash === this.hash) {\n return;\n }\n }\n // Search for the transaction that replaced us\n for (let i = 0; i < block.length; i++) {\n const tx = await block.getTransaction(i);\n if (tx.from === this.from && tx.nonce === this.nonce) {\n // Get the receipt\n if (stopScanning) {\n return null;\n }\n const receipt = await this.provider.getTransactionReceipt(tx.hash);\n // This should not happen; but we'll try again shortly\n if (receipt == null) {\n return;\n }\n // We will retry this on the next block (this case could be optimized)\n if ((blockNumber - receipt.blockNumber + 1) < confirms) {\n return;\n }\n // The reason we were replaced\n let reason = \"replaced\";\n if (tx.data === this.data && tx.to === this.to && tx.value === this.value) {\n reason = \"repriced\";\n }\n else if (tx.data === \"0x\" && tx.from === tx.to && tx.value === BN_0) {\n reason = \"cancelled\";\n }\n assert(false, \"transaction was replaced\", \"TRANSACTION_REPLACED\", {\n cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n reason,\n replacement: tx.replaceableTransaction(startBlock),\n hash: tx.hash,\n receipt\n });\n }\n }\n nextScan++;\n }\n return;\n };\n const checkReceipt = (receipt) => {\n if (receipt == null || receipt.status !== 0) {\n return receipt;\n }\n assert(false, \"transaction execution reverted\", \"CALL_EXCEPTION\", {\n action: \"sendTransaction\",\n data: null, reason: null, invocation: null, revert: null,\n transaction: {\n to: receipt.to,\n from: receipt.from,\n data: \"\" // @TODO: in v7, split out sendTransaction properties\n }, receipt\n });\n };\n const receipt = await this.provider.getTransactionReceipt(this.hash);\n if (confirms === 0) {\n return checkReceipt(receipt);\n }\n if (receipt) {\n if (confirms === 1 || (await receipt.confirmations()) >= confirms) {\n return checkReceipt(receipt);\n }\n }\n else {\n // Check for a replacement; throws if a replacement was found\n await checkReplacement();\n // Allow null only when the confirms is 0\n if (confirms === 0) {\n return null;\n }\n }\n const waiter = new Promise((resolve, reject) => {\n // List of things to cancel when we have a result (one way or the other)\n const cancellers = [];\n const cancel = () => { cancellers.forEach((c) => c()); };\n // On cancel, stop scanning for replacements\n cancellers.push(() => { stopScanning = true; });\n // Set up any timeout requested\n if (timeout > 0) {\n const timer = setTimeout(() => {\n cancel();\n reject(makeError(\"wait for transaction timeout\", \"TIMEOUT\"));\n }, timeout);\n cancellers.push(() => { clearTimeout(timer); });\n }\n const txListener = async (receipt) => {\n // Done; return it!\n if ((await receipt.confirmations()) >= confirms) {\n cancel();\n try {\n resolve(checkReceipt(receipt));\n }\n catch (error) {\n reject(error);\n }\n }\n };\n cancellers.push(() => { this.provider.off(this.hash, txListener); });\n this.provider.on(this.hash, txListener);\n // We support replacement detection; start checking\n if (startBlock >= 0) {\n const replaceListener = async () => {\n try {\n // Check for a replacement; this throws only if one is found\n await checkReplacement();\n }\n catch (error) {\n // We were replaced (with enough confirms); re-throw the error\n if (isError(error, \"TRANSACTION_REPLACED\")) {\n cancel();\n reject(error);\n return;\n }\n }\n // Rescheudle a check on the next block\n if (!stopScanning) {\n this.provider.once(\"block\", replaceListener);\n }\n };\n cancellers.push(() => { this.provider.off(\"block\", replaceListener); });\n this.provider.once(\"block\", replaceListener);\n }\n });\n return await waiter;\n }\n /**\n * Returns ``true`` if this transaction has been included.\n *\n * This is effective only as of the time the TransactionResponse\n * was instantiated. To get up-to-date information, use\n * [[getTransaction]].\n *\n * This provides a Type Guard that this transaction will have\n * non-null property values for properties that are null for\n * unmined transactions.\n */\n isMined() {\n return (this.blockHash != null);\n }\n /**\n * Returns true if the transaction is a legacy (i.e. ``type == 0``)\n * transaction.\n *\n * This provides a Type Guard that this transaction will have\n * the ``null``-ness for hardfork-specific properties set correctly.\n */\n isLegacy() {\n return (this.type === 0);\n }\n /**\n * Returns true if the transaction is a Berlin (i.e. ``type == 1``)\n * transaction. See [[link-eip-2070]].\n *\n * This provides a Type Guard that this transaction will have\n * the ``null``-ness for hardfork-specific properties set correctly.\n */\n isBerlin() {\n return (this.type === 1);\n }\n /**\n * Returns true if the transaction is a London (i.e. ``type == 2``)\n * transaction. See [[link-eip-1559]].\n *\n * This provides a Type Guard that this transaction will have\n * the ``null``-ness for hardfork-specific properties set correctly.\n */\n isLondon() {\n return (this.type === 2);\n }\n /**\n * Returns true if hte transaction is a Cancun (i.e. ``type == 3``)\n * transaction. See [[link-eip-4844]].\n */\n isCancun() {\n return (this.type === 3);\n }\n /**\n * Returns a filter which can be used to listen for orphan events\n * that evict this transaction.\n */\n removedEvent() {\n assert(this.isMined(), \"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n return createRemovedTransactionFilter(this);\n }\n /**\n * Returns a filter which can be used to listen for orphan events\n * that re-order this event against %%other%%.\n */\n reorderedEvent(other) {\n assert(this.isMined(), \"unmined transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n assert(!other || other.isMined(), \"unmined 'other' transaction canot be orphaned\", \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n return createReorderedTransactionFilter(this, other);\n }\n /**\n * Returns a new TransactionResponse instance which has the ability to\n * detect (and throw an error) if the transaction is replaced, which\n * will begin scanning at %%startBlock%%.\n *\n * This should generally not be used by developers and is intended\n * primarily for internal use. Setting an incorrect %%startBlock%% can\n * have devastating performance consequences if used incorrectly.\n */\n replaceableTransaction(startBlock) {\n assertArgument(Number.isInteger(startBlock) && startBlock >= 0, \"invalid startBlock\", \"startBlock\", startBlock);\n const tx = new TransactionResponse(this, this.provider);\n tx.#startBlock = startBlock;\n return tx;\n }\n}\nfunction createOrphanedBlockFilter(block) {\n return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\nfunction createReorderedTransactionFilter(tx, other) {\n return { orphan: \"reorder-transaction\", tx, other };\n}\nfunction createRemovedTransactionFilter(tx) {\n return { orphan: \"drop-transaction\", tx };\n}\nfunction createRemovedLogFilter(log) {\n return { orphan: \"drop-log\", log: {\n transactionHash: log.transactionHash,\n blockHash: log.blockHash,\n blockNumber: log.blockNumber,\n address: log.address,\n data: log.data,\n topics: Object.freeze(log.topics.slice()),\n index: log.index\n } };\n}\n//# sourceMappingURL=provider.js.map","// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport { Log, TransactionReceipt, TransactionResponse } from \"../providers/provider.js\";\nimport { defineProperties, EventPayload } from \"../utils/index.js\";\n/**\n * An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class EventLog extends Log {\n /**\n * The Contract Interface.\n */\n interface;\n /**\n * The matching event.\n */\n fragment;\n /**\n * The parsed arguments passed to the event by ``emit``.\n */\n args;\n /**\n * @_ignore:\n */\n constructor(log, iface, fragment) {\n super(log, log.provider);\n const args = iface.decodeEventLog(fragment, log.data, log.topics);\n defineProperties(this, { args, fragment, interface: iface });\n }\n /**\n * The name of the event.\n */\n get eventName() { return this.fragment.name; }\n /**\n * The signature of the event.\n */\n get eventSignature() { return this.fragment.format(); }\n}\n/**\n * An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class UndecodedEventLog extends Log {\n /**\n * The error encounted when trying to decode the log.\n */\n error;\n /**\n * @_ignore:\n */\n constructor(log, error) {\n super(log, log.provider);\n defineProperties(this, { error });\n }\n}\n/**\n * A **ContractTransactionReceipt** includes the parsed logs from a\n * [[TransactionReceipt]].\n */\nexport class ContractTransactionReceipt extends TransactionReceipt {\n #iface;\n /**\n * @_ignore:\n */\n constructor(iface, provider, tx) {\n super(tx, provider);\n this.#iface = iface;\n }\n /**\n * The parsed logs for any [[Log]] which has a matching event in the\n * Contract ABI.\n */\n get logs() {\n return super.logs.map((log) => {\n const fragment = log.topics.length ? this.#iface.getEvent(log.topics[0]) : null;\n if (fragment) {\n try {\n return new EventLog(log, this.#iface, fragment);\n }\n catch (error) {\n return new UndecodedEventLog(log, error);\n }\n }\n return log;\n });\n }\n}\n/**\n * A **ContractTransactionResponse** will return a\n * [[ContractTransactionReceipt]] when waited on.\n */\nexport class ContractTransactionResponse extends TransactionResponse {\n #iface;\n /**\n * @_ignore:\n */\n constructor(iface, provider, tx) {\n super(tx, provider);\n this.#iface = iface;\n }\n /**\n * Resolves once this transaction has been mined and has\n * %%confirms%% blocks including it (default: ``1``) with an\n * optional %%timeout%%.\n *\n * This can resolve to ``null`` only if %%confirms%% is ``0``\n * and the transaction has not been mined, otherwise this will\n * wait until enough confirmations have completed.\n */\n async wait(confirms, timeout) {\n const receipt = await super.wait(confirms, timeout);\n if (receipt == null) {\n return null;\n }\n return new ContractTransactionReceipt(this.#iface, this.provider, receipt);\n }\n}\n/**\n * A **ContractUnknownEventPayload** is included as the last parameter to\n * Contract Events when the event does not match any events in the ABI.\n */\nexport class ContractUnknownEventPayload extends EventPayload {\n /**\n * The log with no matching events.\n */\n log;\n /**\n * @_event:\n */\n constructor(contract, listener, filter, log) {\n super(contract, listener, filter);\n defineProperties(this, { log });\n }\n /**\n * Resolves to the block the event occured in.\n */\n async getBlock() {\n return await this.log.getBlock();\n }\n /**\n * Resolves to the transaction the event occured in.\n */\n async getTransaction() {\n return await this.log.getTransaction();\n }\n /**\n * Resolves to the transaction receipt the event occured in.\n */\n async getTransactionReceipt() {\n return await this.log.getTransactionReceipt();\n }\n}\n/**\n * A **ContractEventPayload** is included as the last parameter to\n * Contract Events when the event is known.\n */\nexport class ContractEventPayload extends ContractUnknownEventPayload {\n /**\n * @_ignore:\n */\n constructor(contract, listener, filter, fragment, _log) {\n super(contract, listener, filter, new EventLog(_log, contract.interface, fragment));\n const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics);\n defineProperties(this, { args, fragment });\n }\n /**\n * The event name.\n */\n get eventName() {\n return this.fragment.name;\n }\n /**\n * The event signature.\n */\n get eventSignature() {\n return this.fragment.format();\n }\n}\n//# sourceMappingURL=wrappers.js.map","import { Interface, Typed } from \"../abi/index.js\";\nimport { isAddressable, resolveAddress } from \"../address/index.js\";\n// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport { copyRequest, Log } from \"../providers/provider.js\";\nimport { defineProperties, getBigInt, isCallException, isHexString, resolveProperties, isError, makeError, assert, assertArgument } from \"../utils/index.js\";\nimport { ContractEventPayload, ContractUnknownEventPayload, ContractTransactionResponse, EventLog, UndecodedEventLog } from \"./wrappers.js\";\nconst BN_0 = BigInt(0);\nfunction canCall(value) {\n return (value && typeof (value.call) === \"function\");\n}\nfunction canEstimate(value) {\n return (value && typeof (value.estimateGas) === \"function\");\n}\nfunction canResolve(value) {\n return (value && typeof (value.resolveName) === \"function\");\n}\nfunction canSend(value) {\n return (value && typeof (value.sendTransaction) === \"function\");\n}\nfunction getResolver(value) {\n if (value != null) {\n if (canResolve(value)) {\n return value;\n }\n if (value.provider) {\n return value.provider;\n }\n }\n return undefined;\n}\nclass PreparedTopicFilter {\n #filter;\n fragment;\n constructor(contract, fragment, args) {\n defineProperties(this, { fragment });\n if (fragment.inputs.length < args.length) {\n throw new Error(\"too many arguments\");\n }\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(contract.runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n this.#filter = (async function () {\n const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n const arg = args[index];\n if (arg == null) {\n return null;\n }\n return param.walkAsync(args[index], (type, value) => {\n if (type === \"address\") {\n if (Array.isArray(value)) {\n return Promise.all(value.map((v) => resolveAddress(v, resolver)));\n }\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n })();\n }\n getTopicFilter() {\n return this.#filter;\n }\n}\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n// the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n// TransactionResponse otherwise)\n//export interface ContractMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\nfunction getRunner(value, feature) {\n if (value == null) {\n return null;\n }\n if (typeof (value[feature]) === \"function\") {\n return value;\n }\n if (value.provider && typeof (value.provider[feature]) === \"function\") {\n return value.provider;\n }\n return null;\n}\nfunction getProvider(value) {\n if (value == null) {\n return null;\n }\n return value.provider || null;\n}\n/**\n * @_ignore:\n */\nexport async function copyOverrides(arg, allowed) {\n // Make sure the overrides passed in are a valid overrides object\n const _overrides = Typed.dereference(arg, \"overrides\");\n assertArgument(typeof (_overrides) === \"object\", \"invalid overrides parameter\", \"overrides\", arg);\n // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n const overrides = copyRequest(_overrides);\n assertArgument(overrides.to == null || (allowed || []).indexOf(\"to\") >= 0, \"cannot override to\", \"overrides.to\", overrides.to);\n assertArgument(overrides.data == null || (allowed || []).indexOf(\"data\") >= 0, \"cannot override data\", \"overrides.data\", overrides.data);\n // Resolve any from\n if (overrides.from) {\n overrides.from = overrides.from;\n }\n return overrides;\n}\n/**\n * @_ignore:\n */\nexport async function resolveArgs(_runner, inputs, args) {\n // Recursively descend into args and resolve any addresses\n const runner = getRunner(_runner, \"resolveName\");\n const resolver = canResolve(runner) ? runner : null;\n return await Promise.all(inputs.map((param, index) => {\n return param.walkAsync(args[index], (type, value) => {\n value = Typed.dereference(value, type);\n if (type === \"address\") {\n return resolveAddress(value, resolver);\n }\n return value;\n });\n }));\n}\nfunction buildWrappedFallback(contract) {\n const populateTransaction = async function (overrides) {\n // If an overrides was passed in, copy it and normalize the values\n const tx = (await copyOverrides(overrides, [\"data\"]));\n tx.to = await contract.getAddress();\n if (tx.from) {\n tx.from = await resolveAddress(tx.from, getResolver(contract.runner));\n }\n const iface = contract.interface;\n const noValue = (getBigInt((tx.value || BN_0), \"overrides.value\") === BN_0);\n const noData = ((tx.data || \"0x\") === \"0x\");\n if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) {\n assertArgument(false, \"cannot send data to receive or send value to non-payable fallback\", \"overrides\", overrides);\n }\n assertArgument(iface.fallback || noData, \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n // Only allow payable contracts to set non-zero value\n const payable = iface.receive || (iface.fallback && iface.fallback.payable);\n assertArgument(payable || noValue, \"cannot send value to non-payable fallback\", \"overrides.value\", tx.value);\n // Only allow fallback contracts to set non-empty data\n assertArgument(iface.fallback || noData, \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n return tx;\n };\n const staticCall = async function (overrides) {\n const runner = getRunner(contract.runner, \"call\");\n assert(canCall(runner), \"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n const tx = await populateTransaction(overrides);\n try {\n return await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error) && error.data) {\n throw contract.interface.makeError(error.data, tx);\n }\n throw error;\n }\n };\n const send = async function (overrides) {\n const runner = contract.runner;\n assert(canSend(runner), \"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n const tx = await runner.sendTransaction(await populateTransaction(overrides));\n const provider = getProvider(contract.runner);\n // @TODO: the provider can be null; make a custom dummy provider that will throw a\n // meaningful error\n return new ContractTransactionResponse(contract.interface, provider, tx);\n };\n const estimateGas = async function (overrides) {\n const runner = getRunner(contract.runner, \"estimateGas\");\n assert(canEstimate(runner), \"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n return await runner.estimateGas(await populateTransaction(overrides));\n };\n const method = async (overrides) => {\n return await send(overrides);\n };\n defineProperties(method, {\n _contract: contract,\n estimateGas,\n populateTransaction,\n send, staticCall\n });\n return method;\n}\nfunction buildWrappedMethod(contract, key) {\n const getFragment = function (...args) {\n const fragment = contract.interface.getFunction(key, args);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key, args }\n });\n return fragment;\n };\n const populateTransaction = async function (...args) {\n const fragment = getFragment(...args);\n // If an overrides was passed in, copy it and normalize the values\n let overrides = {};\n if (fragment.inputs.length + 1 === args.length) {\n overrides = await copyOverrides(args.pop());\n if (overrides.from) {\n overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));\n }\n }\n if (fragment.inputs.length !== args.length) {\n throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n }\n const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args);\n return Object.assign({}, overrides, await resolveProperties({\n to: contract.getAddress(),\n data: contract.interface.encodeFunctionData(fragment, resolvedArgs)\n }));\n };\n const staticCall = async function (...args) {\n const result = await staticCallResult(...args);\n if (result.length === 1) {\n return result[0];\n }\n return result;\n };\n const send = async function (...args) {\n const runner = contract.runner;\n assert(canSend(runner), \"contract runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n const tx = await runner.sendTransaction(await populateTransaction(...args));\n const provider = getProvider(contract.runner);\n // @TODO: the provider can be null; make a custom dummy provider that will throw a\n // meaningful error\n return new ContractTransactionResponse(contract.interface, provider, tx);\n };\n const estimateGas = async function (...args) {\n const runner = getRunner(contract.runner, \"estimateGas\");\n assert(canEstimate(runner), \"contract runner does not support gas estimation\", \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n return await runner.estimateGas(await populateTransaction(...args));\n };\n const staticCallResult = async function (...args) {\n const runner = getRunner(contract.runner, \"call\");\n assert(canCall(runner), \"contract runner does not support calling\", \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n const tx = await populateTransaction(...args);\n let result = \"0x\";\n try {\n result = await runner.call(tx);\n }\n catch (error) {\n if (isCallException(error) && error.data) {\n throw contract.interface.makeError(error.data, tx);\n }\n throw error;\n }\n const fragment = getFragment(...args);\n return contract.interface.decodeFunctionResult(fragment, result);\n };\n const method = async (...args) => {\n const fragment = getFragment(...args);\n if (fragment.constant) {\n return await staticCall(...args);\n }\n return await send(...args);\n };\n defineProperties(method, {\n name: contract.interface.getFunctionName(key),\n _contract: contract, _key: key,\n getFragment,\n estimateGas,\n populateTransaction,\n send, staticCall, staticCallResult,\n });\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n Object.defineProperty(method, \"fragment\", {\n configurable: false,\n enumerable: true,\n get: () => {\n const fragment = contract.interface.getFunction(key);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key }\n });\n return fragment;\n }\n });\n return method;\n}\nfunction buildWrappedEvent(contract, key) {\n const getFragment = function (...args) {\n const fragment = contract.interface.getEvent(key, args);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key, args }\n });\n return fragment;\n };\n const method = function (...args) {\n return new PreparedTopicFilter(contract, getFragment(...args), args);\n };\n defineProperties(method, {\n name: contract.interface.getEventName(key),\n _contract: contract, _key: key,\n getFragment\n });\n // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n Object.defineProperty(method, \"fragment\", {\n configurable: false,\n enumerable: true,\n get: () => {\n const fragment = contract.interface.getEvent(key);\n assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n operation: \"fragment\",\n info: { key }\n });\n return fragment;\n }\n });\n return method;\n}\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\nconst internal = Symbol.for(\"_ethersInternal_contract\");\nconst internalValues = new WeakMap();\nfunction setInternal(contract, values) {\n internalValues.set(contract[internal], values);\n}\nfunction getInternal(contract) {\n return internalValues.get(contract[internal]);\n}\nfunction isDeferred(value) {\n return (value && typeof (value) === \"object\" && (\"getTopicFilter\" in value) &&\n (typeof (value.getTopicFilter) === \"function\") && value.fragment);\n}\nasync function getSubInfo(contract, event) {\n let topics;\n let fragment = null;\n // Convert named events to topicHash and get the fragment for\n // events which need deconstructing.\n if (Array.isArray(event)) {\n const topicHashify = function (name) {\n if (isHexString(name, 32)) {\n return name;\n }\n const fragment = contract.interface.getEvent(name);\n assertArgument(fragment, \"unknown fragment\", \"name\", name);\n return fragment.topicHash;\n };\n // Array of Topics and Names; e.g. `[ \"0x1234...89ab\", \"Transfer(address)\" ]`\n topics = event.map((e) => {\n if (e == null) {\n return null;\n }\n if (Array.isArray(e)) {\n return e.map(topicHashify);\n }\n return topicHashify(e);\n });\n }\n else if (event === \"*\") {\n topics = [null];\n }\n else if (typeof (event) === \"string\") {\n if (isHexString(event, 32)) {\n // Topic Hash\n topics = [event];\n }\n else {\n // Name or Signature; e.g. `\"Transfer\", `\"Transfer(address)\"`\n fragment = contract.interface.getEvent(event);\n assertArgument(fragment, \"unknown fragment\", \"event\", event);\n topics = [fragment.topicHash];\n }\n }\n else if (isDeferred(event)) {\n // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n topics = await event.getTopicFilter();\n }\n else if (\"fragment\" in event) {\n // ContractEvent; e.g. `contract.filter.Transfer`\n fragment = event.fragment;\n topics = [fragment.topicHash];\n }\n else {\n assertArgument(false, \"unknown event name\", \"event\", event);\n }\n // Normalize topics and sort TopicSets\n topics = topics.map((t) => {\n if (t == null) {\n return null;\n }\n if (Array.isArray(t)) {\n const items = Array.from(new Set(t.map((t) => t.toLowerCase())).values());\n if (items.length === 1) {\n return items[0];\n }\n items.sort();\n return items;\n }\n return t.toLowerCase();\n });\n const tag = topics.map((t) => {\n if (t == null) {\n return \"null\";\n }\n if (Array.isArray(t)) {\n return t.join(\"|\");\n }\n return t;\n }).join(\"&\");\n return { fragment, tag, topics };\n}\nasync function hasSub(contract, event) {\n const { subs } = getInternal(contract);\n return subs.get((await getSubInfo(contract, event)).tag) || null;\n}\nasync function getSub(contract, operation, event) {\n // Make sure our runner can actually subscribe to events\n const provider = getProvider(contract.runner);\n assert(provider, \"contract runner does not support subscribing\", \"UNSUPPORTED_OPERATION\", { operation });\n const { fragment, tag, topics } = await getSubInfo(contract, event);\n const { addr, subs } = getInternal(contract);\n let sub = subs.get(tag);\n if (!sub) {\n const address = (addr ? addr : contract);\n const filter = { address, topics };\n const listener = (log) => {\n let foundFragment = fragment;\n if (foundFragment == null) {\n try {\n foundFragment = contract.interface.getEvent(log.topics[0]);\n }\n catch (error) { }\n }\n // If fragment is null, we do not deconstruct the args to emit\n if (foundFragment) {\n const _foundFragment = foundFragment;\n const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics) : [];\n emit(contract, event, args, (listener) => {\n return new ContractEventPayload(contract, listener, event, _foundFragment, log);\n });\n }\n else {\n emit(contract, event, [], (listener) => {\n return new ContractUnknownEventPayload(contract, listener, event, log);\n });\n }\n };\n let starting = [];\n const start = () => {\n if (starting.length) {\n return;\n }\n starting.push(provider.on(filter, listener));\n };\n const stop = async () => {\n if (starting.length == 0) {\n return;\n }\n let started = starting;\n starting = [];\n await Promise.all(started);\n provider.off(filter, listener);\n };\n sub = { tag, listeners: [], start, stop };\n subs.set(tag, sub);\n }\n return sub;\n}\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit = Promise.resolve();\nasync function _emit(contract, event, args, payloadFunc) {\n await lastEmit;\n const sub = await hasSub(contract, event);\n if (!sub) {\n return false;\n }\n const count = sub.listeners.length;\n sub.listeners = sub.listeners.filter(({ listener, once }) => {\n const passArgs = Array.from(args);\n if (payloadFunc) {\n passArgs.push(payloadFunc(once ? null : listener));\n }\n try {\n listener.call(contract, ...passArgs);\n }\n catch (error) { }\n return !once;\n });\n if (sub.listeners.length === 0) {\n sub.stop();\n getInternal(contract).subs.delete(sub.tag);\n }\n return (count > 0);\n}\nasync function emit(contract, event, args, payloadFunc) {\n try {\n await lastEmit;\n }\n catch (error) { }\n const resultPromise = _emit(contract, event, args, payloadFunc);\n lastEmit = resultPromise;\n return await resultPromise;\n}\nconst passProperties = [\"then\"];\nexport class BaseContract {\n /**\n * The target to connect to.\n *\n * This can be an address, ENS name or any [[Addressable]], such as\n * another contract. To get the resovled address, use the ``getAddress``\n * method.\n */\n target;\n /**\n * The contract Interface.\n */\n interface;\n /**\n * The connected runner. This is generally a [[Provider]] or a\n * [[Signer]], which dictates what operations are supported.\n *\n * For example, a **Contract** connected to a [[Provider]] may\n * only execute read-only operations.\n */\n runner;\n /**\n * All the Events available on this contract.\n */\n filters;\n /**\n * @_ignore:\n */\n [internal];\n /**\n * The fallback or receive function if any.\n */\n fallback;\n /**\n * Creates a new contract connected to %%target%% with the %%abi%% and\n * optionally connected to a %%runner%% to perform operations on behalf\n * of.\n */\n constructor(target, abi, runner, _deployTx) {\n assertArgument(typeof (target) === \"string\" || isAddressable(target), \"invalid value for Contract target\", \"target\", target);\n if (runner == null) {\n runner = null;\n }\n const iface = Interface.from(abi);\n defineProperties(this, { target, runner, interface: iface });\n Object.defineProperty(this, internal, { value: {} });\n let addrPromise;\n let addr = null;\n let deployTx = null;\n if (_deployTx) {\n const provider = getProvider(runner);\n // @TODO: the provider can be null; make a custom dummy provider that will throw a\n // meaningful error\n deployTx = new ContractTransactionResponse(this.interface, provider, _deployTx);\n }\n let subs = new Map();\n // Resolve the target as the address\n if (typeof (target) === \"string\") {\n if (isHexString(target)) {\n addr = target;\n addrPromise = Promise.resolve(target);\n }\n else {\n const resolver = getRunner(runner, \"resolveName\");\n if (!canResolve(resolver)) {\n throw makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n operation: \"resolveName\"\n });\n }\n addrPromise = resolver.resolveName(target).then((addr) => {\n if (addr == null) {\n throw makeError(\"an ENS name used for a contract target must be correctly configured\", \"UNCONFIGURED_NAME\", {\n value: target\n });\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n }\n else {\n addrPromise = target.getAddress().then((addr) => {\n if (addr == null) {\n throw new Error(\"TODO\");\n }\n getInternal(this).addr = addr;\n return addr;\n });\n }\n // Set our private values\n setInternal(this, { addrPromise, addr, deployTx, subs });\n // Add the event filters\n const filters = new Proxy({}, {\n get: (target, prop, receiver) => {\n // Pass important checks (like `then` for Promise) through\n if (typeof (prop) === \"symbol\" || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n try {\n return this.getEvent(prop);\n }\n catch (error) {\n if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n throw error;\n }\n }\n return undefined;\n },\n has: (target, prop) => {\n // Pass important checks (like `then` for Promise) through\n if (passProperties.indexOf(prop) >= 0) {\n return Reflect.has(target, prop);\n }\n return Reflect.has(target, prop) || this.interface.hasEvent(String(prop));\n }\n });\n defineProperties(this, { filters });\n defineProperties(this, {\n fallback: ((iface.receive || iface.fallback) ? (buildWrappedFallback(this)) : null)\n });\n // Return a Proxy that will respond to functions\n return new Proxy(this, {\n get: (target, prop, receiver) => {\n if (typeof (prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.get(target, prop, receiver);\n }\n // Undefined properties should return undefined\n try {\n return target.getFunction(prop);\n }\n catch (error) {\n if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n throw error;\n }\n }\n return undefined;\n },\n has: (target, prop) => {\n if (typeof (prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n return Reflect.has(target, prop);\n }\n return target.interface.hasFunction(prop);\n }\n });\n }\n /**\n * Return a new Contract instance with the same target and ABI, but\n * a different %%runner%%.\n */\n connect(runner) {\n return new BaseContract(this.target, this.interface, runner);\n }\n /**\n * Return a new Contract instance with the same ABI and runner, but\n * a different %%target%%.\n */\n attach(target) {\n return new BaseContract(target, this.interface, this.runner);\n }\n /**\n * Return the resolved address of this Contract.\n */\n async getAddress() { return await getInternal(this).addrPromise; }\n /**\n * Return the deployed bytecode or null if no bytecode is found.\n */\n async getDeployedCode() {\n const provider = getProvider(this.runner);\n assert(provider, \"runner does not support .provider\", \"UNSUPPORTED_OPERATION\", { operation: \"getDeployedCode\" });\n const code = await provider.getCode(await this.getAddress());\n if (code === \"0x\") {\n return null;\n }\n return code;\n }\n /**\n * Resolve to this Contract once the bytecode has been deployed, or\n * resolve immediately if already deployed.\n */\n async waitForDeployment() {\n // We have the deployement transaction; just use that (throws if deployement fails)\n const deployTx = this.deploymentTransaction();\n if (deployTx) {\n await deployTx.wait();\n return this;\n }\n // Check for code\n const code = await this.getDeployedCode();\n if (code != null) {\n return this;\n }\n // Make sure we can subscribe to a provider event\n const provider = getProvider(this.runner);\n assert(provider != null, \"contract runner does not support .provider\", \"UNSUPPORTED_OPERATION\", { operation: \"waitForDeployment\" });\n return new Promise((resolve, reject) => {\n const checkCode = async () => {\n try {\n const code = await this.getDeployedCode();\n if (code != null) {\n return resolve(this);\n }\n provider.once(\"block\", checkCode);\n }\n catch (error) {\n reject(error);\n }\n };\n checkCode();\n });\n }\n /**\n * Return the transaction used to deploy this contract.\n *\n * This is only available if this instance was returned from a\n * [[ContractFactory]].\n */\n deploymentTransaction() {\n return getInternal(this).deployTx;\n }\n /**\n * Return the function for a given name. This is useful when a contract\n * method name conflicts with a JavaScript name such as ``prototype`` or\n * when using a Contract programatically.\n */\n getFunction(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n const func = buildWrappedMethod(this, key);\n return func;\n }\n /**\n * Return the event for a given name. This is useful when a contract\n * event name conflicts with a JavaScript name such as ``prototype`` or\n * when using a Contract programatically.\n */\n getEvent(key) {\n if (typeof (key) !== \"string\") {\n key = key.format();\n }\n return buildWrappedEvent(this, key);\n }\n /**\n * @_ignore:\n */\n async queryTransaction(hash) {\n throw new Error(\"@TODO\");\n }\n /*\n // @TODO: this is a non-backwards compatible change, but will be added\n // in v7 and in a potential SmartContract class in an upcoming\n // v6 release\n async getTransactionReceipt(hash: string): Promise<null | ContractTransactionReceipt> {\n const provider = getProvider(this.runner);\n assert(provider, \"contract runner does not have a provider\",\n \"UNSUPPORTED_OPERATION\", { operation: \"queryTransaction\" });\n\n const receipt = await provider.getTransactionReceipt(hash);\n if (receipt == null) { return null; }\n\n return new ContractTransactionReceipt(this.interface, provider, receipt);\n }\n */\n /**\n * Provide historic access to event data for %%event%% in the range\n * %%fromBlock%% (default: ``0``) to %%toBlock%% (default: ``\"latest\"``)\n * inclusive.\n */\n async queryFilter(event, fromBlock, toBlock) {\n if (fromBlock == null) {\n fromBlock = 0;\n }\n if (toBlock == null) {\n toBlock = \"latest\";\n }\n const { addr, addrPromise } = getInternal(this);\n const address = (addr ? addr : (await addrPromise));\n const { fragment, topics } = await getSubInfo(this, event);\n const filter = { address, topics, fromBlock, toBlock };\n const provider = getProvider(this.runner);\n assert(provider, \"contract runner does not have a provider\", \"UNSUPPORTED_OPERATION\", { operation: \"queryFilter\" });\n return (await provider.getLogs(filter)).map((log) => {\n let foundFragment = fragment;\n if (foundFragment == null) {\n try {\n foundFragment = this.interface.getEvent(log.topics[0]);\n }\n catch (error) { }\n }\n if (foundFragment) {\n try {\n return new EventLog(log, this.interface, foundFragment);\n }\n catch (error) {\n return new UndecodedEventLog(log, error);\n }\n }\n return new Log(log, provider);\n });\n }\n /**\n * Add an event %%listener%% for the %%event%%.\n */\n async on(event, listener) {\n const sub = await getSub(this, \"on\", event);\n sub.listeners.push({ listener, once: false });\n sub.start();\n return this;\n }\n /**\n * Add an event %%listener%% for the %%event%%, but remove the listener\n * after it is fired once.\n */\n async once(event, listener) {\n const sub = await getSub(this, \"once\", event);\n sub.listeners.push({ listener, once: true });\n sub.start();\n return this;\n }\n /**\n * Emit an %%event%% calling all listeners with %%args%%.\n *\n * Resolves to ``true`` if any listeners were called.\n */\n async emit(event, ...args) {\n return await emit(this, event, args, null);\n }\n /**\n * Resolves to the number of listeners of %%event%% or the total number\n * of listeners if unspecified.\n */\n async listenerCount(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return 0;\n }\n return sub.listeners.length;\n }\n const { subs } = getInternal(this);\n let total = 0;\n for (const { listeners } of subs.values()) {\n total += listeners.length;\n }\n return total;\n }\n /**\n * Resolves to the listeners subscribed to %%event%% or all listeners\n * if unspecified.\n */\n async listeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return [];\n }\n return sub.listeners.map(({ listener }) => listener);\n }\n const { subs } = getInternal(this);\n let result = [];\n for (const { listeners } of subs.values()) {\n result = result.concat(listeners.map(({ listener }) => listener));\n }\n return result;\n }\n /**\n * Remove the %%listener%% from the listeners for %%event%% or remove\n * all listeners if unspecified.\n */\n async off(event, listener) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n if (listener) {\n const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n if (index >= 0) {\n sub.listeners.splice(index, 1);\n }\n }\n if (listener == null || sub.listeners.length === 0) {\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n return this;\n }\n /**\n * Remove all the listeners for %%event%% or remove all listeners if\n * unspecified.\n */\n async removeAllListeners(event) {\n if (event) {\n const sub = await hasSub(this, event);\n if (!sub) {\n return this;\n }\n sub.stop();\n getInternal(this).subs.delete(sub.tag);\n }\n else {\n const { subs } = getInternal(this);\n for (const { tag, stop } of subs.values()) {\n stop();\n subs.delete(tag);\n }\n }\n return this;\n }\n /**\n * Alias for [on].\n */\n async addListener(event, listener) {\n return await this.on(event, listener);\n }\n /**\n * Alias for [off].\n */\n async removeListener(event, listener) {\n return await this.off(event, listener);\n }\n /**\n * Create a new Class for the %%abi%%.\n */\n static buildClass(abi) {\n class CustomContract extends BaseContract {\n constructor(address, runner = null) {\n super(address, abi, runner);\n }\n }\n return CustomContract;\n }\n ;\n /**\n * Create a new BaseContract with a specified Interface.\n */\n static from(target, abi, runner) {\n if (runner == null) {\n runner = null;\n }\n const contract = new this(target, abi, runner);\n return contract;\n }\n}\nfunction _ContractBase() {\n return BaseContract;\n}\n/**\n * A [[BaseContract]] with no type guards on its methods or events.\n */\nexport class Contract extends _ContractBase() {\n}\n//# sourceMappingURL=contract.js.map","// // walletService.js - UPDATED VERSION FOR ETHERS COMPATIBILITY\r\n\r\n// // Import ethers in a way that works with both v5 and v6\r\n// import { ethers } from 'ethers';\r\n\r\n// // Wallet Types\r\n// export const WALLET_TYPES = {\r\n// METAMASK: 'metamask',\r\n// TRONLINK: 'tronlink',\r\n// TRUST_WALLET: 'trustwallet',\r\n// LUTE: 'lute'\r\n// };\r\n\r\n// // Network Types\r\n// export const NETWORK_TYPES = {\r\n// ETHEREUM: 'ethereum',\r\n// BSC: 'bsc',\r\n// TRON: 'tron',\r\n// ALGORAND: 'algorand'\r\n// };\r\n\r\n// // Network configuration that index.js is trying to import\r\n// export const NETWORK_CONFIG = {\r\n// [NETWORK_TYPES.ETHEREUM]: {\r\n// name: 'Ethereum Mainnet',\r\n// chainId: 1,\r\n// symbol: 'ETH',\r\n// decimals: 18,\r\n// rpcUrl: 'https://mainnet.infura.io/v3/your-infura-key',\r\n// blockExplorerUrl: 'https://etherscan.io'\r\n// },\r\n// [NETWORK_TYPES.BSC]: {\r\n// name: 'Binance Smart Chain',\r\n// chainId: 56,\r\n// symbol: 'BNB',\r\n// decimals: 18,\r\n// rpcUrl: 'https://bsc-dataseed.binance.org/',\r\n// blockExplorerUrl: 'https://bscscan.com'\r\n// },\r\n// [NETWORK_TYPES.TRON]: {\r\n// name: 'TRON Mainnet',\r\n// symbol: 'TRX',\r\n// decimals: 6,\r\n// rpcUrl: 'https://api.trongrid.io',\r\n// blockExplorerUrl: 'https://tronscan.org'\r\n// },\r\n// [NETWORK_TYPES.ALGORAND]: {\r\n// name: 'Algorand Mainnet',\r\n// symbol: 'ALGO',\r\n// decimals: 6,\r\n// rpcUrl: 'https://mainnet-api.algonode.cloud',\r\n// blockExplorerUrl: 'https://algoexplorer.io'\r\n// }\r\n// };\r\n\r\n// // Token configurations with correct contract addresses and decimals\r\n// export const TOKEN_CONFIG = {\r\n// USDT: {\r\n// ethereum: {\r\n// contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n// decimals: 6,\r\n// symbol: 'USDT'\r\n// },\r\n// bsc: {\r\n// contractAddress: '0x55d398326f99059fF775485246999027B3197955',\r\n// decimals: 18,\r\n// symbol: 'USDT'\r\n// },\r\n// tron: {\r\n// contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\r\n// decimals: 6,\r\n// symbol: 'USDT'\r\n// },\r\n// algorand: {\r\n// assetId: 312769,\r\n// decimals: 6,\r\n// symbol: 'USDT'\r\n// }\r\n// },\r\n// USDC: {\r\n// ethereum: {\r\n// contractAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\r\n// decimals: 6, // USDC has 6 decimals on Ethereum!\r\n// symbol: 'USDC'\r\n// },\r\n// bsc: {\r\n// contractAddress: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',\r\n// decimals: 18,\r\n// symbol: 'USDC'\r\n// },\r\n// tron: {\r\n// contractAddress: 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8',\r\n// decimals: 6,\r\n// symbol: 'USDC'\r\n// },\r\n// algorand: {\r\n// assetId: 31566704,\r\n// decimals: 6,\r\n// symbol: 'USDC'\r\n// }\r\n// },\r\n// BNB: {\r\n// bsc: {\r\n// // BNB is native to BSC\r\n// decimals: 18,\r\n// symbol: 'BNB',\r\n// isNative: true\r\n// }\r\n// },\r\n// ETH: {\r\n// ethereum: {\r\n// // ETH is native to Ethereum\r\n// decimals: 18,\r\n// symbol: 'ETH',\r\n// isNative: true\r\n// }\r\n// },\r\n// TRX: {\r\n// tron: {\r\n// // TRX is native to TRON\r\n// decimals: 6,\r\n// symbol: 'TRX',\r\n// isNative: true\r\n// }\r\n// },\r\n// ALGO: {\r\n// algorand: {\r\n// // ALGO is native to Algorand\r\n// decimals: 6,\r\n// symbol: 'ALGO',\r\n// isNative: true\r\n// }\r\n// }\r\n// };\r\n\r\n// // Network to wallet mapping\r\n// export const NETWORK_WALLET_MAP = {\r\n// [NETWORK_TYPES.ETHEREUM]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n// [NETWORK_TYPES.BSC]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n// [NETWORK_TYPES.TRON]: [WALLET_TYPES.TRONLINK],\r\n// [NETWORK_TYPES.ALGORAND]: [WALLET_TYPES.LUTE]\r\n// };\r\n\r\n// // Installation URLs for wallets\r\n// export const getWalletInstallUrl = (walletType) => {\r\n// const urls = {\r\n// [WALLET_TYPES.METAMASK]: 'https://metamask.io/download/',\r\n// [WALLET_TYPES.TRONLINK]: 'https://www.tronlink.org/download/',\r\n// [WALLET_TYPES.TRUST_WALLET]: 'https://trustwallet.com/download/',\r\n// [WALLET_TYPES.LUTE]: 'https://lute.app/download/'\r\n// };\r\n// return urls[walletType] || '';\r\n// };\r\n\r\n// // Detect available wallets in the browser\r\n// export const detectWallets = () => {\r\n// const availableWallets = {\r\n// [WALLET_TYPES.METAMASK]: typeof window !== 'undefined' && window.ethereum !== undefined,\r\n// [WALLET_TYPES.TRONLINK]: typeof window !== 'undefined' && window.tronWeb !== undefined,\r\n// [WALLET_TYPES.TRUST_WALLET]: typeof window !== 'undefined' && \r\n// window.ethereum !== undefined && \r\n// window.ethereum.isTrust === true,\r\n// [WALLET_TYPES.LUTE]: typeof window !== 'undefined' && window.lute !== undefined\r\n// };\r\n// return availableWallets;\r\n// };\r\n\r\n// // This function was missing in the original update - adding it back\r\n// export const detectWalletsWithRetry = async (maxRetries = 3, delay = 500) => {\r\n// let retries = 0;\r\n// let wallets = detectWallets();\r\n \r\n// // Check if any wallets were detected\r\n// const hasAnyWallet = Object.values(wallets).some(v => v === true);\r\n \r\n// // If no wallets were detected on first try, retry a few times\r\n// while (!hasAnyWallet && retries < maxRetries) {\r\n// console.log(`No wallets detected, retrying (${retries + 1}/${maxRetries})...`);\r\n// await new Promise(resolve => setTimeout(resolve, delay));\r\n// wallets = detectWallets();\r\n// retries++;\r\n// }\r\n \r\n// return wallets;\r\n// };\r\n\r\n// // Debug wallet environment - useful for troubleshooting\r\n// export const debugWalletEnvironment = () => {\r\n// console.log('=== WALLET ENVIRONMENT DEBUG ===');\r\n// console.log('ethereum:', typeof window !== 'undefined' ? Boolean(window.ethereum) : 'Not in browser');\r\n// console.log('tronWeb:', typeof window !== 'undefined' ? Boolean(window.tronWeb) : 'Not in browser');\r\n// console.log('lute:', typeof window !== 'undefined' ? Boolean(window.lute) : 'Not in browser');\r\n \r\n// if (typeof window !== 'undefined' && window.ethereum) {\r\n// console.log('ethereum details:', {\r\n// isTrust: window.ethereum.isTrust,\r\n// isMetaMask: window.ethereum.isMetaMask,\r\n// chainId: window.ethereum.chainId\r\n// });\r\n// }\r\n \r\n// if (typeof window !== 'undefined' && window.tronWeb) {\r\n// console.log('tronWeb details:', {\r\n// ready: window.tronWeb.ready,\r\n// fullNode: window.tronWeb.fullNode?.host,\r\n// defaultAddress: window.tronWeb.defaultAddress\r\n// });\r\n// }\r\n \r\n// const wallets = detectWallets();\r\n// console.log('Detected wallets:', wallets);\r\n// };\r\n\r\n// // Connect to MetaMask wallet\r\n// const connectMetamaskWallet = async () => {\r\n// console.log('Connecting to MetaMask wallet...');\r\n \r\n// if (!window.ethereum || !window.ethereum.isMetaMask) {\r\n// console.error('MetaMask not found.');\r\n// throw new Error('MetaMask not detected. Please install MetaMask extension.');\r\n// }\r\n \r\n// try {\r\n// // Create Web3Provider (compatible with multiple ethers versions)\r\n// let provider;\r\n \r\n// // Try different patterns based on ethers version\r\n// try {\r\n// // For newer ethers versions\r\n// provider = new ethers.BrowserProvider(window.ethereum);\r\n// const accounts = await provider.send('eth_requestAccounts', []);\r\n \r\n// if (!accounts || accounts.length === 0) {\r\n// throw new Error('No accounts found');\r\n// }\r\n \r\n// const address = accounts[0];\r\n// const network = await provider.getNetwork();\r\n// const chainId = Number(network.chainId);\r\n \r\n// let networkType;\r\n// switch (chainId) {\r\n// case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n// case 56: networkType = NETWORK_TYPES.BSC; break;\r\n// default: networkType = `unknown-${chainId}`;\r\n// }\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.METAMASK,\r\n// address,\r\n// provider,\r\n// network: networkType,\r\n// isConnected: true,\r\n// chainId\r\n// };\r\n// } catch (err) {\r\n// // For older ethers versions (v5)\r\n// console.log('Trying fallback ethers provider pattern');\r\n \r\n// // This pattern works with ethers v5\r\n// if (window.ethereum.request) {\r\n// const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n \r\n// if (!accounts || accounts.length === 0) {\r\n// throw new Error('No accounts found');\r\n// }\r\n \r\n// const address = accounts[0];\r\n// const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n// const chainId = parseInt(chainIdHex, 16);\r\n \r\n// let networkType;\r\n// switch (chainId) {\r\n// case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n// case 56: networkType = NETWORK_TYPES.BSC; break;\r\n// default: networkType = `unknown-${chainId}`;\r\n// }\r\n \r\n// // Create a simple provider\r\n// const simpleProvider = {\r\n// getSigner: () => ({\r\n// getAddress: async () => address,\r\n// sendTransaction: async (tx) => {\r\n// const txHash = await window.ethereum.request({\r\n// method: 'eth_sendTransaction',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value.toString() : '0x0',\r\n// gasLimit: tx.gasLimit ? tx.gasLimit.toString() : undefined,\r\n// data: tx.data\r\n// }]\r\n// });\r\n// return { hash: txHash };\r\n// }\r\n// }),\r\n// estimateGas: async (tx) => {\r\n// const gasHex = await window.ethereum.request({\r\n// method: 'eth_estimateGas',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value : '0x0'\r\n// }]\r\n// });\r\n// // Create BigNumber manually for ethers v5 compatibility\r\n// return {\r\n// toString: () => parseInt(gasHex, 16).toString(),\r\n// mul: (n) => ({\r\n// div: (d) => ({\r\n// toString: () => Math.floor(parseInt(gasHex, 16) * n / d).toString()\r\n// })\r\n// })\r\n// };\r\n// }\r\n// };\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.METAMASK,\r\n// address,\r\n// provider: simpleProvider,\r\n// network: networkType,\r\n// isConnected: true,\r\n// chainId\r\n// };\r\n// } else {\r\n// throw new Error('Unsupported wallet interface');\r\n// }\r\n// }\r\n// } catch (error) {\r\n// console.error('Error connecting to MetaMask:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // Connect to Trust Wallet\r\n// const connectTrustWallet = async () => {\r\n// console.log('Connecting to Trust Wallet...');\r\n \r\n// if (!window.ethereum || !window.ethereum.isTrust) {\r\n// console.error('Trust Wallet not found.');\r\n// throw new Error('Trust Wallet not detected. Please install Trust Wallet.');\r\n// }\r\n \r\n// try {\r\n// // Use same approach as MetaMask but for Trust Wallet\r\n// if (window.ethereum.request) {\r\n// const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n \r\n// if (!accounts || accounts.length === 0) {\r\n// throw new Error('No accounts found');\r\n// }\r\n \r\n// const address = accounts[0];\r\n// const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n// const chainId = parseInt(chainIdHex, 16);\r\n \r\n// let networkType;\r\n// switch (chainId) {\r\n// case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n// case 56: networkType = NETWORK_TYPES.BSC; break;\r\n// default: networkType = `unknown-${chainId}`;\r\n// }\r\n \r\n// // Create a simple provider\r\n// const simpleProvider = {\r\n// getSigner: () => ({\r\n// getAddress: async () => address,\r\n// sendTransaction: async (tx) => {\r\n// const txHash = await window.ethereum.request({\r\n// method: 'eth_sendTransaction',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value.toString() : '0x0',\r\n// gasLimit: tx.gasLimit ? tx.gasLimit.toString() : undefined,\r\n// data: tx.data\r\n// }]\r\n// });\r\n// return { hash: txHash };\r\n// }\r\n// }),\r\n// estimateGas: async (tx) => {\r\n// const gasHex = await window.ethereum.request({\r\n// method: 'eth_estimateGas',\r\n// params: [{ \r\n// from: address,\r\n// to: tx.to,\r\n// value: tx.value ? tx.value : '0x0'\r\n// }]\r\n// });\r\n// // Create BigNumber manually for compatibility\r\n// return {\r\n// toString: () => parseInt(gasHex, 16).toString(),\r\n// mul: (n) => ({\r\n// div: (d) => ({\r\n// toString: () => Math.floor(parseInt(gasHex, 16) * n / d).toString()\r\n// })\r\n// })\r\n// };\r\n// }\r\n// };\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.TRUST_WALLET,\r\n// address,\r\n// provider: simpleProvider,\r\n// network: networkType,\r\n// isConnected: true,\r\n// chainId\r\n// };\r\n// } else {\r\n// throw new Error('Unsupported wallet interface');\r\n// }\r\n// } catch (error) {\r\n// console.error('Error connecting to Trust Wallet:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // Connect to TronLink wallet\r\n// const connectTronlinkWallet = async () => {\r\n// console.log('Connecting to TronLink wallet...');\r\n \r\n// if (!window.tronWeb) {\r\n// console.error('TronWeb not found. Is TronLink installed?');\r\n// throw new Error('TronLink not detected. Please install TronLink extension.');\r\n// }\r\n \r\n// // Wait for TronWeb to be ready\r\n// const waitForTronWeb = async (maxAttempts = 10, interval = 500) => {\r\n// for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n// if (window.tronWeb && window.tronWeb.ready) {\r\n// return window.tronWeb;\r\n// }\r\n// console.log(`Waiting for TronWeb to be ready... Attempt ${attempt + 1}/${maxAttempts}`);\r\n// await new Promise(resolve => setTimeout(resolve, interval));\r\n// }\r\n// throw new Error('TronWeb took too long to be ready');\r\n// };\r\n \r\n// try {\r\n// const tronWeb = await waitForTronWeb();\r\n \r\n// // Make sure we have permission\r\n// if (!tronWeb.defaultAddress || !tronWeb.defaultAddress.base58) {\r\n// // Request permission if needed\r\n// try {\r\n// await window.tronWeb.request({ method: 'tron_requestAccounts' });\r\n// } catch (permissionError) {\r\n// console.error('Failed to get permission from TronLink:', permissionError);\r\n// throw new Error('Please unlock TronLink and approve connection');\r\n// }\r\n// }\r\n \r\n// const address = tronWeb.defaultAddress.base58;\r\n// console.log('Connected to TronLink wallet:', address);\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.TRONLINK,\r\n// address: address,\r\n// provider: tronWeb,\r\n// network: NETWORK_TYPES.TRON,\r\n// isConnected: true\r\n// };\r\n// } catch (error) {\r\n// console.error('Error connecting to TronLink:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // Connect to Lute wallet (Algorand)\r\n// const connectLuteWallet = async () => {\r\n// console.log('Connecting to Lute wallet...');\r\n \r\n// if (!window.lute) {\r\n// console.error('Lute not found.');\r\n// throw new Error('Lute not detected. Please install Lute extension.');\r\n// }\r\n \r\n// try {\r\n// // Request connection to Lute\r\n// const { address } = await window.lute.connect();\r\n \r\n// if (!address) {\r\n// throw new Error('No address returned. Please unlock Lute wallet.');\r\n// }\r\n \r\n// console.log('Connected to Lute wallet:', address);\r\n \r\n// return {\r\n// walletType: WALLET_TYPES.LUTE,\r\n// address: address,\r\n// provider: window.lute,\r\n// network: NETWORK_TYPES.ALGORAND,\r\n// isConnected: true\r\n// };\r\n// } catch (error) {\r\n// console.error('Error connecting to Lute wallet:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // General wallet connection function\r\n// export const connectWallet = async (walletType) => {\r\n// console.log('Connecting to wallet:', walletType);\r\n \r\n// switch (walletType) {\r\n// case WALLET_TYPES.METAMASK:\r\n// return connectMetamaskWallet();\r\n// case WALLET_TYPES.TRONLINK:\r\n// return connectTronlinkWallet();\r\n// case WALLET_TYPES.TRUST_WALLET:\r\n// return connectTrustWallet();\r\n// case WALLET_TYPES.LUTE:\r\n// return connectLuteWallet();\r\n// default:\r\n// throw new Error(`Unsupported wallet type: ${walletType}`);\r\n// }\r\n// };\r\n\r\n// // Get supported wallets for a network\r\n// export const getSupportedWalletsForNetwork = (network) => {\r\n// return NETWORK_WALLET_MAP[network] || [];\r\n// };\r\n\r\n// // Send native currency transaction (ETH, BNB, TRX, ALGO)\r\n// export const sendNativeTransaction = async (walletConnection, toAddress, amount) => {\r\n// console.log('Sending native transaction:', { toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// if (!toAddress) {\r\n// throw new Error('Recipient address not provided');\r\n// }\r\n \r\n// // Validate amount\r\n// if (!amount || isNaN(parseFloat(amount)) || parseFloat(amount) <= 0) {\r\n// throw new Error('Invalid amount');\r\n// }\r\n \r\n// try {\r\n// let transaction;\r\n \r\n// switch (walletConnection.walletType) {\r\n// case WALLET_TYPES.METAMASK:\r\n// case WALLET_TYPES.TRUST_WALLET:\r\n// const provider = walletConnection.provider;\r\n// const signer = provider.getSigner();\r\n \r\n// // Convert amount to wei\r\n// const amountInEther = amount.toString();\r\n// let amountWei;\r\n \r\n// try {\r\n// // Try ethers v6 approach\r\n// amountWei = ethers.parseEther(amountInEther);\r\n// } catch (err) {\r\n// // Fallback to ethers v5 approach or simple manual conversion\r\n// try {\r\n// amountWei = ethers.utils.parseEther(amountInEther);\r\n// } catch (error) {\r\n// // Manual conversion as a last resort (18 decimals for ETH/BNB)\r\n// const value = parseFloat(amountInEther) * Math.pow(10, 18);\r\n// amountWei = {\r\n// toString: () => value.toLocaleString('fullwide', { useGrouping: false })\r\n// };\r\n// }\r\n// }\r\n \r\n// console.log('Sending ETH/BNB:', {\r\n// to: toAddress,\r\n// value: amountWei.toString()\r\n// });\r\n \r\n// // Estimate gas first\r\n// const gasEstimate = await provider.estimateGas({\r\n// to: toAddress,\r\n// value: amountWei\r\n// });\r\n \r\n// console.log('Gas estimate:', gasEstimate.toString());\r\n \r\n// // Add 10% buffer to gas estimate\r\n// const gasLimit = typeof gasEstimate.mul === 'function' \r\n// ? gasEstimate.mul(110).div(100) \r\n// : {\r\n// toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.1).toString()\r\n// };\r\n \r\n// console.log('Using gas limit:', gasLimit.toString());\r\n \r\n// // Send transaction\r\n// transaction = await signer.sendTransaction({\r\n// to: toAddress,\r\n// value: amountWei,\r\n// gasLimit: gasLimit\r\n// });\r\n// break;\r\n \r\n// case WALLET_TYPES.TRONLINK:\r\n// const tronWeb = walletConnection.provider;\r\n \r\n// if (!tronWeb || !tronWeb.ready) {\r\n// throw new Error('TronWeb not initialized');\r\n// }\r\n \r\n// // Convert amount to sun (TRX smallest unit)\r\n// const amountSun = tronWeb.toSun(amount.toString());\r\n \r\n// console.log('Sending TRX:', {\r\n// to: toAddress,\r\n// value: amountSun\r\n// });\r\n \r\n// // Send TRX transaction\r\n// transaction = await tronWeb.trx.sendTransaction(\r\n// toAddress,\r\n// amountSun\r\n// );\r\n// break;\r\n \r\n// case WALLET_TYPES.LUTE:\r\n// const lute = walletConnection.provider;\r\n \r\n// // Convert amount to microAlgos\r\n// const microAlgos = Math.floor(parseFloat(amount) * 1000000);\r\n \r\n// console.log('Sending Algos:', {\r\n// to: toAddress,\r\n// amount: microAlgos\r\n// });\r\n \r\n// // Send ALGO transaction\r\n// transaction = await lute.sendPayment({\r\n// recipient: toAddress,\r\n// amount: microAlgos\r\n// });\r\n// break;\r\n \r\n// default:\r\n// throw new Error(`Unsupported wallet type: ${walletConnection.walletType}`);\r\n// }\r\n \r\n// console.log('Transaction sent:', transaction);\r\n \r\n// // Return transaction hash\r\n// if (transaction) {\r\n// const hash = transaction.hash || transaction.txID || transaction.txId || transaction;\r\n// console.log('Transaction hash:', hash);\r\n// return hash;\r\n// } else {\r\n// throw new Error('No transaction hash returned');\r\n// }\r\n// } catch (error) {\r\n// console.error('Native transaction error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// // This is the missing function that CoinleyCheckout.jsx is importing\r\n// export const sendTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// if (!toAddress) {\r\n// throw new Error('Recipient address not provided');\r\n// }\r\n \r\n// // Check if this is a native currency or token transfer\r\n// if (tokenConfig && tokenConfig.isNative) {\r\n// return sendNativeTransaction(walletConnection, toAddress, amount);\r\n// } else {\r\n// return sendTokenTransaction(walletConnection, tokenConfig, toAddress, amount);\r\n// }\r\n// };\r\n\r\n// // Send token transaction (ERC20, BEP20)\r\n// export const sendTokenTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending token transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// if (!tokenConfig) {\r\n// throw new Error('Token configuration not provided');\r\n// }\r\n \r\n// if (!toAddress) {\r\n// throw new Error('Recipient address not provided');\r\n// }\r\n\r\n// // Validate amount\r\n// if (!amount || isNaN(parseFloat(amount)) || parseFloat(amount) <= 0) {\r\n// throw new Error('Invalid amount');\r\n// }\r\n\r\n// const { contractAddress, decimals, symbol } = tokenConfig;\r\n// console.log(`Token: ${symbol}, Decimals: ${decimals}, Contract: ${contractAddress}`);\r\n \r\n// // Handle different wallet types differently\r\n// switch (walletConnection.walletType) {\r\n// case WALLET_TYPES.TRONLINK:\r\n// return sendTRC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n// case WALLET_TYPES.LUTE:\r\n// return sendAlgorandAssetTransaction(walletConnection, tokenConfig, toAddress, amount);\r\n// default:\r\n// return sendERC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n// }\r\n// };\r\n\r\n// // ERC20/BEP20 token transaction function (MetaMask, Trust Wallet)\r\n// export const sendERC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending ERC20/BEP20 transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Wallet not connected');\r\n// }\r\n \r\n// const provider = walletConnection.provider;\r\n// const signer = provider.getSigner();\r\n \r\n// const { contractAddress, decimals, symbol } = tokenConfig;\r\n \r\n// // Convert amount to token units with proper decimals\r\n// const tokenAmount = parseFloat(amount);\r\n// const tokenDecimals = parseInt(decimals);\r\n \r\n// let tokenUnits;\r\n// try {\r\n// // Try ethers v6 approach\r\n// tokenUnits = ethers.parseUnits(tokenAmount.toString(), tokenDecimals);\r\n// } catch (err) {\r\n// // Fallback to ethers v5 approach\r\n// try {\r\n// tokenUnits = ethers.utils.parseUnits(tokenAmount.toString(), tokenDecimals);\r\n// } catch (error) {\r\n// // Manual conversion as a last resort\r\n// const value = tokenAmount * Math.pow(10, tokenDecimals);\r\n// tokenUnits = {\r\n// toString: () => value.toLocaleString('fullwide', { useGrouping: false })\r\n// };\r\n// }\r\n// }\r\n \r\n// console.log(`Sending ${tokenAmount} ${symbol} (${tokenUnits.toString()} base units) to ${toAddress}`);\r\n \r\n// try {\r\n// // Create contract instance\r\n// const tokenContract = new ethers.Contract(\r\n// contractAddress,\r\n// ['function transfer(address to, uint256 amount) returns (bool)'],\r\n// signer\r\n// );\r\n \r\n// // Estimate gas first\r\n// try {\r\n// const gasEstimate = await tokenContract.estimateGas.transfer(toAddress, tokenUnits);\r\n// console.log('Gas estimate:', gasEstimate.toString());\r\n \r\n// // Add 20% buffer to gas estimate for USDC which often needs more gas\r\n// const gasLimit = symbol === 'USDC' \r\n// ? (typeof gasEstimate.mul === 'function' \r\n// ? gasEstimate.mul(120).div(100) \r\n// : { toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.2).toString() })\r\n// : (typeof gasEstimate.mul === 'function' \r\n// ? gasEstimate.mul(110).div(100) \r\n// : { toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.1).toString() });\r\n \r\n// console.log('Using gas limit:', gasLimit.toString());\r\n \r\n// // Send with explicit gas limit\r\n// const transaction = await tokenContract.transfer(toAddress, tokenUnits, {\r\n// gasLimit: gasLimit\r\n// });\r\n \r\n// console.log('Transaction sent:', transaction);\r\n// return transaction.hash;\r\n// } catch (gasError) {\r\n// console.error('Gas estimation failed:', gasError);\r\n \r\n// // For USDC, try with a higher fixed gas limit\r\n// if (symbol === 'USDC') {\r\n// console.log('Trying USDC transaction with fixed gas limit');\r\n// const transaction = await tokenContract.transfer(toAddress, tokenUnits, {\r\n// gasLimit: 150000 // Higher fixed gas limit for USDC\r\n// });\r\n \r\n// console.log('Transaction sent with fixed gas limit:', transaction);\r\n// return transaction.hash;\r\n// }\r\n \r\n// throw new Error(`Transaction would likely fail: ${gasError.message}`);\r\n// }\r\n// } catch (error) {\r\n// console.error('ERC20 transaction error:', error);\r\n \r\n// // Improve error messages\r\n// if (error.message && error.message.includes('user rejected')) {\r\n// throw new Error('Transaction rejected by user');\r\n// } else if (error.message && error.message.includes('insufficient funds')) {\r\n// throw new Error('Insufficient funds for transaction');\r\n// } else {\r\n// throw error;\r\n// }\r\n// }\r\n// };\r\n\r\n// // TRC20 token transaction function (TronLink)\r\n// export const sendTRC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending TRC20 transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Tron wallet not connected');\r\n// }\r\n \r\n// const tronWeb = walletConnection.provider;\r\n// if (!tronWeb || !tronWeb.ready) {\r\n// throw new Error('TronWeb not initialized');\r\n// }\r\n \r\n// if (!tokenConfig || !tokenConfig.contractAddress) {\r\n// throw new Error('Invalid token configuration');\r\n// }\r\n \r\n// const { contractAddress, decimals, symbol } = tokenConfig;\r\n \r\n// // Convert amount to token units with proper decimals\r\n// const tokenAmount = parseFloat(amount);\r\n// const tokenDecimals = parseInt(decimals);\r\n \r\n// // Calculate token amount with correct decimal precision\r\n// const amountWithDecimals = tokenAmount * Math.pow(10, tokenDecimals);\r\n \r\n// // TronWeb requires specific formatting\r\n// const amountString = amountWithDecimals.toString();\r\n \r\n// console.log(`Sending ${tokenAmount} ${symbol} (${amountString} base units) to ${toAddress}`);\r\n \r\n// try {\r\n// // Get the contract instance\r\n// const contract = await tronWeb.contract().at(contractAddress);\r\n \r\n// // Verify contract is valid\r\n// if (!contract.transfer) {\r\n// throw new Error('Invalid TRC-20 contract');\r\n// }\r\n \r\n// // Execute the transfer\r\n// // Important: TronWeb does NOT use .toSun() for token transfers - that's only for TRX!\r\n// const transaction = await contract.transfer(\r\n// toAddress,\r\n// amountString // Use the raw amount string\r\n// ).send({\r\n// feeLimit: 100000000, // 100 TRX fee limit\r\n// callValue: 0,\r\n// shouldPollResponse: false // Set to false for better handling\r\n// });\r\n \r\n// console.log('TRC20 transaction sent:', transaction);\r\n// return transaction;\r\n// } catch (error) {\r\n// console.error('TRC20 transaction failed:', error);\r\n \r\n// // Improve error message for common TronLink issues\r\n// if (error.message && error.message.includes('User rejected')) {\r\n// throw new Error('Transaction rejected by user');\r\n// } else if (error.message && error.message.includes('bandwidth')) {\r\n// throw new Error('Insufficient energy or bandwidth. Make sure you have enough TRX for fees.');\r\n// } else if (error.message && error.message.includes('balance')) {\r\n// throw new Error('Insufficient token balance for transfer');\r\n// } else {\r\n// throw new Error(`Transaction failed: ${error.message || 'Unknown error'}`);\r\n// }\r\n// }\r\n// };\r\n\r\n// // Algorand asset transaction function (Lute)\r\n// export const sendAlgorandAssetTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n// console.log('Sending Algorand asset transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n// if (!walletConnection || !walletConnection.provider) {\r\n// throw new Error('Algorand wallet not connected');\r\n// }\r\n \r\n// const lute = walletConnection.provider;\r\n \r\n// if (!tokenConfig || !tokenConfig.assetId) {\r\n// throw new Error('Invalid token configuration - missing assetId');\r\n// }\r\n \r\n// const { assetId, decimals, symbol } = tokenConfig;\r\n \r\n// // Convert amount to token units with proper decimals\r\n// const tokenAmount = parseFloat(amount);\r\n// const tokenDecimals = parseInt(decimals);\r\n \r\n// // Calculate token amount with correct decimal precision\r\n// const assetAmount = Math.floor(tokenAmount * Math.pow(10, tokenDecimals));\r\n \r\n// console.log(`Sending ${tokenAmount} ${symbol} (${assetAmount} base units) to ${toAddress}`);\r\n \r\n// try {\r\n// // Send asset transaction\r\n// const transaction = await lute.sendAssetTransfer({\r\n// recipient: toAddress,\r\n// assetId: assetId,\r\n// amount: assetAmount\r\n// });\r\n \r\n// console.log('Algorand asset transaction sent:', transaction);\r\n// return transaction.txId;\r\n// } catch (error) {\r\n// console.error('Algorand asset transaction error:', error);\r\n \r\n// if (error.message && error.message.includes('rejected')) {\r\n// throw new Error('Transaction rejected by user');\r\n// } else if (error.message && error.message.includes('balance')) {\r\n// throw new Error('Insufficient asset balance');\r\n// } else {\r\n// throw error;\r\n// }\r\n// }\r\n// };\r\n\r\n// // Get token configuration for a specific currency and network\r\n// export const getTokenConfig = (currency, network) => {\r\n// if (!currency || !network) {\r\n// return null;\r\n// }\r\n \r\n// const tokenConfig = TOKEN_CONFIG[currency.toUpperCase()];\r\n// if (!tokenConfig) {\r\n// return null;\r\n// }\r\n \r\n// return tokenConfig[network.toLowerCase()];\r\n// };\r\n\r\n// // Fix for Tron wallet connection verification\r\n// export const verifyTronWalletConnection = async () => {\r\n// if (!window.tronWeb || !window.tronWeb.ready) {\r\n// return false;\r\n// }\r\n \r\n// try {\r\n// // Simple method to verify connection\r\n// const account = await window.tronWeb.trx.getAccount();\r\n// return Boolean(account && account.address);\r\n// } catch (error) {\r\n// console.error('Error verifying TronLink connection:', error);\r\n// return false;\r\n// }\r\n// };\r\n\r\n// // Helper function to generate mock transaction hash for testing\r\n// export const generateMockTransactionHash = (network) => {\r\n// const chars = 'abcdef0123456789';\r\n// let hash = '';\r\n \r\n// // Different hash formats based on network\r\n// let length = 64; // Default length (Ethereum, BSC)\r\n \r\n// if (network === NETWORK_TYPES.TRON) {\r\n// length = 64;\r\n// } else if (network === NETWORK_TYPES.ALGORAND) {\r\n// length = 52;\r\n// }\r\n \r\n// for (let i = 0; i < length; i++) {\r\n// hash += chars.charAt(Math.floor(Math.random() * chars.length));\r\n// }\r\n \r\n// return hash;\r\n// };\r\n\r\n// // Export everything as a default object as well\r\n// export default {\r\n// WALLET_TYPES,\r\n// NETWORK_TYPES,\r\n// NETWORK_CONFIG, // Add this to the default export\r\n// TOKEN_CONFIG,\r\n// NETWORK_WALLET_MAP,\r\n// getWalletInstallUrl,\r\n// detectWallets,\r\n// detectWalletsWithRetry,\r\n// debugWalletEnvironment,\r\n// connectWallet,\r\n// getSupportedWalletsForNetwork,\r\n// sendNativeTransaction,\r\n// sendTokenTransaction,\r\n// sendTransaction,\r\n// sendTRC20Transaction,\r\n// sendERC20Transaction,\r\n// sendAlgorandAssetTransaction,\r\n// getTokenConfig,\r\n// verifyTronWalletConnection,\r\n// generateMockTransactionHash\r\n// };\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// src/services/walletService.js - FIXED VERSION FOR ETHERS V6\r\nimport { ethers } from 'ethers';\r\n\r\n// Wallet Types\r\nexport const WALLET_TYPES = {\r\n METAMASK: 'metamask',\r\n TRONLINK: 'tronlink',\r\n TRUST_WALLET: 'trustwallet',\r\n LUTE: 'lute'\r\n};\r\n\r\n// Network Types\r\nexport const NETWORK_TYPES = {\r\n ETHEREUM: 'ethereum',\r\n BSC: 'bsc',\r\n TRON: 'tron',\r\n ALGORAND: 'algorand'\r\n};\r\n\r\n// Network configuration\r\nexport const NETWORK_CONFIG = {\r\n [NETWORK_TYPES.ETHEREUM]: {\r\n name: 'Ethereum Mainnet',\r\n chainId: 1,\r\n symbol: 'ETH',\r\n decimals: 18,\r\n rpcUrl: 'https://mainnet.infura.io/v3/your-infura-key',\r\n blockExplorerUrl: 'https://etherscan.io'\r\n },\r\n [NETWORK_TYPES.BSC]: {\r\n name: 'Binance Smart Chain',\r\n chainId: 56,\r\n symbol: 'BNB',\r\n decimals: 18,\r\n rpcUrl: 'https://bsc-dataseed.binance.org/',\r\n blockExplorerUrl: 'https://bscscan.com'\r\n },\r\n [NETWORK_TYPES.TRON]: {\r\n name: 'TRON Mainnet',\r\n symbol: 'TRX',\r\n decimals: 6,\r\n rpcUrl: 'https://api.trongrid.io',\r\n blockExplorerUrl: 'https://tronscan.org'\r\n },\r\n [NETWORK_TYPES.ALGORAND]: {\r\n name: 'Algorand Mainnet',\r\n symbol: 'ALGO',\r\n decimals: 6,\r\n rpcUrl: 'https://mainnet-api.algonode.cloud',\r\n blockExplorerUrl: 'https://algoexplorer.io'\r\n }\r\n};\r\n\r\n// Token configurations with correct contract addresses and decimals\r\nexport const TOKEN_CONFIG = {\r\n USDT: {\r\n ethereum: {\r\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n decimals: 6,\r\n symbol: 'USDT'\r\n },\r\n bsc: {\r\n contractAddress: '0x55d398326f99059fF775485246999027B3197955',\r\n decimals: 18,\r\n symbol: 'USDT'\r\n },\r\n tron: {\r\n contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\r\n decimals: 6,\r\n symbol: 'USDT'\r\n },\r\n algorand: {\r\n assetId: 312769,\r\n decimals: 6,\r\n symbol: 'USDT'\r\n }\r\n },\r\n USDC: {\r\n ethereum: {\r\n contractAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\r\n decimals: 6,\r\n symbol: 'USDC'\r\n },\r\n bsc: {\r\n contractAddress: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',\r\n decimals: 18,\r\n symbol: 'USDC'\r\n },\r\n tron: {\r\n contractAddress: 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8',\r\n decimals: 6,\r\n symbol: 'USDC'\r\n },\r\n algorand: {\r\n assetId: 31566704,\r\n decimals: 6,\r\n symbol: 'USDC'\r\n }\r\n },\r\n BNB: {\r\n bsc: {\r\n decimals: 18,\r\n symbol: 'BNB',\r\n isNative: true\r\n }\r\n },\r\n ETH: {\r\n ethereum: {\r\n decimals: 18,\r\n symbol: 'ETH',\r\n isNative: true\r\n }\r\n },\r\n TRX: {\r\n tron: {\r\n decimals: 6,\r\n symbol: 'TRX',\r\n isNative: true\r\n }\r\n },\r\n ALGO: {\r\n algorand: {\r\n decimals: 6,\r\n symbol: 'ALGO',\r\n isNative: true\r\n }\r\n }\r\n};\r\n\r\n// Network to wallet mapping\r\nexport const NETWORK_WALLET_MAP = {\r\n [NETWORK_TYPES.ETHEREUM]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n [NETWORK_TYPES.BSC]: [WALLET_TYPES.METAMASK, WALLET_TYPES.TRUST_WALLET],\r\n [NETWORK_TYPES.TRON]: [WALLET_TYPES.TRONLINK],\r\n [NETWORK_TYPES.ALGORAND]: [WALLET_TYPES.LUTE]\r\n};\r\n\r\n// Installation URLs for wallets\r\nexport const getWalletInstallUrl = (walletType) => {\r\n const urls = {\r\n [WALLET_TYPES.METAMASK]: 'https://metamask.io/download/',\r\n [WALLET_TYPES.TRONLINK]: 'https://www.tronlink.org/download/',\r\n [WALLET_TYPES.TRUST_WALLET]: 'https://trustwallet.com/download/',\r\n [WALLET_TYPES.LUTE]: 'https://lute.app/download/'\r\n };\r\n return urls[walletType] || '';\r\n};\r\n\r\n// Detect available wallets in the browser\r\nexport const detectWallets = () => {\r\n const availableWallets = {\r\n [WALLET_TYPES.METAMASK]: typeof window !== 'undefined' && window.ethereum !== undefined,\r\n [WALLET_TYPES.TRONLINK]: typeof window !== 'undefined' && window.tronWeb !== undefined,\r\n [WALLET_TYPES.TRUST_WALLET]: typeof window !== 'undefined' && \r\n window.ethereum !== undefined && \r\n window.ethereum.isTrust === true,\r\n [WALLET_TYPES.LUTE]: typeof window !== 'undefined' && window.lute !== undefined\r\n };\r\n return availableWallets;\r\n};\r\n\r\n// Detect wallets with retry\r\nexport const detectWalletsWithRetry = async (maxRetries = 3, delay = 500) => {\r\n let retries = 0;\r\n let wallets = detectWallets();\r\n \r\n const hasAnyWallet = Object.values(wallets).some(v => v === true);\r\n \r\n while (!hasAnyWallet && retries < maxRetries) {\r\n console.log(`No wallets detected, retrying (${retries + 1}/${maxRetries})...`);\r\n await new Promise(resolve => setTimeout(resolve, delay));\r\n wallets = detectWallets();\r\n retries++;\r\n }\r\n \r\n return wallets;\r\n};\r\n\r\n// Debug wallet environment\r\nexport const debugWalletEnvironment = () => {\r\n console.log('=== WALLET ENVIRONMENT DEBUG ===');\r\n console.log('ethereum:', typeof window !== 'undefined' ? Boolean(window.ethereum) : 'Not in browser');\r\n console.log('tronWeb:', typeof window !== 'undefined' ? Boolean(window.tronWeb) : 'Not in browser');\r\n console.log('lute:', typeof window !== 'undefined' ? Boolean(window.lute) : 'Not in browser');\r\n \r\n if (typeof window !== 'undefined' && window.ethereum) {\r\n console.log('ethereum details:', {\r\n isTrust: window.ethereum.isTrust,\r\n isMetaMask: window.ethereum.isMetaMask,\r\n chainId: window.ethereum.chainId\r\n });\r\n }\r\n \r\n if (typeof window !== 'undefined' && window.tronWeb) {\r\n console.log('tronWeb details:', {\r\n ready: window.tronWeb.ready,\r\n fullNode: window.tronWeb.fullNode?.host,\r\n defaultAddress: window.tronWeb.defaultAddress\r\n });\r\n }\r\n \r\n const wallets = detectWallets();\r\n console.log('Detected wallets:', wallets);\r\n};\r\n\r\n// Helper function to create ethers-compatible value\r\nconst createEthersValue = (amount, decimals) => {\r\n try {\r\n // Try parseUnits (ethers v6)\r\n return ethers.parseUnits(amount.toString(), decimals);\r\n } catch (error) {\r\n // Fallback for manual conversion\r\n const value = parseFloat(amount) * Math.pow(10, decimals);\r\n return {\r\n toString: () => value.toLocaleString('fullwide', { useGrouping: false }),\r\n toBigInt: () => BigInt(Math.floor(value))\r\n };\r\n }\r\n};\r\n\r\n// Connect to MetaMask wallet\r\nconst connectMetamaskWallet = async () => {\r\n console.log('Connecting to MetaMask wallet...');\r\n \r\n if (!window.ethereum || !window.ethereum.isMetaMask) {\r\n console.error('MetaMask not found.');\r\n throw new Error('MetaMask not detected. Please install MetaMask extension.');\r\n }\r\n \r\n try {\r\n // Use the direct window.ethereum.request method for compatibility\r\n const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n \r\n if (!accounts || accounts.length === 0) {\r\n throw new Error('No accounts found');\r\n }\r\n \r\n const address = accounts[0];\r\n const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n const chainId = parseInt(chainIdHex, 16);\r\n \r\n let networkType;\r\n switch (chainId) {\r\n case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n case 56: networkType = NETWORK_TYPES.BSC; break;\r\n default: networkType = `unknown-${chainId}`;\r\n }\r\n \r\n // Create a simple provider wrapper\r\n const simpleProvider = {\r\n getSigner: () => ({\r\n getAddress: async () => address,\r\n sendTransaction: async (tx) => {\r\n const txHash = await window.ethereum.request({\r\n method: 'eth_sendTransaction',\r\n params: [{ \r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? tx.value.toString() : '0x0',\r\n gasLimit: tx.gasLimit ? tx.gasLimit.toString() : undefined,\r\n data: tx.data\r\n }]\r\n });\r\n return { hash: txHash };\r\n }\r\n }),\r\n estimateGas: async (tx) => {\r\n const gasHex = await window.ethereum.request({\r\n method: 'eth_estimateGas',\r\n params: [{ \r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? tx.value.toString() : '0x0'\r\n }]\r\n });\r\n const gasValue = parseInt(gasHex, 16);\r\n return {\r\n toString: () => gasValue.toString(),\r\n mul: (n) => ({\r\n div: (d) => ({\r\n toString: () => Math.floor(gasValue * n / d).toString()\r\n })\r\n })\r\n };\r\n }\r\n };\r\n \r\n return {\r\n walletType: WALLET_TYPES.METAMASK,\r\n address,\r\n provider: simpleProvider,\r\n network: networkType,\r\n isConnected: true,\r\n chainId\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to MetaMask:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Connect to Trust Wallet\r\nconst connectTrustWallet = async () => {\r\n console.log('Connecting to Trust Wallet...');\r\n \r\n if (!window.ethereum || !window.ethereum.isTrust) {\r\n console.error('Trust Wallet not found.');\r\n throw new Error('Trust Wallet not detected. Please install Trust Wallet.');\r\n }\r\n \r\n try {\r\n const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });\r\n \r\n if (!accounts || accounts.length === 0) {\r\n throw new Error('No accounts found');\r\n }\r\n \r\n const address = accounts[0];\r\n const chainIdHex = await window.ethereum.request({ method: 'eth_chainId' });\r\n const chainId = parseInt(chainIdHex, 16);\r\n \r\n let networkType;\r\n switch (chainId) {\r\n case 1: networkType = NETWORK_TYPES.ETHEREUM; break;\r\n case 56: networkType = NETWORK_TYPES.BSC; break;\r\n default: networkType = `unknown-${chainId}`;\r\n }\r\n \r\n const simpleProvider = {\r\n getSigner: () => ({\r\n getAddress: async () => address,\r\n sendTransaction: async (tx) => {\r\n const txHash = await window.ethereum.request({\r\n method: 'eth_sendTransaction',\r\n params: [{ \r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? tx.value.toString() : '0x0',\r\n gasLimit: tx.gasLimit ? tx.gasLimit.toString() : undefined,\r\n data: tx.data\r\n }]\r\n });\r\n return { hash: txHash };\r\n }\r\n }),\r\n estimateGas: async (tx) => {\r\n const gasHex = await window.ethereum.request({\r\n method: 'eth_estimateGas',\r\n params: [{ \r\n from: address,\r\n to: tx.to,\r\n value: tx.value ? tx.value.toString() : '0x0'\r\n }]\r\n });\r\n const gasValue = parseInt(gasHex, 16);\r\n return {\r\n toString: () => gasValue.toString(),\r\n mul: (n) => ({\r\n div: (d) => ({\r\n toString: () => Math.floor(gasValue * n / d).toString()\r\n })\r\n })\r\n };\r\n }\r\n };\r\n \r\n return {\r\n walletType: WALLET_TYPES.TRUST_WALLET,\r\n address,\r\n provider: simpleProvider,\r\n network: networkType,\r\n isConnected: true,\r\n chainId\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to Trust Wallet:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Connect to TronLink wallet\r\nconst connectTronlinkWallet = async () => {\r\n console.log('Connecting to TronLink wallet...');\r\n \r\n if (!window.tronWeb) {\r\n console.error('TronWeb not found. Is TronLink installed?');\r\n throw new Error('TronLink not detected. Please install TronLink extension.');\r\n }\r\n \r\n const waitForTronWeb = async (maxAttempts = 10, interval = 500) => {\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n if (window.tronWeb && window.tronWeb.ready) {\r\n return window.tronWeb;\r\n }\r\n console.log(`Waiting for TronWeb to be ready... Attempt ${attempt + 1}/${maxAttempts}`);\r\n await new Promise(resolve => setTimeout(resolve, interval));\r\n }\r\n throw new Error('TronWeb took too long to be ready');\r\n };\r\n \r\n try {\r\n const tronWeb = await waitForTronWeb();\r\n \r\n if (!tronWeb.defaultAddress || !tronWeb.defaultAddress.base58) {\r\n try {\r\n await window.tronWeb.request({ method: 'tron_requestAccounts' });\r\n } catch (permissionError) {\r\n console.error('Failed to get permission from TronLink:', permissionError);\r\n throw new Error('Please unlock TronLink and approve connection');\r\n }\r\n }\r\n \r\n const address = tronWeb.defaultAddress.base58;\r\n console.log('Connected to TronLink wallet:', address);\r\n \r\n return {\r\n walletType: WALLET_TYPES.TRONLINK,\r\n address: address,\r\n provider: tronWeb,\r\n network: NETWORK_TYPES.TRON,\r\n isConnected: true\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to TronLink:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Connect to Lute wallet (Algorand)\r\nconst connectLuteWallet = async () => {\r\n console.log('Connecting to Lute wallet...');\r\n \r\n if (!window.lute) {\r\n console.error('Lute not found.');\r\n throw new Error('Lute not detected. Please install Lute extension.');\r\n }\r\n \r\n try {\r\n const { address } = await window.lute.connect();\r\n \r\n if (!address) {\r\n throw new Error('No address returned. Please unlock Lute wallet.');\r\n }\r\n \r\n console.log('Connected to Lute wallet:', address);\r\n \r\n return {\r\n walletType: WALLET_TYPES.LUTE,\r\n address: address,\r\n provider: window.lute,\r\n network: NETWORK_TYPES.ALGORAND,\r\n isConnected: true\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to Lute wallet:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// General wallet connection function\r\nexport const connectWallet = async (walletType) => {\r\n console.log('Connecting to wallet:', walletType);\r\n \r\n switch (walletType) {\r\n case WALLET_TYPES.METAMASK:\r\n return connectMetamaskWallet();\r\n case WALLET_TYPES.TRONLINK:\r\n return connectTronlinkWallet();\r\n case WALLET_TYPES.TRUST_WALLET:\r\n return connectTrustWallet();\r\n case WALLET_TYPES.LUTE:\r\n return connectLuteWallet();\r\n default:\r\n throw new Error(`Unsupported wallet type: ${walletType}`);\r\n }\r\n};\r\n\r\n// Get supported wallets for a network\r\nexport const getSupportedWalletsForNetwork = (network) => {\r\n return NETWORK_WALLET_MAP[network] || [];\r\n};\r\n\r\n// Send native currency transaction\r\nexport const sendNativeTransaction = async (walletConnection, toAddress, amount) => {\r\n console.log('Sending native transaction:', { toAddress, amount });\r\n \r\n if (!walletConnection || !walletConnection.provider) {\r\n throw new Error('Wallet not connected');\r\n }\r\n \r\n if (!toAddress) {\r\n throw new Error('Recipient address not provided');\r\n }\r\n \r\n if (!amount || isNaN(parseFloat(amount)) || parseFloat(amount) <= 0) {\r\n throw new Error('Invalid amount');\r\n }\r\n \r\n try {\r\n let transaction;\r\n \r\n switch (walletConnection.walletType) {\r\n case WALLET_TYPES.METAMASK:\r\n case WALLET_TYPES.TRUST_WALLET:\r\n const provider = walletConnection.provider;\r\n const signer = provider.getSigner();\r\n \r\n const amountInEther = amount.toString();\r\n const amountWei = createEthersValue(amountInEther, 18);\r\n \r\n console.log('Sending ETH/BNB:', {\r\n to: toAddress,\r\n value: amountWei.toString()\r\n });\r\n \r\n const gasEstimate = await provider.estimateGas({\r\n to: toAddress,\r\n value: amountWei\r\n });\r\n \r\n console.log('Gas estimate:', gasEstimate.toString());\r\n \r\n const gasLimit = {\r\n toString: () => Math.floor(parseInt(gasEstimate.toString()) * 1.1).toString()\r\n };\r\n \r\n console.log('Using gas limit:', gasLimit.toString());\r\n \r\n transaction = await signer.sendTransaction({\r\n to: toAddress,\r\n value: amountWei,\r\n gasLimit: gasLimit\r\n });\r\n break;\r\n \r\n case WALLET_TYPES.TRONLINK:\r\n const tronWeb = walletConnection.provider;\r\n \r\n if (!tronWeb || !tronWeb.ready) {\r\n throw new Error('TronWeb not initialized');\r\n }\r\n \r\n const amountSun = tronWeb.toSun(amount.toString());\r\n \r\n console.log('Sending TRX:', {\r\n to: toAddress,\r\n value: amountSun\r\n });\r\n \r\n transaction = await tronWeb.trx.sendTransaction(\r\n toAddress,\r\n amountSun\r\n );\r\n break;\r\n \r\n case WALLET_TYPES.LUTE:\r\n const lute = walletConnection.provider;\r\n \r\n const microAlgos = Math.floor(parseFloat(amount) * 1000000);\r\n \r\n console.log('Sending Algos:', {\r\n to: toAddress,\r\n amount: microAlgos\r\n });\r\n \r\n transaction = await lute.sendPayment({\r\n recipient: toAddress,\r\n amount: microAlgos\r\n });\r\n break;\r\n \r\n default:\r\n throw new Error(`Unsupported wallet type: ${walletConnection.walletType}`);\r\n }\r\n \r\n console.log('Transaction sent:', transaction);\r\n \r\n const hash = transaction.hash || transaction.txID || transaction.txId || transaction;\r\n console.log('Transaction hash:', hash);\r\n return hash;\r\n } catch (error) {\r\n console.error('Native transaction error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n// Send transaction - main function\r\nexport const sendTransaction = async (walletConnection, transactionDetails) => {\r\n console.log('Sending transaction with:', transactionDetails);\r\n \r\n if (!walletConnection) {\r\n throw new Error('Wallet not connected');\r\n }\r\n \r\n const { to, amount, tokenAddress, currency, network } = transactionDetails;\r\n \r\n if (!to) {\r\n throw new Error('Recipient address not provided');\r\n }\r\n \r\n // Check if this is a native currency or token transfer\r\n const tokenConfig = TOKEN_CONFIG[currency]?.[network];\r\n \r\n if (tokenConfig && tokenConfig.isNative) {\r\n return sendNativeTransaction(walletConnection, to, amount);\r\n } else if (tokenConfig) {\r\n return sendTokenTransaction(walletConnection, tokenConfig, to, amount);\r\n } else {\r\n // Fallback to native transaction\r\n return sendNativeTransaction(walletConnection, to, amount);\r\n }\r\n};\r\n\r\n// Send token transaction\r\nexport const sendTokenTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending token transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n if (!walletConnection || !walletConnection.provider) {\r\n throw new Error('Wallet not connected');\r\n }\r\n \r\n if (!tokenConfig) {\r\n throw new Error('Token configuration not provided');\r\n }\r\n \r\n if (!toAddress) {\r\n throw new Error('Recipient address not provided');\r\n }\r\n\r\n if (!amount || isNaN(parseFloat(amount)) || parseFloat(amount) <= 0) {\r\n throw new Error('Invalid amount');\r\n }\r\n\r\n const { contractAddress, decimals, symbol } = tokenConfig;\r\n console.log(`Token: ${symbol}, Decimals: ${decimals}, Contract: ${contractAddress}`);\r\n \r\n switch (walletConnection.walletType) {\r\n case WALLET_TYPES.TRONLINK:\r\n return sendTRC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n case WALLET_TYPES.LUTE:\r\n return sendAlgorandAssetTransaction(walletConnection, tokenConfig, toAddress, amount);\r\n default:\r\n return sendERC20Transaction(walletConnection, tokenConfig, toAddress, amount);\r\n }\r\n};\r\n\r\n// ERC20/BEP20 token transaction function\r\nexport const sendERC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending ERC20/BEP20 transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n if (!walletConnection || !walletConnection.provider) {\r\n throw new Error('Wallet not connected');\r\n }\r\n \r\n const provider = walletConnection.provider;\r\n const signer = provider.getSigner();\r\n \r\n const { contractAddress, decimals, symbol } = tokenConfig;\r\n \r\n const tokenAmount = parseFloat(amount);\r\n const tokenDecimals = parseInt(decimals);\r\n \r\n const tokenUnits = createEthersValue(tokenAmount.toString(), tokenDecimals);\r\n \r\n console.log(`Sending ${tokenAmount} ${symbol} (${tokenUnits.toString()} base units) to ${toAddress}`);\r\n \r\n try {\r\n // Create contract instance\r\n const tokenContract = new ethers.Contract(\r\n contractAddress,\r\n ['function transfer(address to, uint256 amount) returns (bool)'],\r\n signer\r\n );\r\n \r\n try {\r\n const gasEstimate = await tokenContract.transfer.estimateGas(toAddress, tokenUnits);\r\n console.log('Gas estimate:', gasEstimate.toString());\r\n \r\n const gasLimit = symbol === 'USDC' \r\n ? Math.floor(parseInt(gasEstimate.toString()) * 1.2).toString()\r\n : Math.floor(parseInt(gasEstimate.toString()) * 1.1).toString();\r\n \r\n console.log('Using gas limit:', gasLimit);\r\n \r\n const transaction = await tokenContract.transfer(toAddress, tokenUnits, {\r\n gasLimit: gasLimit\r\n });\r\n \r\n console.log('Transaction sent:', transaction);\r\n return transaction.hash;\r\n } catch (gasError) {\r\n console.error('Gas estimation failed:', gasError);\r\n \r\n if (symbol === 'USDC') {\r\n console.log('Trying USDC transaction with fixed gas limit');\r\n const transaction = await tokenContract.transfer(toAddress, tokenUnits, {\r\n gasLimit: 150000\r\n });\r\n \r\n console.log('Transaction sent with fixed gas limit:', transaction);\r\n return transaction.hash;\r\n }\r\n \r\n throw new Error(`Transaction would likely fail: ${gasError.message}`);\r\n }\r\n } catch (error) {\r\n console.error('ERC20 transaction error:', error);\r\n \r\n if (error.message && error.message.includes('user rejected')) {\r\n throw new Error('Transaction rejected by user');\r\n } else if (error.message && error.message.includes('insufficient funds')) {\r\n throw new Error('Insufficient funds for transaction');\r\n } else {\r\n throw error;\r\n }\r\n }\r\n};\r\n\r\n// TRC20 token transaction function\r\nexport const sendTRC20Transaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending TRC20 transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n if (!walletConnection || !walletConnection.provider) {\r\n throw new Error('Tron wallet not connected');\r\n }\r\n \r\n const tronWeb = walletConnection.provider;\r\n if (!tronWeb || !tronWeb.ready) {\r\n throw new Error('TronWeb not initialized');\r\n }\r\n \r\n if (!tokenConfig || !tokenConfig.contractAddress) {\r\n throw new Error('Invalid token configuration');\r\n }\r\n \r\n const { contractAddress, decimals, symbol } = tokenConfig;\r\n \r\n const tokenAmount = parseFloat(amount);\r\n const tokenDecimals = parseInt(decimals);\r\n \r\n const amountWithDecimals = tokenAmount * Math.pow(10, tokenDecimals);\r\n const amountString = amountWithDecimals.toString();\r\n \r\n console.log(`Sending ${tokenAmount} ${symbol} (${amountString} base units) to ${toAddress}`);\r\n \r\n try {\r\n const contract = await tronWeb.contract().at(contractAddress);\r\n \r\n if (!contract.transfer) {\r\n throw new Error('Invalid TRC-20 contract');\r\n }\r\n \r\n const transaction = await contract.transfer(\r\n toAddress,\r\n amountString\r\n ).send({\r\n feeLimit: 100000000,\r\n callValue: 0,\r\n shouldPollResponse: false\r\n });\r\n \r\n console.log('TRC20 transaction sent:', transaction);\r\n return transaction;\r\n } catch (error) {\r\n console.error('TRC20 transaction failed:', error);\r\n \r\n if (error.message && error.message.includes('User rejected')) {\r\n throw new Error('Transaction rejected by user');\r\n } else if (error.message && error.message.includes('bandwidth')) {\r\n throw new Error('Insufficient energy or bandwidth. Make sure you have enough TRX for fees.');\r\n } else if (error.message && error.message.includes('balance')) {\r\n throw new Error('Insufficient token balance for transfer');\r\n } else {\r\n throw new Error(`Transaction failed: ${error.message || 'Unknown error'}`);\r\n }\r\n }\r\n};\r\n\r\n// Algorand asset transaction function\r\nexport const sendAlgorandAssetTransaction = async (walletConnection, tokenConfig, toAddress, amount) => {\r\n console.log('Sending Algorand asset transaction with:', { tokenConfig, toAddress, amount });\r\n \r\n if (!walletConnection || !walletConnection.provider) {\r\n throw new Error('Algorand wallet not connected');\r\n }\r\n \r\n const lute = walletConnection.provider;\r\n \r\n if (!tokenConfig || !tokenConfig.assetId) {\r\n throw new Error('Invalid token configuration - missing assetId');\r\n }\r\n \r\n const { assetId, decimals, symbol } = tokenConfig;\r\n \r\n const tokenAmount = parseFloat(amount);\r\n const tokenDecimals = parseInt(decimals);\r\n \r\n const assetAmount = Math.floor(tokenAmount * Math.pow(10, tokenDecimals));\r\n \r\n console.log(`Sending ${tokenAmount} ${symbol} (${assetAmount} base units) to ${toAddress}`);\r\n \r\n try {\r\n const transaction = await lute.sendAssetTransfer({\r\n recipient: toAddress,\r\n assetId: assetId,\r\n amount: assetAmount\r\n });\r\n \r\n console.log('Algorand asset transaction sent:', transaction);\r\n return transaction.txId;\r\n } catch (error) {\r\n console.error('Algorand asset transaction error:', error);\r\n \r\n if (error.message && error.message.includes('rejected')) {\r\n throw new Error('Transaction rejected by user');\r\n } else if (error.message && error.message.includes('balance')) {\r\n throw new Error('Insufficient asset balance');\r\n } else {\r\n throw error;\r\n }\r\n }\r\n};\r\n\r\n// Get token configuration for a specific currency and network\r\nexport const getTokenConfig = (currency, network) => {\r\n if (!currency || !network) {\r\n return null;\r\n }\r\n \r\n const tokenConfig = TOKEN_CONFIG[currency.toUpperCase()];\r\n if (!tokenConfig) {\r\n return null;\r\n }\r\n \r\n return tokenConfig[network.toLowerCase()];\r\n};\r\n\r\n// Export everything as a default object as well\r\nexport default {\r\n WALLET_TYPES,\r\n NETWORK_TYPES,\r\n NETWORK_CONFIG,\r\n TOKEN_CONFIG,\r\n NETWORK_WALLET_MAP,\r\n getWalletInstallUrl,\r\n detectWallets,\r\n detectWalletsWithRetry,\r\n debugWalletEnvironment,\r\n connectWallet,\r\n getSupportedWalletsForNetwork,\r\n sendNativeTransaction,\r\n sendTokenTransaction,\r\n sendTransaction,\r\n sendTRC20Transaction,\r\n sendERC20Transaction,\r\n sendAlgorandAssetTransaction,\r\n getTokenConfig\r\n};","// // src/services/api.js\r\n// let apiConfig = {\r\n// apiKey: null,\r\n// apiSecret: null,\r\n// apiUrl: 'https://coinleyserver-production.up.railway.app',\r\n// merchantWalletAddresses: {} // Object for multi-network support\r\n// };\r\n\r\n// /**\r\n// * Initialize the API with configuration\r\n// * @param {Object} config - API configuration\r\n// */\r\n// export const initializeApi = (config) => {\r\n// apiConfig = { ...apiConfig, ...config };\r\n// console.log('API initialized with:', {\r\n// apiUrl: apiConfig.apiUrl,\r\n// apiKey: apiConfig.apiKey ? `${apiConfig.apiKey.substring(0, 6)}...` : null,\r\n// hasWalletAddresses: Object.keys(apiConfig.merchantWalletAddresses || {}).length > 0\r\n// });\r\n// };\r\n\r\n// /**\r\n// * Generate headers with authentication\r\n// * @returns {Object} - Headers object with authentication\r\n// */\r\n// const getHeaders = () => {\r\n// return {\r\n// 'Content-Type': 'application/json',\r\n// 'x-api-key': apiConfig.apiKey,\r\n// 'x-api-secret': apiConfig.apiSecret\r\n// };\r\n// };\r\n\r\n// /**\r\n// * Create a new payment\r\n// * @param {Object} paymentData - Payment data\r\n// * @returns {Promise} - Promise resolving to payment details\r\n// */\r\n// export const createPayment = async (paymentData) => {\r\n// try {\r\n// console.log('Creating payment with data:', paymentData);\r\n// console.log('API URL:', `${apiConfig.apiUrl}/api/payments/create`);\r\n \r\n// if (!paymentData.amount) {\r\n// throw new Error('Payment amount is required');\r\n// }\r\n \r\n// // Enhance payment data with merchant wallet addresses\r\n// const enhancedPaymentData = { \r\n// ...paymentData,\r\n// merchantWalletAddresses: {\r\n// ...apiConfig.merchantWalletAddresses,\r\n// ...paymentData.merchantWalletAddresses\r\n// }\r\n// };\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/create`, {\r\n// method: 'POST',\r\n// headers: getHeaders(),\r\n// body: JSON.stringify(enhancedPaymentData)\r\n// });\r\n\r\n// console.log('Create payment response status:', response.status);\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// // If the response isn't valid JSON\r\n// throw new Error(`Failed to create payment: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// console.error('Error creating payment:', errorData);\r\n// throw new Error(errorData.error || `Failed to create payment: ${response.status}`);\r\n// }\r\n\r\n// const data = await response.json();\r\n// console.log('Create payment response data:', data);\r\n \r\n// return data;\r\n// } catch (error) {\r\n// console.error('Create payment error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get payment details by ID\r\n// * @param {string} paymentId - Payment ID\r\n// * @returns {Promise} - Promise resolving to payment details\r\n// */\r\n// export const getPayment = async (paymentId) => {\r\n// try {\r\n// console.log('Getting payment:', paymentId);\r\n \r\n// if (!paymentId) {\r\n// throw new Error('Payment ID is required');\r\n// }\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/${paymentId}`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n\r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get payment: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// console.error('Error getting payment:', errorData);\r\n// throw new Error(errorData.error || `Failed to get payment: ${response.status}`);\r\n// }\r\n\r\n// const data = await response.json();\r\n// console.log('Get payment response:', data);\r\n \r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get payment error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Process a payment\r\n// * @param {Object} processData - Payment process data\r\n// * @returns {Promise} - Promise resolving to processed payment details\r\n// */\r\n// export const processPayment = async (processData) => {\r\n// try {\r\n// console.log('Processing payment with data:', processData);\r\n \r\n// if (!processData.paymentId) {\r\n// throw new Error('Payment ID is required');\r\n// }\r\n \r\n// if (!processData.transactionHash) {\r\n// throw new Error('Transaction hash is required');\r\n// }\r\n \r\n// console.log('API URL:', `${apiConfig.apiUrl}/api/payments/process`);\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/process`, {\r\n// method: 'POST',\r\n// headers: getHeaders(),\r\n// body: JSON.stringify(processData)\r\n// });\r\n\r\n// console.log('Process payment response status:', response.status);\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to process payment: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// console.error('Error processing payment:', errorData);\r\n// throw new Error(errorData.error || `Failed to process payment: ${response.status}`);\r\n// }\r\n\r\n// const data = await response.json();\r\n// console.log('Process payment response data:', data);\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Process payment error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get supported networks and tokens\r\n// * @returns {Promise} - Promise resolving to supported networks and tokens\r\n// */\r\n// export const getSupportedNetworks = async () => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/networks`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get networks: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get networks: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get supported networks error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get merchant profile including wallet addresses\r\n// * @returns {Promise} - Promise resolving to merchant profile\r\n// */\r\n// export const getMerchantProfile = async () => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/merchants/profile`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get merchant profile: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get merchant profile: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n \r\n// // Update apiConfig with retrieved addresses\r\n// if (data.merchant && data.merchant.walletAddresses) {\r\n// apiConfig.merchantWalletAddresses = {\r\n// ...apiConfig.merchantWalletAddresses,\r\n// ...data.merchant.walletAddresses\r\n// };\r\n// }\r\n \r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get merchant profile error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get merchant payments with filters\r\n// * @param {Object} options - Filter options\r\n// * @returns {Promise} - Promise resolving to payments list\r\n// */\r\n// export const getMerchantPayments = async (options = {}) => {\r\n// try {\r\n// const queryParams = new URLSearchParams();\r\n \r\n// Object.entries(options).forEach(([key, value]) => {\r\n// if (value !== null && value !== undefined) {\r\n// queryParams.append(key, value);\r\n// }\r\n// });\r\n \r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments?${queryParams}`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get payments: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get payments: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get merchant payments error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Get payment statistics\r\n// * @returns {Promise} - Promise resolving to payment statistics\r\n// */\r\n// export const getMerchantPaymentStats = async () => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/payments/stats`, {\r\n// method: 'GET',\r\n// headers: getHeaders()\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to get payment stats: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to get payment stats: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Get payment stats error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Validate wallet address for specific network\r\n// * @param {string} address - Wallet address to validate\r\n// * @param {string} network - Network type\r\n// * @returns {Promise} - Promise resolving to validation result\r\n// */\r\n// export const validateWalletAddress = async (address, network) => {\r\n// try {\r\n// const response = await fetch(`${apiConfig.apiUrl}/api/wallets/validate`, {\r\n// method: 'POST',\r\n// headers: getHeaders(),\r\n// body: JSON.stringify({ address, network })\r\n// });\r\n \r\n// if (!response.ok) {\r\n// let errorData;\r\n// try {\r\n// errorData = await response.json();\r\n// } catch (e) {\r\n// throw new Error(`Failed to validate address: ${response.status} ${response.statusText}`);\r\n// }\r\n \r\n// throw new Error(errorData.error || `Failed to validate address: ${response.status}`);\r\n// }\r\n \r\n// const data = await response.json();\r\n// return data;\r\n// } catch (error) {\r\n// console.error('Validate wallet address error:', error);\r\n// throw error;\r\n// }\r\n// };\r\n\r\n// /**\r\n// * Generate mock transaction hash for testing\r\n// * @param {string} network - Network type\r\n// * @returns {string} - Mock transaction hash\r\n// */\r\n// export const generateMockTransactionHash = (network = 'ethereum') => {\r\n// const prefixes = {\r\n// ethereum: '0x',\r\n// bsc: '0x',\r\n// tron: '',\r\n// algorand: ''\r\n// };\r\n \r\n// const prefix = prefixes[network] || '0x';\r\n// const hash = Array.from({length: 64}, () => \r\n// Math.floor(Math.random() * 16).toString(16)).join('');\r\n \r\n// return `${prefix}${hash}`;\r\n// };\r\n\r\n\r\n\r\n\r\n\r\n// src/services/api.js - COMPLETE FIXED VERSION\r\nlet apiConfig = {\r\n apiKey: null,\r\n apiSecret: null,\r\n apiUrl: 'https://coinleyserver-production.up.railway.app',\r\n merchantWalletAddresses: {},\r\n authToken: null\r\n};\r\n\r\n/**\r\n * Initialize the API with configuration\r\n */\r\nexport const initializeApi = async (config) => {\r\n apiConfig = { ...apiConfig, ...config };\r\n console.log('API initialized with:', {\r\n apiUrl: apiConfig.apiUrl,\r\n apiKey: apiConfig.apiKey ? `${apiConfig.apiKey.substring(0, 6)}...` : null,\r\n hasWalletAddresses: Object.keys(apiConfig.merchantWalletAddresses || {}).length > 0\r\n });\r\n\r\n // Authenticate and fetch merchant wallet addresses immediately\r\n try {\r\n await authenticateAndFetchWallets();\r\n } catch (error) {\r\n console.error('Failed to fetch merchant wallets during initialization:', error);\r\n }\r\n};\r\n\r\n/**\r\n * Authenticate with the API and fetch merchant wallet addresses\r\n */\r\nconst authenticateAndFetchWallets = async () => {\r\n try {\r\n console.log('Authenticating and fetching merchant wallets...');\r\n \r\n // Create a temporary auth token for API calls\r\n const tempToken = btoa(`${apiConfig.apiKey}:${apiConfig.apiSecret}`);\r\n \r\n // First, let's try to get merchant profile with wallet addresses\r\n const response = await fetch(`${apiConfig.apiUrl}/api/merchants/dashboard`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${tempToken}`,\r\n 'x-api-key': apiConfig.apiKey,\r\n 'x-api-secret': apiConfig.apiSecret\r\n }\r\n });\r\n\r\n if (response.ok) {\r\n const data = await response.json();\r\n console.log('Merchant dashboard data received:', data);\r\n \r\n if (data.merchant) {\r\n // Extract wallet addresses from merchant data\r\n const walletAddresses = {};\r\n \r\n // Get wallet addresses from different possible locations\r\n if (data.merchant.walletAddress) {\r\n walletAddresses.ethereum = data.merchant.walletAddress;\r\n }\r\n \r\n if (data.merchant.solWalletAddress) {\r\n walletAddresses.solana = data.merchant.solWalletAddress;\r\n }\r\n \r\n if (data.merchant.merchantWallets) {\r\n Object.assign(walletAddresses, data.merchant.merchantWallets);\r\n }\r\n \r\n // Update config with retrieved addresses\r\n apiConfig.merchantWalletAddresses = walletAddresses;\r\n console.log('Merchant wallet addresses retrieved:', walletAddresses);\r\n \r\n return walletAddresses;\r\n }\r\n } else {\r\n console.error('Failed to fetch merchant dashboard:', response.status);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching merchant wallets:', error);\r\n }\r\n \r\n return {};\r\n};\r\n\r\n/**\r\n * Get merchant wallet addresses (with fresh fetch if needed)\r\n */\r\nexport const getMerchantWallets = async () => {\r\n // If we don't have wallet addresses, try to fetch them\r\n if (Object.keys(apiConfig.merchantWalletAddresses).length === 0) {\r\n await authenticateAndFetchWallets();\r\n }\r\n \r\n return apiConfig.merchantWalletAddresses;\r\n};\r\n\r\n/**\r\n * Generate headers with authentication\r\n */\r\nconst getHeaders = () => {\r\n return {\r\n 'Content-Type': 'application/json',\r\n 'x-api-key': apiConfig.apiKey,\r\n 'x-api-secret': apiConfig.apiSecret,\r\n 'Authorization': apiConfig.authToken ? `Bearer ${apiConfig.authToken}` : undefined\r\n };\r\n};\r\n\r\n/**\r\n * Create a new payment with proper wallet address resolution\r\n */\r\nexport const createPayment = async (paymentData) => {\r\n try {\r\n console.log('Creating payment with data:', paymentData);\r\n \r\n if (!paymentData.amount) {\r\n throw new Error('Payment amount is required');\r\n }\r\n\r\n // Ensure we have merchant wallet addresses\r\n const merchantWallets = await getMerchantWallets();\r\n console.log('Using merchant wallets:', merchantWallets);\r\n \r\n // Enhance payment data with merchant wallet addresses\r\n const enhancedPaymentData = { \r\n ...paymentData,\r\n merchantWalletAddresses: {\r\n ...merchantWallets,\r\n ...paymentData.merchantWalletAddresses\r\n }\r\n };\r\n \r\n console.log('Enhanced payment data:', enhancedPaymentData);\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/create`, {\r\n method: 'POST',\r\n headers: getHeaders(),\r\n body: JSON.stringify(enhancedPaymentData)\r\n });\r\n\r\n console.log('Create payment response status:', response.status);\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to create payment: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n console.error('Error creating payment:', errorData);\r\n throw new Error(errorData.error || `Failed to create payment: ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n console.log('Payment created successfully:', data);\r\n \r\n return data;\r\n } catch (error) {\r\n console.error('Create payment error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get payment details by ID\r\n */\r\nexport const getPayment = async (paymentId) => {\r\n try {\r\n console.log('Getting payment:', paymentId);\r\n \r\n if (!paymentId) {\r\n throw new Error('Payment ID is required');\r\n }\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/${paymentId}`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n\r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get payment: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n console.error('Error getting payment:', errorData);\r\n throw new Error(errorData.error || `Failed to get payment: ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n console.log('Get payment response:', data);\r\n \r\n return data;\r\n } catch (error) {\r\n console.error('Get payment error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Process a payment\r\n */\r\nexport const processPayment = async (processData) => {\r\n try {\r\n console.log('Processing payment with data:', processData);\r\n \r\n if (!processData.paymentId) {\r\n throw new Error('Payment ID is required');\r\n }\r\n \r\n if (!processData.transactionHash) {\r\n throw new Error('Transaction hash is required');\r\n }\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/process`, {\r\n method: 'POST',\r\n headers: getHeaders(),\r\n body: JSON.stringify(processData)\r\n });\r\n\r\n console.log('Process payment response status:', response.status);\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to process payment: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n console.error('Error processing payment:', errorData);\r\n throw new Error(errorData.error || `Failed to process payment: ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n console.log('Process payment response data:', data);\r\n return data;\r\n } catch (error) {\r\n console.error('Process payment error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get supported networks and tokens\r\n */\r\nexport const getSupportedNetworks = async () => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/networks`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get networks: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get networks: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Get supported networks error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get merchant payments with filters\r\n */\r\nexport const getMerchantPayments = async (options = {}) => {\r\n try {\r\n const queryParams = new URLSearchParams();\r\n \r\n Object.entries(options).forEach(([key, value]) => {\r\n if (value !== null && value !== undefined) {\r\n queryParams.append(key, value);\r\n }\r\n });\r\n \r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments?${queryParams}`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get payments: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get payments: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Get merchant payments error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Get payment statistics\r\n */\r\nexport const getMerchantPaymentStats = async () => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/payments/stats`, {\r\n method: 'GET',\r\n headers: getHeaders()\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to get payment stats: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to get payment stats: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Get payment stats error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Validate wallet address for specific network\r\n */\r\nexport const validateWalletAddress = async (address, network) => {\r\n try {\r\n const response = await fetch(`${apiConfig.apiUrl}/api/wallets/validate`, {\r\n method: 'POST',\r\n headers: getHeaders(),\r\n body: JSON.stringify({ address, network })\r\n });\r\n \r\n if (!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch (e) {\r\n throw new Error(`Failed to validate address: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n throw new Error(errorData.error || `Failed to validate address: ${response.status}`);\r\n }\r\n \r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Validate wallet address error:', error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * Generate mock transaction hash for testing\r\n */\r\nexport const generateMockTransactionHash = (network = 'ethereum') => {\r\n const prefixes = {\r\n ethereum: '0x',\r\n bsc: '0x',\r\n tron: '',\r\n algorand: ''\r\n };\r\n \r\n const prefix = prefixes[network] || '0x';\r\n const hash = Array.from({length: 64}, () => \r\n Math.floor(Math.random() * 16).toString(16)).join('');\r\n \r\n return `${prefix}${hash}`;\r\n};\r\n\r\n// Export the current config for debugging\r\nexport const getApiConfig = () => apiConfig;","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// src/context/ThemeContext.jsx\r\nimport React, { createContext, useState, useContext, useEffect } from 'react';\r\n\r\nconst ThemeContext = createContext();\r\n\r\nexport const useTheme = () => useContext(ThemeContext);\r\n\r\nexport const ThemeProvider = ({ initialTheme = 'light', children }) => {\r\n const [theme, setTheme] = useState(initialTheme);\r\n\r\n const toggleTheme = () => {\r\n setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light');\r\n };\r\n\r\n useEffect(() => {\r\n document.documentElement.classList.remove('light', 'dark');\r\n document.documentElement.classList.add(theme);\r\n }, [theme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n","// src/context/CoinleyContext.jsx - FIXED VERSION\r\nimport React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport { initializeApi, getMerchantWallets } from '../services/api';\r\n\r\nconst CoinleyContext = createContext();\r\n\r\nexport const useCoinley = () => useContext(CoinleyContext);\r\n\r\nexport const CoinleyProvider = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl = 'https://coinleyserver-production.up.railway.app',\r\n merchantWalletAddress = null, // Legacy prop for backward compatibility\r\n merchantSolWalletAddress = null, // Legacy prop for backward compatibility\r\n debug = false,\r\n children\r\n}) => {\r\n const [isInitialized, setIsInitialized] = useState(false);\r\n const [error, setError] = useState(null);\r\n const [paymentData, setPaymentData] = useState(null);\r\n const [merchantWallets, setMerchantWallets] = useState({});\r\n\r\n useEffect(() => {\r\n if (!apiKey || !apiSecret) {\r\n setError('API key and secret are required');\r\n return;\r\n }\r\n\r\n const initializeSDK = async () => {\r\n try {\r\n // Initialize the API service\r\n await initializeApi({\r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n debug\r\n });\r\n\r\n // Fetch merchant wallet addresses\r\n const wallets = await getMerchantWallets();\r\n \r\n // Merge with legacy props if provided\r\n const allWallets = {\r\n ...wallets,\r\n ...(merchantWalletAddress && { ethereum: merchantWalletAddress }),\r\n ...(merchantSolWalletAddress && { solana: merchantSolWalletAddress })\r\n };\r\n\r\n setMerchantWallets(allWallets);\r\n setIsInitialized(true);\r\n\r\n if (debug) {\r\n console.log('Coinley SDK initialized successfully with wallets:', allWallets);\r\n }\r\n } catch (err) {\r\n setError(err.message);\r\n if (debug) {\r\n console.error('Coinley SDK initialization error:', err);\r\n }\r\n }\r\n };\r\n\r\n initializeSDK();\r\n }, [apiKey, apiSecret, apiUrl, merchantWalletAddress, merchantSolWalletAddress, debug]);\r\n\r\n // Method to refresh merchant wallets\r\n const refreshMerchantWallets = async () => {\r\n try {\r\n const wallets = await getMerchantWallets();\r\n setMerchantWallets(wallets);\r\n return wallets;\r\n } catch (err) {\r\n console.error('Failed to refresh merchant wallets:', err);\r\n return merchantWallets;\r\n }\r\n };\r\n\r\n // Method to store payment data from responses for easy context access\r\n const storePaymentData = (data) => {\r\n setPaymentData(data);\r\n return data;\r\n };\r\n\r\n const value = {\r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n merchantWalletAddress, // Legacy\r\n merchantSolWalletAddress, // Legacy\r\n merchantWallets, // New: All merchant wallets\r\n isInitialized,\r\n error,\r\n debug,\r\n paymentData,\r\n storePaymentData,\r\n refreshMerchantWallets\r\n };\r\n\r\n return (\r\n <CoinleyContext.Provider value={value}>\r\n {children}\r\n </CoinleyContext.Provider>\r\n );\r\n};","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n","// src/components/QRCode.jsx\r\nimport React, { useEffect, useState } from 'react';\r\nimport { QRCodeSVG } from 'qrcode.react';\r\n\r\n/**\r\n * Enhanced QR Code component that generates network-specific payment QR codes\r\n */\r\nconst QRCode = ({ \r\n walletAddress, \r\n amount, \r\n currency, \r\n network,\r\n theme = 'light',\r\n size = 200 \r\n}) => {\r\n const [qrData, setQrData] = useState('');\r\n const [qrError, setQrError] = useState(null);\r\n \r\n useEffect(() => {\r\n if (!walletAddress || walletAddress === 'No address configured') {\r\n setQrError('No wallet address configured for this network');\r\n return;\r\n }\r\n \r\n try {\r\n let paymentData;\r\n \r\n // Format QR code data based on network and currency\r\n switch (network) {\r\n case 'tron':\r\n if (currency === 'TRX') {\r\n // Native TRX transfer\r\n paymentData = `tronlink://transfer?to=${walletAddress}&amount=${amount}`;\r\n } else {\r\n // TRC20 token transfer - just the address for manual entry\r\n paymentData = walletAddress;\r\n }\r\n break;\r\n \r\n case 'algorand':\r\n // Algorand payment URI\r\n paymentData = `algorand://${walletAddress}?amount=${Math.floor(parseFloat(amount) * 1000000)}`;\r\n break;\r\n \r\n case 'bsc':\r\n // BSC - similar to Ethereum but different network\r\n if (currency === 'BNB') {\r\n paymentData = `ethereum:${walletAddress}@56?value=${convertToWei(amount)}`;\r\n } else {\r\n // BEP20 tokens\r\n const tokenAddress = getTokenAddressForCurrency(currency, 'bsc');\r\n if (tokenAddress) {\r\n paymentData = `ethereum:${tokenAddress}/transfer?address=${walletAddress}&uint256=${convertToSmallestUnit(amount, currency)}@56`;\r\n } else {\r\n paymentData = walletAddress;\r\n }\r\n }\r\n break;\r\n \r\n case 'ethereum':\r\n default:\r\n if (currency === 'ETH') {\r\n // Native ETH transfer\r\n paymentData = `ethereum:${walletAddress}@1?value=${convertToWei(amount)}`;\r\n } else {\r\n // ERC20 token transfer\r\n const tokenAddress = getTokenAddressForCurrency(currency, 'ethereum');\r\n if (tokenAddress) {\r\n paymentData = `ethereum:${tokenAddress}/transfer?address=${walletAddress}&uint256=${convertToSmallestUnit(amount, currency)}`;\r\n } else {\r\n paymentData = walletAddress;\r\n }\r\n }\r\n break;\r\n }\r\n \r\n setQrData(paymentData);\r\n setQrError(null);\r\n } catch (err) {\r\n console.error('Error generating QR code:', err);\r\n setQrError('Error generating payment QR code');\r\n }\r\n }, [walletAddress, amount, currency, network]);\r\n \r\n // Helper function to get token contract address\r\n const getTokenAddressForCurrency = (currency, network) => {\r\n const tokenAddresses = {\r\n ethereum: {\r\n 'USDT': '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n 'USDC': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\r\n },\r\n bsc: {\r\n 'USDT': '0x55d398326f99059fF775485246999027B3197955',\r\n 'USDC': '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d'\r\n },\r\n tron: {\r\n 'USDT': 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\r\n 'USDC': 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8'\r\n }\r\n };\r\n \r\n return tokenAddresses[network]?.[currency] || '';\r\n };\r\n \r\n // Helper to convert amount to smallest unit based on currency\r\n const convertToSmallestUnit = (amount, currency) => {\r\n const decimals = currency === 'USDT' || currency === 'USDC' ? 6 : 18;\r\n return Math.floor(parseFloat(amount) * Math.pow(10, decimals)).toString();\r\n };\r\n \r\n // Helper to convert ETH to wei\r\n const convertToWei = (amount) => {\r\n return Math.floor(parseFloat(amount) * 1e18).toString();\r\n };\r\n\r\n // Get network display name\r\n const getNetworkDisplayName = (network) => {\r\n const names = {\r\n ethereum: 'Ethereum',\r\n bsc: 'BSC',\r\n tron: 'Tron',\r\n algorand: 'Algorand'\r\n };\r\n return names[network] || network;\r\n };\r\n\r\n // Get wallet app suggestions based on network\r\n const getWalletSuggestions = (network) => {\r\n const suggestions = {\r\n ethereum: ['MetaMask', 'Trust Wallet', 'Coinbase Wallet'],\r\n bsc: ['MetaMask', 'Trust Wallet', 'SafePal'],\r\n tron: ['TronLink', 'Trust Wallet'],\r\n algorand: ['Pera Wallet', 'MyAlgo Wallet']\r\n };\r\n return suggestions[network] || ['MetaMask', 'Trust Wallet'];\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col items-center\">\r\n {qrError ? (\r\n <div className=\"p-4 rounded-lg bg-red-100 mb-3 text-red-700 text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-8 w-8 mx-auto mb-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\r\n </svg>\r\n <p className=\"font-medium\">{qrError}</p>\r\n </div>\r\n ) : (\r\n <div className=\"p-4 rounded-lg bg-white mb-3 shadow-sm border\">\r\n {qrData && (\r\n <QRCodeSVG\r\n value={qrData}\r\n size={size}\r\n bgColor={theme === 'dark' ? '#374151' : '#FFFFFF'}\r\n fgColor={theme === 'dark' ? '#FFFFFF' : '#000000'}\r\n level=\"H\"\r\n includeMargin={true}\r\n />\r\n )}\r\n </div>\r\n )}\r\n \r\n <div className=\"text-center text-sm text-gray-700 mb-4\">\r\n <p className='font-semibold text-gray-800 flex items-center justify-center'>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M12 12h-4.01M12 12V8.01\" />\r\n </svg>\r\n Scan to Pay with {currency}\r\n </p>\r\n <p className=\"text-xs text-gray-500 mt-1\">\r\n Scan with your {getNetworkDisplayName(network)} wallet app\r\n </p>\r\n </div>\r\n \r\n {/* Payment Amount Display */}\r\n <div className=\"w-full mb-4 p-3 bg-gray-50 rounded-lg\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm font-medium text-gray-700\">Amount to Pay:</span>\r\n <span className=\"text-lg font-bold text-[#7042D2]\">{amount} {currency}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center mt-1\">\r\n <span className=\"text-xs text-gray-500\">Network:</span>\r\n <span className=\"text-xs font-medium text-gray-700\">{getNetworkDisplayName(network)}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Wallet Address Display */}\r\n {!qrError && (\r\n <div className=\"w-full mb-4\">\r\n <p className=\"text-xs text-gray-500 mb-1 text-center\">\r\n Or copy wallet address:\r\n </p>\r\n <div className=\"text-xs font-mono p-2 rounded bg-gray-100 text-gray-700 break-all text-center select-all cursor-pointer border\"\r\n onClick={() => navigator.clipboard?.writeText(walletAddress)}\r\n title=\"Click to copy\">\r\n {walletAddress}\r\n </div>\r\n </div>\r\n )}\r\n \r\n {/* Instructions */}\r\n <div className=\"w-full\">\r\n <div className=\"p-3 rounded bg-blue-50 border border-blue-200\">\r\n <h4 className=\"text-sm font-medium mb-2 text-blue-800 flex items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\r\n </svg>\r\n Payment Instructions\r\n </h4>\r\n <ol className=\"text-xs space-y-1 text-blue-700\">\r\n <li>1. Open your crypto wallet app ({getWalletSuggestions(network).join(', ')})</li>\r\n <li>2. Scan the QR code above or copy the wallet address</li>\r\n <li>3. Send exactly <strong>{amount} {currency}</strong> on {getNetworkDisplayName(network)} network</li>\r\n <li>4. Click \"I have sent the payment\" button below after sending</li>\r\n </ol>\r\n \r\n <div className=\"mt-3 p-2 bg-yellow-50 border border-yellow-200 rounded\">\r\n <p className=\"text-xs text-yellow-800\">\r\n <strong>Important:</strong> Make sure you're sending on the correct network ({getNetworkDisplayName(network)}) \r\n and using the exact amount shown above.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default QRCode;","// src/components/PaymentStatus.jsx\r\nimport React from 'react';\r\n\r\n/**\r\n * Component to display payment status\r\n */\r\nconst PaymentStatus = ({ status, message, theme = 'light' }) => {\r\n // Render different icons based on status\r\n const renderIcon = () => {\r\n switch (status) {\r\n case 'processing':\r\n return (\r\n <div className=\"animate-spin rounded-full h-12 w-12 border-4 border-t-blue-500 border-blue-500/20\"></div>\r\n );\r\n case 'success':\r\n return (\r\n <div className=\"rounded-full h-12 w-12 bg-green-100 flex items-center justify-center\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className=\"h-8 w-8 text-green-500\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n </div>\r\n );\r\n case 'error':\r\n return (\r\n <div className=\"rounded-full h-12 w-12 bg-red-100 flex items-center justify-center\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className=\"h-8 w-8 text-red-500\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </div>\r\n );\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n // Get status title\r\n const getStatusTitle = () => {\r\n switch (status) {\r\n case 'processing':\r\n return 'Processing Payment';\r\n case 'success':\r\n return 'Payment Successful';\r\n case 'error':\r\n return 'Payment Failed';\r\n default:\r\n return 'Unknown Status';\r\n }\r\n };\r\n\r\n // Get appropriate text color for message\r\n const getMessageClasses = () => {\r\n switch (status) {\r\n case 'processing':\r\n return theme === 'dark' ? 'text-blue-300' : 'text-blue-600';\r\n case 'success':\r\n return theme === 'dark' ? 'text-green-300' : 'text-green-600';\r\n case 'error':\r\n return theme === 'dark' ? 'text-red-300' : 'text-red-600';\r\n default:\r\n return theme === 'dark' ? 'text-gray-300' : 'text-gray-600';\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-6\">\r\n <div className=\"mb-4\">{renderIcon()}</div>\r\n <h3 className={`text-xl font-bold mb-2 ${theme === 'dark' ? 'text-white' : 'text-gray-900'}`}>\r\n {getStatusTitle()}\r\n </h3>\r\n <p className={`text-center ${getMessageClasses()}`}>{message}</p>\r\n\r\n {status === 'processing' && (\r\n <div className={`mt-4 text-xs ${theme === 'dark' ? 'text-gray-400' : 'text-gray-500'}`}>\r\n This may take a few moments. Please do not close this window.\r\n </div>\r\n )}\r\n\r\n {status === 'success' && (\r\n <div className={`mt-4 p-2 rounded ${theme === 'dark' ? 'bg-gray-700' : 'bg-gray-100'}`}>\r\n <p className={`text-xs ${theme === 'dark' ? 'text-gray-300' : 'text-gray-600'}`}>\r\n Your payment has been successfully processed. You will receive a confirmation shortly.\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PaymentStatus;","// src/components/PaymentMethods.jsx\r\nimport React, { useState, useEffect } from 'react';\r\nimport { NETWORK_TYPES, TOKEN_CONFIG, detectWallets, WALLET_TYPES } from '../services/walletService';\r\n\r\n/**\r\n * Payment methods component with network dropdown and currency grid\r\n */\r\nconst PaymentMethods = ({ onSelect, selected, theme = 'light', supportedNetworks = [] }) => {\r\n const [selectedNetwork, setSelectedNetwork] = useState(NETWORK_TYPES.ETHEREUM);\r\n const [availableWallets, setAvailableWallets] = useState({});\r\n const [showMore, setShowMore] = useState(false);\r\n\r\n useEffect(() => {\r\n setAvailableWallets(detectWallets());\r\n }, []);\r\n\r\n // Available networks\r\n const networks = [\r\n {\r\n id: NETWORK_TYPES.ETHEREUM,\r\n name: 'Ethereum',\r\n description: 'ERC-20 tokens'\r\n },\r\n {\r\n id: NETWORK_TYPES.BSC,\r\n name: 'BSC (Binance Smart Chain)',\r\n description: 'BEP-20 tokens'\r\n },\r\n {\r\n id: NETWORK_TYPES.TRON,\r\n name: 'Tron',\r\n description: 'TRC-20 tokens'\r\n },\r\n {\r\n id: NETWORK_TYPES.ALGORAND,\r\n name: 'Algorand',\r\n description: 'ASA tokens'\r\n }\r\n ];\r\n\r\n // Payment methods based on selected network\r\n const getPaymentMethodsForNetwork = (network) => {\r\n const methods = [];\r\n \r\n switch (network) {\r\n case NETWORK_TYPES.ETHEREUM:\r\n methods.push(\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'PYUSD',\r\n name: 'PYUSD',\r\n description: 'PayPal USD',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/28492.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'FRAX',\r\n name: 'FRAX',\r\n description: 'Frax',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/6952.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'USDP',\r\n name: 'USDP',\r\n description: 'Pax Dollar',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/6662.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'DAI',\r\n name: 'DAI',\r\n description: 'Dai Stablecoin',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4943.png',\r\n network: NETWORK_TYPES.ETHEREUM\r\n },\r\n {\r\n id: 'ETH',\r\n name: 'ETH',\r\n description: 'Ethereum',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTcyJyRKN0dRJWVZqoLzYgkRHdJsxKGq8nHUw&s',\r\n network: NETWORK_TYPES.ETHEREUM\r\n }\r\n );\r\n break;\r\n \r\n case NETWORK_TYPES.BSC:\r\n methods.push(\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'BUSD',\r\n name: 'BUSD',\r\n description: 'Binance USD',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4687.png',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'FRAX',\r\n name: 'FRAX',\r\n description: 'Frax',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/6952.png',\r\n network: NETWORK_TYPES.BSC\r\n },\r\n {\r\n id: 'BNB',\r\n name: 'BNB',\r\n description: 'Binance Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRHSjyW2sSnBhwztCwVW97i1BtV40g7heMMxg&s',\r\n network: NETWORK_TYPES.BSC\r\n }\r\n );\r\n break;\r\n \r\n case NETWORK_TYPES.TRON:\r\n methods.push(\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.TRON\r\n },\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.TRON\r\n },\r\n {\r\n id: 'USDJ',\r\n name: 'USDJ',\r\n description: 'JUST Stablecoin',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5446.png',\r\n network: NETWORK_TYPES.TRON\r\n },\r\n {\r\n id: 'TRX',\r\n name: 'TRX',\r\n description: 'Tron',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQKLpLNsGRHbZfCUXAjZLPSp_YFZvX5dMnAoA&s',\r\n network: NETWORK_TYPES.TRON\r\n }\r\n );\r\n break;\r\n \r\n case NETWORK_TYPES.ALGORAND:\r\n methods.push(\r\n {\r\n id: 'USDC',\r\n name: 'USDC',\r\n description: 'USD Coin',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ43MuDqq54iD1ZCRL_uthAPkfwSSL-J5qI_Q&s',\r\n network: NETWORK_TYPES.ALGORAND\r\n },\r\n {\r\n id: 'USDT',\r\n name: 'USDT',\r\n description: 'Tether USD',\r\n logo: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSj0euZAOXsLTJFQxgiKzlX7z8xbfBk-7kmJA&s',\r\n network: NETWORK_TYPES.ALGORAND\r\n },\r\n {\r\n id: 'ALGO',\r\n name: 'ALGO',\r\n description: 'Algorand',\r\n logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4030.png',\r\n network: NETWORK_TYPES.ALGORAND\r\n }\r\n );\r\n break;\r\n \r\n default:\r\n break;\r\n }\r\n \r\n return methods;\r\n };\r\n\r\n const handleNetworkChange = (networkId) => {\r\n setSelectedNetwork(networkId);\r\n setShowMore(false); // Reset show more when network changes\r\n \r\n // Reset selection when network changes\r\n if (selected?.network !== networkId) {\r\n onSelect(null);\r\n }\r\n };\r\n\r\n const handleSelectPaymentMethod = (method) => {\r\n onSelect({\r\n currency: method.id,\r\n network: selectedNetwork,\r\n tokenConfig: TOKEN_CONFIG[method.id]?.[selectedNetwork],\r\n method: method\r\n });\r\n };\r\n\r\n const availableMethods = getPaymentMethodsForNetwork(selectedNetwork);\r\n const visibleMethods = showMore ? availableMethods : availableMethods.slice(0, 4);\r\n\r\n // Helper functions with correct wallet constants\r\n function getRequiredWallet(network) {\r\n switch (network) {\r\n case NETWORK_TYPES.ETHEREUM:\r\n case NETWORK_TYPES.BSC:\r\n return WALLET_TYPES.METAMASK; // Use the actual constant\r\n case NETWORK_TYPES.TRON:\r\n return WALLET_TYPES.TRONLINK; // Use the actual constant\r\n case NETWORK_TYPES.ALGORAND:\r\n return WALLET_TYPES.LUTE; // Use the actual constant\r\n default:\r\n return WALLET_TYPES.METAMASK;\r\n }\r\n }\r\n\r\n function getNetworkRequirement(network) {\r\n const wallet = getRequiredWallet(network);\r\n const isAvailable = availableWallets[wallet];\r\n \r\n const walletNames = {\r\n [WALLET_TYPES.METAMASK]: 'MetaMask',\r\n [WALLET_TYPES.TRONLINK]: 'TronLink',\r\n [WALLET_TYPES.TRUST_WALLET]: 'Trust Wallet',\r\n [WALLET_TYPES.LUTE]: 'Lute Wallet'\r\n };\r\n \r\n return isAvailable \r\n ? `${walletNames[wallet]} detected - Ready to pay`\r\n : `${walletNames[wallet]} required - Please install to continue`;\r\n }\r\n\r\n return (\r\n <div>\r\n <h3 className={`text-lg font-medium mb-4 ${theme === 'dark' ? 'text-white' : 'text-gray-800'}`}>\r\n Select Payment Method\r\n </h3>\r\n \r\n {/* Blockchain Network Dropdown */}\r\n <div className=\"mb-6\">\r\n <label className={`block text-sm font-medium mb-2 ${theme === 'dark' ? 'text-white' : 'text-gray-700'}`}>\r\n Blockchain Network\r\n </label>\r\n <select\r\n value={selectedNetwork}\r\n onChange={(e) => handleNetworkChange(e.target.value)}\r\n className={`w-full p-3 rounded-lg border transition-colors ${\r\n theme === 'dark'\r\n ? 'bg-gray-700 border-gray-600 text-white focus:border-[#7042D2]'\r\n : 'bg-white border-gray-300 text-gray-900 focus:border-[#7042D2]'\r\n } focus:outline-none focus:ring-2 focus:ring-[#7042D2] focus:ring-opacity-50`}\r\n >\r\n {networks\r\n .filter(network => supportedNetworks.length === 0 || supportedNetworks.includes(network.id))\r\n .map((network) => (\r\n <option key={network.id} value={network.id}>\r\n {network.name} - {network.description}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n\r\n {/* Stablecoins/Tokens Grid */}\r\n <div className=\"mb-4\">\r\n <label className={`block text-sm font-medium mb-3 ${theme === 'dark' ? 'text-white' : 'text-gray-700'}`}>\r\n Choose Cryptocurrency\r\n </label>\r\n \r\n <div className=\"grid grid-cols-2 gap-3 mb-4\">\r\n {visibleMethods.map((method) => (\r\n <button\r\n key={`${method.id}-${method.network}`}\r\n onClick={() => handleSelectPaymentMethod(method)}\r\n className={`p-4 rounded-lg transition-all duration-200 border-2 ${\r\n selected?.currency === method.id && selected?.network === selectedNetwork\r\n ? theme === 'dark'\r\n ? 'bg-blue-900/30 border-[#7042D2] ring-2 ring-[#7042D2] ring-opacity-50'\r\n : 'bg-blue-50 border-[#7042D2] ring-2 ring-[#7042D2] ring-opacity-50'\r\n : theme === 'dark'\r\n ? 'bg-gray-700 hover:bg-gray-600 border-gray-600 hover:border-gray-500'\r\n : 'bg-white hover:bg-gray-50 border-gray-200 hover:border-gray-300'\r\n }`}\r\n >\r\n <div className=\"flex flex-col items-center text-center\">\r\n <div className=\"flex-shrink-0 h-10 w-10 bg-white rounded-full flex items-center justify-center mb-2 shadow-sm\">\r\n <img src={method.logo} alt={method.name} className=\"h-6 w-6\" />\r\n </div>\r\n <div>\r\n <h4 className={`font-medium text-sm ${theme === 'dark' ? 'text-white' : 'text-gray-900'}`}>\r\n {method.name}\r\n </h4>\r\n <p className={`text-xs ${theme === 'dark' ? 'text-gray-300' : 'text-gray-500'}`}>\r\n {method.description}\r\n </p>\r\n </div>\r\n {selected?.currency === method.id && selected?.network === selectedNetwork && (\r\n <div className=\"mt-2\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className=\"h-4 w-4 text-[#7042D2]\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"currentColor\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\r\n clipRule=\"evenodd\"\r\n />\r\n </svg>\r\n </div>\r\n )}\r\n </div>\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Show More/Less Button */}\r\n {availableMethods.length > 4 && (\r\n <button\r\n onClick={() => setShowMore(!showMore)}\r\n className={`w-full py-2 px-4 rounded-lg text-sm font-medium transition-colors ${\r\n theme === 'dark'\r\n ? 'bg-gray-700 text-gray-300 hover:bg-gray-600'\r\n : 'bg-gray-100 text-gray-600 hover:bg-gray-200'\r\n }`}\r\n >\r\n {showMore ? 'Show Less' : `Show More (${availableMethods.length - 4} more)`}\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* Network Info */}\r\n <div className={`p-3 rounded-lg text-sm ${\r\n theme === 'dark' ? 'bg-gray-800 text-gray-300' : 'bg-gray-50 text-gray-600'\r\n }`}>\r\n <div className=\"flex items-center\">\r\n <div className={`w-2 h-2 rounded-full mr-2 ${\r\n availableWallets[getRequiredWallet(selectedNetwork)] ? 'bg-green-500' : 'bg-red-500'\r\n }`}></div>\r\n <span className=\"text-xs\">\r\n {getNetworkRequirement(selectedNetwork)}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PaymentMethods;","export default \"data:image/png;base64,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\"","// src/components/CoinleyModal.jsx\r\nimport React, { useState, useEffect } from 'react';\r\nimport PaymentMethods from './PaymentMethods';\r\nimport PaymentStatus from './PaymentStatus';\r\nimport QRCode from './QRCode';\r\nimport { WALLET_TYPES, getWalletInstallUrl, detectWallets, debugWalletEnvironment } from '../services/walletService';\r\nimport logo from '../assets/Logo.png';\r\n\r\nconst CoinleyModal = ({\r\n isOpen,\r\n onClose,\r\n payment,\r\n paymentStatus,\r\n selectedPaymentMethod,\r\n onPaymentMethodSelect,\r\n onPayment,\r\n onBack,\r\n error,\r\n theme = 'light',\r\n merchantName,\r\n transactionHash,\r\n walletConnection,\r\n onConnectWallet,\r\n testMode = false,\r\n supportedNetworks = [],\r\n availableWallets = {},\r\n supportedWallets = [],\r\n step = 'select-currency',\r\n merchantWalletAddresses = {},\r\n debug = false\r\n}) => {\r\n const [paymentType, setPaymentType] = useState('wallet'); // 'wallet' or 'qrcode'\r\n\r\n // Get wallet address for current network\r\n const getWalletAddressForNetwork = () => {\r\n if (!selectedPaymentMethod) return 'No network selected';\r\n \r\n const networkAddress = merchantWalletAddresses[selectedPaymentMethod.network];\r\n if (networkAddress) {\r\n return networkAddress;\r\n }\r\n \r\n // Fallback to payment recipient wallet if available\r\n if (payment?.recipientWallet) {\r\n return payment.recipientWallet;\r\n }\r\n \r\n return 'No wallet address configured for this network';\r\n };\r\n\r\n // Utility functions\r\n const formatAmount = (amount) => {\r\n return parseFloat(amount).toFixed(2);\r\n };\r\n\r\n const formatTransactionHash = (hash) => {\r\n if (!hash) return '';\r\n if (hash.length <= 14) return hash;\r\n return `${hash.slice(0, 8)}...${hash.slice(-6)}`;\r\n };\r\n\r\n const getNetworkDisplayName = (network) => {\r\n const names = {\r\n ethereum: 'Ethereum',\r\n bsc: 'BSC',\r\n tron: 'Tron',\r\n algorand: 'Algorand'\r\n };\r\n return names[network] || network;\r\n };\r\n\r\n const getWalletDisplayName = (walletType) => {\r\n const names = {\r\n [WALLET_TYPES.METAMASK]: 'MetaMask',\r\n [WALLET_TYPES.TRONLINK]: 'TronLink',\r\n [WALLET_TYPES.TRUST_WALLET]: 'Trust Wallet',\r\n [WALLET_TYPES.LUTE]: 'Lute Wallet'\r\n };\r\n return names[walletType] || walletType;\r\n };\r\n\r\n const getWalletIcon = (walletType) => {\r\n const icons = {\r\n [WALLET_TYPES.METAMASK]: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT3ymr3UNKopfI0NmUY95Dr-0589vG-91KuAA&s',\r\n [WALLET_TYPES.TRONLINK]: 'https://www.tronlink.org/images/logo.png',\r\n [WALLET_TYPES.TRUST_WALLET]: 'https://trustwallet.com/assets/images/trust_logotype.svg',\r\n [WALLET_TYPES.LUTE]: 'https://lute.app/logo.png'\r\n };\r\n return icons[walletType] || '';\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 overflow-y-auto bg-black/50\">\r\n <div className=\"flex min-h-screen items-center justify-center p-4\">\r\n <div className=\"relative p-6 w-full max-w-md mx-auto rounded-lg shadow-xl bg-white text-gray-800\">\r\n {/* Header */}\r\n <div className=\"flex justify-between items-center mb-6 bg-[#F1ECFB] p-3 rounded-xl\">\r\n <div className=\"flex items-center\">\r\n <h2 className=\"text-xl font-bold text-gray-900\">\r\n <img src={logo} className='w-32' alt=\"Coinley Logo\" />\r\n </h2>\r\n </div>\r\n <button \r\n onClick={onClose}\r\n className=\"text-gray-500 hover:text-gray-700 focus:outline-none\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n \r\n {/* Content */}\r\n <div className=\"mb-6 bg-[#F1ECFB] p-3 rounded-xl\">\r\n {payment && (\r\n <div className=\"mb-6 p-4 rounded-lg\">\r\n <p className=\"text-lg text-gray-800 font-semibold\">\r\n PAY: {merchantName}\r\n </p>\r\n <div className=\"flex justify-between items-center mt-2 bg-gray-100 px-3 rounded-lg\">\r\n <span className=\"font-medium text-gray-700\">\r\n Amount:\r\n </span>\r\n <span className=\"font-bold text-xl text-[#7042D2]\">\r\n ${formatAmount(payment.totalAmount || payment.amount)}\r\n </span>\r\n </div>\r\n <div className=\"text-xs mt-1 text-right\">\r\n <span className=\"text-gray-500\">\r\n Payment ID: {payment.id ? payment.id.slice(0, 8) : ''}...\r\n </span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Debug Button - Only in debug mode */}\r\n {debug && (\r\n <div className=\"mb-2 text-right\">\r\n <button\r\n onClick={() => {\r\n console.log('=== DEBUG INFO ===');\r\n console.log('Current step:', step);\r\n console.log('Payment method:', selectedPaymentMethod);\r\n console.log('Wallet connection:', walletConnection);\r\n debugWalletEnvironment();\r\n }}\r\n className=\"text-xs bg-gray-200 p-1 rounded\"\r\n >\r\n Debug\r\n </button>\r\n </div>\r\n )}\r\n\r\n {/* Step: Select Currency/Network */}\r\n {step === 'select-currency' && (\r\n <div>\r\n <PaymentMethods \r\n onSelect={onPaymentMethodSelect} \r\n selected={selectedPaymentMethod}\r\n theme={theme}\r\n supportedNetworks={supportedNetworks}\r\n />\r\n \r\n {/* Proceed Button - Only show if a payment method is selected */}\r\n {selectedPaymentMethod && (\r\n <div className=\"mt-6\">\r\n <button\r\n onClick={() => {\r\n console.log('Proceed button clicked, calling onPaymentMethodSelect');\r\n onPaymentMethodSelect(selectedPaymentMethod);\r\n }}\r\n className=\"w-full py-3 px-4 bg-[#7042D2] hover:bg-[#7042D2] text-white font-medium rounded-lg transition-colors\"\r\n disabled={!selectedPaymentMethod}\r\n >\r\n Proceed with {selectedPaymentMethod.currency} on {getNetworkDisplayName(selectedPaymentMethod.network)}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Step: Confirm Payment */}\r\n {step === 'confirm' && selectedPaymentMethod && payment && (\r\n <div>\r\n <div className=\"p-4 rounded-lg mb-4 bg-gray-100\">\r\n <h3 className=\"text-lg font-medium mb-2 text-gray-800\">\r\n Payment Details\r\n </h3>\r\n <div className=\"space-y-2\">\r\n <div className=\"flex justify-between\">\r\n <span className=\"text-[#7042D2] font-semibold\">Currency:</span>\r\n <span className=\"font-medium\">{selectedPaymentMethod.currency}</span>\r\n </div>\r\n <div className=\"flex justify-between\">\r\n <span className=\"text-[#7042D2] font-semibold\">Network:</span>\r\n <span className=\"font-medium\">{getNetworkDisplayName(selectedPaymentMethod.network)}</span>\r\n </div>\r\n <div className=\"flex justify-between\">\r\n <span className=\"text-[#7042D2] font-semibold\">Fee:</span>\r\n <span className=\"font-medium\">1.75%</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Payment Method Tabs */}\r\n <div className=\"mb-4\">\r\n <div className=\"flex border-b border-gray-200\">\r\n <button\r\n onClick={() => setPaymentType('wallet')}\r\n className={`py-2 px-4 text-sm font-medium ${\r\n paymentType === 'wallet'\r\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\r\n : 'text-gray-500 hover:text-gray-700'\r\n }`}\r\n >\r\n Connect Wallet\r\n </button>\r\n <button\r\n onClick={() => setPaymentType('qrcode')}\r\n className={`py-2 px-4 text-sm font-medium ${\r\n paymentType === 'qrcode'\r\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\r\n : 'text-gray-500 hover:text-gray-700'\r\n }`}\r\n >\r\n QR Code\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {testMode ? (\r\n // Test mode payment option\r\n <div className=\"p-4 rounded-lg mb-4 bg-blue-50\">\r\n <div className=\"flex items-center\">\r\n <div className=\"bg-[#7042D2] rounded-full p-2 mr-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6 text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\r\n </svg>\r\n </div>\r\n <div>\r\n <h3 className=\"font-medium text-gray-800\">\r\n Test Mode Payment\r\n </h3>\r\n <p className=\"text-sm text-gray-600\">\r\n Click \"Pay Now\" to simulate a successful payment\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n ) : paymentType === 'qrcode' ? (\r\n // QR Code payment option\r\n <div className=\"mb-4\">\r\n <QRCode \r\n walletAddress={getWalletAddressForNetwork()} \r\n amount={payment.totalAmount || payment.amount}\r\n currency={selectedPaymentMethod.currency}\r\n network={selectedPaymentMethod.network}\r\n theme={theme}\r\n />\r\n </div>\r\n ) : (\r\n // Wallet connection option\r\n <div className=\"space-y-3 mb-4\">\r\n {supportedWallets.length === 0 ? (\r\n <div className=\"p-4 rounded-lg bg-yellow-50\">\r\n <div className=\"flex items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6 text-yellow-500 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\r\n </svg>\r\n <div>\r\n <h3 className=\"font-medium text-gray-800\">No Compatible Wallets</h3>\r\n <p className=\"text-sm text-gray-600\">\r\n No wallets detected for {getNetworkDisplayName(selectedPaymentMethod.network)} network\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n ) : (\r\n supportedWallets.map((walletType) => (\r\n <div key={walletType} className=\"p-4 rounded-lg bg-blue-50\">\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center\">\r\n <img \r\n src={getWalletIcon(walletType)} \r\n alt={getWalletDisplayName(walletType)}\r\n className=\"w-8 h-8 mr-3\"\r\n onError={(e) => {\r\n e.target.style.display = 'none';\r\n }}\r\n />\r\n <div>\r\n <h3 className=\"font-medium text-gray-800\">\r\n {getWalletDisplayName(walletType)}\r\n </h3>\r\n <p className=\"text-sm text-gray-600\">\r\n Pay with {getWalletDisplayName(walletType)}\r\n </p>\r\n </div>\r\n </div>\r\n \r\n {walletConnection?.walletType === walletType ? (\r\n <div className=\"flex items-center space-x-2\">\r\n <div className=\"w-2 h-2 bg-green-500 rounded-full\"></div>\r\n <span className=\"text-sm text-green-600\">Connected</span>\r\n </div>\r\n ) : (\r\n <button\r\n onClick={() => {\r\n console.log('Connect wallet button clicked for:', walletType);\r\n onConnectWallet(walletType);\r\n }}\r\n className=\"py-2 px-4 bg-[#7042D2] hover:bg-[#7042D2] text-white font-medium rounded-md text-sm\"\r\n >\r\n Connect\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n ))\r\n )}\r\n\r\n {/* Install wallet links for missing wallets */}\r\n <div className=\"space-y-2\">\r\n {Object.entries(availableWallets)\r\n .filter(([walletType, isAvailable]) => !isAvailable)\r\n .map(([walletType]) => (\r\n <div key={walletType} className=\"p-3 rounded-lg bg-gray-50\">\r\n <div className=\"flex items-center justify-between\">\r\n <span className=\"text-sm text-gray-600\">\r\n {getWalletDisplayName(walletType)} not detected\r\n </span>\r\n \r\n <a href={getWalletInstallUrl(walletType)}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-sm text-[#7042D2] hover:underline\"\r\n >\r\n Install\r\n </a>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Display any errors */}\r\n {error && (\r\n <div className=\"p-3 rounded-lg bg-red-50 mb-4 text-red-600 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n {/* Navigation buttons */}\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <button\r\n type=\"button\"\r\n onClick={onBack}\r\n className=\"w-full py-2 px-4 bg-gray-200 hover:bg-gray-300 text-[#7042D2] font-medium rounded-md\"\r\n >\r\n Back\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => onPayment(paymentType === 'qrcode')}\r\n className=\"w-full py-2 px-4 bg-[#7042D2] hover:bg-[#7042D2] text-white font-medium rounded-md\"\r\n disabled={!testMode && paymentType === 'wallet' && !walletConnection}\r\n >\r\n {paymentType === 'qrcode' ? 'I have sent the payment' : 'Pay Now'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Step: Processing */}\r\n {step === 'processing' && (\r\n <PaymentStatus \r\n status=\"processing\" \r\n theme={theme}\r\n message=\"Processing your payment...\"\r\n />\r\n )}\r\n\r\n {/* Step: Success */}\r\n {step === 'success' && (\r\n <div>\r\n <PaymentStatus \r\n status=\"success\" \r\n theme={theme}\r\n message=\"Payment successful!\"\r\n />\r\n {transactionHash && (\r\n <div className=\"mt-4 p-3 rounded-lg bg-gray-100\">\r\n <p className=\"text-xs text-gray-600 mb-1\">\r\n Transaction Hash:\r\n </p>\r\n <p className=\"text-sm font-mono break-all text-gray-800\">\r\n {formatTransactionHash(transactionHash)}\r\n </p>\r\n {selectedPaymentMethod && (\r\n <a \r\n href={`${getExplorerUrl(selectedPaymentMethod.network)}/${getExplorerPath(selectedPaymentMethod.network)}/${transactionHash}`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"text-xs text-[#7042D2] mt-2 inline-block\"\r\n >\r\n View on Explorer →\r\n </a>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Step: Error */}\r\n {step === 'error' && (\r\n <div>\r\n <PaymentStatus \r\n status=\"error\" \r\n theme={theme}\r\n message={error || \"An error occurred while processing your payment.\"}\r\n />\r\n <button\r\n type=\"button\"\r\n onClick={onBack}\r\n className=\"mt-4 w-full py-2 px-4 bg-gray-200 hover:bg-gray-300 text-gray-800 font-medium rounded-md\"\r\n >\r\n Try Again\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"text-center text-xs text-gray-500\">\r\n <p>Powered by <span className='text-[#7042D2]'>Coinley</span> - Secure Cryptocurrency Payments</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Helper functions\r\nconst getExplorerUrl = (network) => {\r\n const explorers = {\r\n ethereum: 'https://etherscan.io',\r\n bsc: 'https://bscscan.com',\r\n tron: 'https://tronscan.org',\r\n algorand: 'https://algoexplorer.io'\r\n };\r\n return explorers[network] || 'https://etherscan.io';\r\n};\r\n\r\nconst getExplorerPath = (network) => {\r\n const paths = {\r\n ethereum: 'tx',\r\n bsc: 'tx',\r\n tron: 'transaction',\r\n algorand: 'tx'\r\n };\r\n return paths[network] || 'tx';\r\n};\r\n\r\nexport default CoinleyModal;","// // src/components/CoinleyCheckout.jsx\r\n// import React, { forwardRef, useImperativeHandle, useState, useEffect } from 'react';\r\n// import { useCoinley } from '../context/CoinleyContext';\r\n// import { useTheme } from '../context/ThemeContext';\r\n// import CoinleyModal from './CoinleyModal';\r\n// import { createPayment, processPayment } from '../services/api';\r\n// import { \r\n// connectWallet, \r\n// sendTransaction, \r\n// detectWallets, \r\n// detectWalletsWithRetry,\r\n// getSupportedWalletsForNetwork,\r\n// debugWalletEnvironment,\r\n// NETWORK_TYPES,\r\n// WALLET_TYPES \r\n// } from '../services/walletService';\r\n\r\n// /**\r\n// * Enhanced Coinley checkout component with multi-network support\r\n// */\r\n// const CoinleyCheckout = forwardRef(({ \r\n// apiKey,\r\n// apiSecret,\r\n// apiUrl,\r\n// customerEmail,\r\n// merchantName = 'Merchant',\r\n// merchantWalletAddresses = {}, // Object with network-specific addresses\r\n// onSuccess,\r\n// onError,\r\n// onClose,\r\n// theme,\r\n// autoOpen = false,\r\n// debug = false,\r\n// testMode = false,\r\n// supportedNetworks = [], // Array of supported networks\r\n// preferredNetwork = NETWORK_TYPES.ETHEREUM,\r\n// preferredWallet = WALLET_TYPES.METAMASK\r\n// }, ref) => {\r\n// // Context\r\n// const coinleyContext = useCoinley();\r\n// const { theme: contextTheme } = useTheme();\r\n \r\n// // State\r\n// const [isOpen, setIsOpen] = useState(autoOpen);\r\n// const [payment, setPayment] = useState(null);\r\n// const [paymentStatus, setPaymentStatus] = useState('idle');\r\n// const [selectedPaymentMethod, setSelectedPaymentMethod] = useState(null);\r\n// const [error, setError] = useState(null);\r\n// const [transactionHash, setTransactionHash] = useState(null);\r\n// const [walletConnection, setWalletConnection] = useState(null);\r\n// const [availableWallets, setAvailableWallets] = useState({});\r\n// const [step, setStep] = useState('select-currency');\r\n \r\n// // Use the component props or fallback to context values\r\n// const effectiveApiKey = apiKey || coinleyContext?.apiKey;\r\n// const effectiveApiSecret = apiSecret || coinleyContext?.apiSecret;\r\n// const effectiveApiUrl = apiUrl || coinleyContext?.apiUrl;\r\n// const effectiveTheme = theme || contextTheme;\r\n// const effectiveDebug = debug || coinleyContext?.debug;\r\n// const effectiveSupportedNetworks = supportedNetworks.length > 0 \r\n// ? supportedNetworks \r\n// : [NETWORK_TYPES.ETHEREUM, NETWORK_TYPES.BSC, NETWORK_TYPES.TRON, NETWORK_TYPES.ALGORAND];\r\n\r\n// // Expose methods via ref\r\n// useImperativeHandle(ref, () => ({\r\n// open: (paymentDetails) => {\r\n// handleOpen(paymentDetails);\r\n// },\r\n// close: () => {\r\n// handleClose();\r\n// },\r\n// getPayment: () => payment,\r\n// getWalletConnection: () => walletConnection,\r\n// debugWallets: () => debugWalletEnvironment()\r\n// }));\r\n\r\n// // Debug logging helper\r\n// const log = (message, data) => {\r\n// if (effectiveDebug) {\r\n// console.log(`[Coinley SDK] ${message}`, data);\r\n// }\r\n// };\r\n\r\n// // Check available wallets on mount with retry\r\n// useEffect(() => {\r\n// if (typeof window !== 'undefined') {\r\n// const detectWalletsAsync = async () => {\r\n// // Use the retry version for more reliable detection\r\n// const wallets = await detectWalletsWithRetry(3, 1000);\r\n// setAvailableWallets(wallets);\r\n \r\n// log('Available wallets detected:', wallets);\r\n// };\r\n \r\n// detectWalletsAsync();\r\n// }\r\n// }, [effectiveDebug]);\r\n\r\n// // Handle opening the payment modal\r\n// const handleOpen = async (paymentDetails) => {\r\n// if (!paymentDetails || !paymentDetails.amount) {\r\n// setError('Payment amount is required');\r\n// if (onError) onError(new Error('Payment amount is required'));\r\n// return;\r\n// }\r\n\r\n// setPaymentStatus('loading');\r\n// setIsOpen(true);\r\n// setStep('select-currency');\r\n\r\n// try {\r\n// log('Creating payment with details:', paymentDetails);\r\n \r\n// // Create a payment on the Coinley backend\r\n// const paymentResponse = await createPayment({\r\n// amount: paymentDetails.amount,\r\n// currency: paymentDetails.currency || 'USDT',\r\n// network: paymentDetails.network || preferredNetwork,\r\n// customerEmail: paymentDetails.customerEmail || customerEmail,\r\n// callbackUrl: paymentDetails.callbackUrl,\r\n// metadata: paymentDetails.metadata || {},\r\n// merchantWalletAddresses: {\r\n// ...merchantWalletAddresses,\r\n// ...paymentDetails.merchantWalletAddresses\r\n// }\r\n// });\r\n\r\n// log('Payment created:', paymentResponse);\r\n \r\n// setPayment(paymentResponse.payment);\r\n// setPaymentStatus('idle');\r\n// setError(null);\r\n \r\n// log('Payment created and state updated');\r\n// } catch (err) {\r\n// log('Error creating payment:', err);\r\n// setError(err.message || 'Failed to create payment');\r\n// setPaymentStatus('error');\r\n// if (onError) onError(err);\r\n// }\r\n// };\r\n\r\n// // Handle closing the modal\r\n// const handleClose = () => {\r\n// setIsOpen(false);\r\n// setTransactionHash(null);\r\n// setWalletConnection(null);\r\n// setSelectedPaymentMethod(null);\r\n// setStep('select-currency');\r\n// if (onClose) onClose();\r\n// };\r\n\r\n// // Handle payment method selection\r\n// const handlePaymentMethodSelect = (paymentMethod) => {\r\n// console.log('=== PAYMENT METHOD SELECTION DEBUG ===');\r\n// console.log('1. Payment method selected:', paymentMethod);\r\n// console.log('2. Current step before:', step);\r\n \r\n// log('Payment method selected:', paymentMethod);\r\n// setSelectedPaymentMethod(paymentMethod);\r\n \r\n// // Move to confirm step after selection\r\n// setStep('confirm');\r\n \r\n// console.log('3. Step should now be: confirm');\r\n// console.log('=== END PAYMENT METHOD SELECTION DEBUG ===');\r\n// };\r\n\r\n// // Handle back navigation\r\n// const handleBack = () => {\r\n// if (step === 'confirm') {\r\n// setStep('select-currency');\r\n// setWalletConnection(null);\r\n// } else if (step === 'error') {\r\n// setStep('confirm');\r\n// }\r\n// };\r\n\r\n// // Enhanced wallet connection with retry and better debugging\r\n// const handleConnectWallet = async (walletType) => {\r\n// console.log('=== WALLET CONNECTION DEBUG ===');\r\n// console.log('1. Wallet type requested:', walletType);\r\n// console.log('2. Selected payment method:', selectedPaymentMethod);\r\n// console.log('3. Available wallets:', availableWallets);\r\n// console.log('4. Current step:', step);\r\n\r\n// if (!selectedPaymentMethod) {\r\n// console.error('No payment method selected');\r\n// setError('Please select a payment method first');\r\n// return;\r\n// }\r\n\r\n// try {\r\n// console.log('5. Attempting to connect wallet...');\r\n// setError(null); // Clear any previous errors\r\n \r\n// log('Connecting wallet:', { walletType, network: selectedPaymentMethod.network });\r\n \r\n// // Use the improved connectWallet function with retry (2 attempts)\r\n// const connection = await connectWallet(walletType, selectedPaymentMethod.network, 2);\r\n// setWalletConnection(connection);\r\n// setError(null);\r\n \r\n// console.log('6. Connection successful:', connection);\r\n// log('Wallet connected successfully:', connection);\r\n// } catch (err) {\r\n// console.error('7. Connection failed:', err);\r\n// log('Wallet connection error:', err);\r\n// setError(err.message || 'Failed to connect wallet');\r\n// }\r\n \r\n// console.log('=== END WALLET CONNECTION DEBUG ===');\r\n// };\r\n\r\n// // Handle payment submission\r\n// const handlePayment = async () => {\r\n// if (!payment || !selectedPaymentMethod) {\r\n// setError('Missing payment information');\r\n// return;\r\n// }\r\n\r\n// if (!walletConnection && !testMode) {\r\n// setError('Please connect your wallet first');\r\n// return;\r\n// }\r\n\r\n// log('Starting payment process...');\r\n// setPaymentStatus('loading');\r\n// setTransactionHash(null);\r\n// setStep('processing');\r\n\r\n// try {\r\n// let txHash;\r\n\r\n// if (testMode) {\r\n// // Test mode: Generate mock transaction\r\n// log('Test mode: Generating mock transaction...');\r\n// txHash = `test_${Date.now().toString(16)}_${Math.random().toString(16).substring(2, 10)}`;\r\n// } else {\r\n// // Real payment flow\r\n// const merchantAddress = merchantWalletAddresses[selectedPaymentMethod.network];\r\n// if (!merchantAddress) {\r\n// throw new Error(`No merchant wallet address configured for ${selectedPaymentMethod.network}`);\r\n// }\r\n\r\n// // Send transaction through wallet\r\n// log('Sending transaction through wallet...');\r\n \r\n// txHash = await sendTransaction(walletConnection, {\r\n// to: merchantAddress,\r\n// amount: payment.amount,\r\n// tokenAddress: selectedPaymentMethod.tokenConfig?.address,\r\n// tokenDecimals: selectedPaymentMethod.tokenConfig?.decimals,\r\n// currency: selectedPaymentMethod.currency,\r\n// network: selectedPaymentMethod.network\r\n// });\r\n// }\r\n\r\n// log('Transaction hash:', txHash);\r\n// setTransactionHash(txHash);\r\n\r\n// // Process the payment on the Coinley backend\r\n// log('Processing payment with backend...');\r\n// const processResponse = await processPayment({\r\n// paymentId: payment.id,\r\n// transactionHash: txHash,\r\n// network: selectedPaymentMethod.network,\r\n// currency: selectedPaymentMethod.currency,\r\n// senderAddress: walletConnection?.address\r\n// });\r\n\r\n// log('Payment processed successfully:', processResponse);\r\n\r\n// setPaymentStatus('success');\r\n// setStep('success');\r\n \r\n// // Call the onSuccess callback\r\n// if (onSuccess) {\r\n// log('Calling onSuccess callback...');\r\n// onSuccess(payment.id, txHash, {\r\n// network: selectedPaymentMethod.network,\r\n// currency: selectedPaymentMethod.currency,\r\n// amount: payment.amount\r\n// });\r\n// }\r\n\r\n// } catch (err) {\r\n// log('Payment error:', err);\r\n// setError(err.message || 'Failed to process payment');\r\n// setPaymentStatus('error');\r\n// setStep('error');\r\n// if (onError) onError(err);\r\n// }\r\n// };\r\n\r\n// // Get supported wallets for current network\r\n// const getSupportedWallets = () => {\r\n// if (!selectedPaymentMethod) return [];\r\n// return getSupportedWalletsForNetwork(selectedPaymentMethod.network);\r\n// };\r\n\r\n// return (\r\n// <>\r\n// {isOpen && (\r\n// <CoinleyModal\r\n// isOpen={isOpen}\r\n// onClose={handleClose}\r\n// payment={payment}\r\n// paymentStatus={paymentStatus}\r\n// selectedPaymentMethod={selectedPaymentMethod}\r\n// onPaymentMethodSelect={handlePaymentMethodSelect}\r\n// onPayment={handlePayment}\r\n// onBack={handleBack}\r\n// error={error}\r\n// theme={effectiveTheme}\r\n// merchantName={merchantName}\r\n// transactionHash={transactionHash}\r\n// walletConnection={walletConnection}\r\n// onConnectWallet={handleConnectWallet}\r\n// testMode={testMode}\r\n// supportedNetworks={effectiveSupportedNetworks}\r\n// availableWallets={availableWallets}\r\n// supportedWallets={getSupportedWallets()}\r\n// step={step}\r\n// merchantWalletAddresses={merchantWalletAddresses}\r\n// debug={effectiveDebug}\r\n// />\r\n// )}\r\n// </>\r\n// );\r\n// });\r\n\r\n// // Add display name for better debugging\r\n// CoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\n// export default CoinleyCheckout;\r\n\r\n\r\n\r\n\r\n\r\n// src/components/CoinleyCheckout.jsx - FIXED VERSION\r\nimport React, { forwardRef, useImperativeHandle, useState, useEffect } from 'react';\r\nimport { useCoinley } from '../context/CoinleyContext';\r\nimport { useTheme } from '../context/ThemeContext';\r\nimport CoinleyModal from './CoinleyModal';\r\nimport { createPayment, processPayment, getMerchantWallets } from '../services/api';\r\nimport { \r\n connectWallet, \r\n sendTransaction, \r\n detectWallets, \r\n detectWalletsWithRetry,\r\n getSupportedWalletsForNetwork,\r\n debugWalletEnvironment,\r\n NETWORK_TYPES,\r\n WALLET_TYPES \r\n} from '../services/walletService';\r\n\r\n/**\r\n * Fixed Coinley checkout component with proper wallet address resolution\r\n */\r\nconst CoinleyCheckout = forwardRef(({ \r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n customerEmail,\r\n merchantName = 'Merchant',\r\n merchantWalletAddresses = {}, // This will be overridden by backend data\r\n onSuccess,\r\n onError,\r\n onClose,\r\n theme,\r\n autoOpen = false,\r\n debug = false,\r\n testMode = false,\r\n supportedNetworks = [],\r\n preferredNetwork = NETWORK_TYPES.ETHEREUM,\r\n preferredWallet = WALLET_TYPES.METAMASK\r\n}, ref) => {\r\n // Context\r\n const coinleyContext = useCoinley();\r\n const { theme: contextTheme } = useTheme();\r\n \r\n // State\r\n const [isOpen, setIsOpen] = useState(autoOpen);\r\n const [payment, setPayment] = useState(null);\r\n const [paymentStatus, setPaymentStatus] = useState('idle');\r\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState(null);\r\n const [error, setError] = useState(null);\r\n const [transactionHash, setTransactionHash] = useState(null);\r\n const [walletConnection, setWalletConnection] = useState(null);\r\n const [availableWallets, setAvailableWallets] = useState({});\r\n const [step, setStep] = useState('select-currency');\r\n const [actualMerchantWallets, setActualMerchantWallets] = useState({});\r\n \r\n // Use the component props or fallback to context values\r\n const effectiveApiKey = apiKey || coinleyContext?.apiKey;\r\n const effectiveApiSecret = apiSecret || coinleyContext?.apiSecret;\r\n const effectiveApiUrl = apiUrl || coinleyContext?.apiUrl;\r\n const effectiveTheme = theme || contextTheme;\r\n const effectiveDebug = debug || coinleyContext?.debug;\r\n const effectiveSupportedNetworks = supportedNetworks.length > 0 \r\n ? supportedNetworks \r\n : [NETWORK_TYPES.ETHEREUM, NETWORK_TYPES.BSC, NETWORK_TYPES.TRON, NETWORK_TYPES.ALGORAND];\r\n\r\n // Debug logging helper\r\n const log = (message, data) => {\r\n if (effectiveDebug) {\r\n console.log(`[Coinley SDK] ${message}`, data);\r\n }\r\n };\r\n\r\n // Fetch merchant wallets on component mount\r\n useEffect(() => {\r\n const fetchMerchantWallets = async () => {\r\n try {\r\n log('Fetching merchant wallet addresses from backend...');\r\n const wallets = await getMerchantWallets();\r\n setActualMerchantWallets(wallets);\r\n log('Merchant wallets fetched successfully:', wallets);\r\n } catch (error) {\r\n console.error('Failed to fetch merchant wallets:', error);\r\n // Fallback to provided wallets\r\n setActualMerchantWallets(merchantWalletAddresses);\r\n }\r\n };\r\n\r\n if (effectiveApiKey && effectiveApiSecret) {\r\n fetchMerchantWallets();\r\n }\r\n }, [effectiveApiKey, effectiveApiSecret, merchantWalletAddresses]);\r\n\r\n // Check available wallets on mount with retry\r\n useEffect(() => {\r\n if (typeof window !== 'undefined') {\r\n const detectWalletsAsync = async () => {\r\n const wallets = await detectWalletsWithRetry(3, 1000);\r\n setAvailableWallets(wallets);\r\n log('Available wallets detected:', wallets);\r\n };\r\n \r\n detectWalletsAsync();\r\n }\r\n }, [effectiveDebug]);\r\n\r\n // Expose methods via ref\r\n useImperativeHandle(ref, () => ({\r\n open: (paymentDetails) => {\r\n handleOpen(paymentDetails);\r\n },\r\n close: () => {\r\n handleClose();\r\n },\r\n getPayment: () => payment,\r\n getWalletConnection: () => walletConnection,\r\n debugWallets: () => debugWalletEnvironment(),\r\n getMerchantWallets: () => actualMerchantWallets\r\n }));\r\n\r\n // Handle opening the payment modal\r\n const handleOpen = async (paymentDetails) => {\r\n if (!paymentDetails || !paymentDetails.amount) {\r\n setError('Payment amount is required');\r\n if (onError) onError(new Error('Payment amount is required'));\r\n return;\r\n }\r\n\r\n setPaymentStatus('loading');\r\n setIsOpen(true);\r\n setStep('select-currency');\r\n\r\n try {\r\n log('Creating payment with details:', paymentDetails);\r\n \r\n // Ensure we have the latest merchant wallet addresses\r\n let walletAddresses = actualMerchantWallets;\r\n if (Object.keys(walletAddresses).length === 0) {\r\n log('No wallet addresses found, fetching from backend...');\r\n walletAddresses = await getMerchantWallets();\r\n setActualMerchantWallets(walletAddresses);\r\n }\r\n\r\n log('Using wallet addresses:', walletAddresses);\r\n\r\n // Create a payment on the Coinley backend\r\n const paymentResponse = await createPayment({\r\n amount: paymentDetails.amount,\r\n currency: paymentDetails.currency || 'USDT',\r\n network: paymentDetails.network || preferredNetwork,\r\n customerEmail: paymentDetails.customerEmail || customerEmail,\r\n callbackUrl: paymentDetails.callbackUrl,\r\n metadata: {\r\n ...paymentDetails.metadata,\r\n merchantWalletAddresses: walletAddresses\r\n },\r\n merchantWalletAddresses: walletAddresses\r\n });\r\n\r\n log('Payment created:', paymentResponse);\r\n \r\n setPayment(paymentResponse.payment);\r\n setPaymentStatus('idle');\r\n setError(null);\r\n \r\n log('Payment created and state updated');\r\n } catch (err) {\r\n log('Error creating payment:', err);\r\n setError(err.message || 'Failed to create payment');\r\n setPaymentStatus('error');\r\n if (onError) onError(err);\r\n }\r\n };\r\n\r\n // Handle closing the modal\r\n const handleClose = () => {\r\n setIsOpen(false);\r\n setTransactionHash(null);\r\n setWalletConnection(null);\r\n setSelectedPaymentMethod(null);\r\n setStep('select-currency');\r\n if (onClose) onClose();\r\n };\r\n\r\n // Handle payment method selection\r\n const handlePaymentMethodSelect = (paymentMethod) => {\r\n console.log('=== PAYMENT METHOD SELECTION DEBUG ===');\r\n console.log('1. Payment method selected:', paymentMethod);\r\n console.log('2. Current step before:', step);\r\n \r\n log('Payment method selected:', paymentMethod);\r\n setSelectedPaymentMethod(paymentMethod);\r\n \r\n // Move to confirm step after selection\r\n setStep('confirm');\r\n \r\n console.log('3. Step should now be: confirm');\r\n console.log('=== END PAYMENT METHOD SELECTION DEBUG ===');\r\n };\r\n\r\n // Handle back navigation\r\n const handleBack = () => {\r\n if (step === 'confirm') {\r\n setStep('select-currency');\r\n setWalletConnection(null);\r\n } else if (step === 'error') {\r\n setStep('confirm');\r\n }\r\n };\r\n\r\n // Enhanced wallet connection with retry and better debugging\r\n const handleConnectWallet = async (walletType) => {\r\n console.log('=== WALLET CONNECTION DEBUG ===');\r\n console.log('1. Wallet type requested:', walletType);\r\n console.log('2. Selected payment method:', selectedPaymentMethod);\r\n console.log('3. Available wallets:', availableWallets);\r\n console.log('4. Current step:', step);\r\n\r\n if (!selectedPaymentMethod) {\r\n console.error('No payment method selected');\r\n setError('Please select a payment method first');\r\n return;\r\n }\r\n\r\n try {\r\n console.log('5. Attempting to connect wallet...');\r\n setError(null); // Clear any previous errors\r\n \r\n log('Connecting wallet:', { walletType, network: selectedPaymentMethod.network });\r\n \r\n const connection = await connectWallet(walletType, selectedPaymentMethod.network, 2);\r\n setWalletConnection(connection);\r\n setError(null);\r\n \r\n console.log('6. Connection successful:', connection);\r\n log('Wallet connected successfully:', connection);\r\n } catch (err) {\r\n console.error('7. Connection failed:', err);\r\n log('Wallet connection error:', err);\r\n setError(err.message || 'Failed to connect wallet');\r\n }\r\n \r\n console.log('=== END WALLET CONNECTION DEBUG ===');\r\n };\r\n\r\n // Handle payment submission\r\n const handlePayment = async () => {\r\n if (!payment || !selectedPaymentMethod) {\r\n setError('Missing payment information');\r\n return;\r\n }\r\n\r\n if (!walletConnection && !testMode) {\r\n setError('Please connect your wallet first');\r\n return;\r\n }\r\n\r\n log('Starting payment process...');\r\n setPaymentStatus('loading');\r\n setTransactionHash(null);\r\n setStep('processing');\r\n\r\n try {\r\n let txHash;\r\n\r\n if (testMode) {\r\n // Test mode: Generate mock transaction\r\n log('Test mode: Generating mock transaction...');\r\n txHash = `test_${Date.now().toString(16)}_${Math.random().toString(16).substring(2, 10)}`;\r\n } else {\r\n // Real payment flow - get merchant address from payment data or actual wallets\r\n let merchantAddress;\r\n \r\n // Try to get address from payment data first\r\n if (payment.recipientWallet) {\r\n merchantAddress = payment.recipientWallet;\r\n } else if (actualMerchantWallets[selectedPaymentMethod.network]) {\r\n merchantAddress = actualMerchantWallets[selectedPaymentMethod.network];\r\n } else {\r\n throw new Error(`No merchant wallet address found for ${selectedPaymentMethod.network} network`);\r\n }\r\n\r\n log('Using merchant address for payment:', merchantAddress);\r\n\r\n // Send transaction through wallet\r\n log('Sending transaction through wallet...');\r\n \r\n txHash = await sendTransaction(walletConnection, {\r\n to: merchantAddress,\r\n amount: payment.totalAmount || payment.amount,\r\n tokenAddress: selectedPaymentMethod.tokenConfig?.address,\r\n tokenDecimals: selectedPaymentMethod.tokenConfig?.decimals,\r\n currency: selectedPaymentMethod.currency,\r\n network: selectedPaymentMethod.network\r\n });\r\n }\r\n\r\n log('Transaction hash:', txHash);\r\n setTransactionHash(txHash);\r\n\r\n // Process the payment on the Coinley backend\r\n log('Processing payment with backend...');\r\n const processResponse = await processPayment({\r\n paymentId: payment.id,\r\n transactionHash: txHash,\r\n network: selectedPaymentMethod.network,\r\n currency: selectedPaymentMethod.currency,\r\n senderAddress: walletConnection?.address\r\n });\r\n\r\n log('Payment processed successfully:', processResponse);\r\n\r\n setPaymentStatus('success');\r\n setStep('success');\r\n \r\n // Call the onSuccess callback\r\n if (onSuccess) {\r\n log('Calling onSuccess callback...');\r\n onSuccess(payment.id, txHash, {\r\n network: selectedPaymentMethod.network,\r\n currency: selectedPaymentMethod.currency,\r\n amount: payment.totalAmount || payment.amount\r\n });\r\n }\r\n\r\n } catch (err) {\r\n log('Payment error:', err);\r\n setError(err.message || 'Failed to process payment');\r\n setPaymentStatus('error');\r\n setStep('error');\r\n if (onError) onError(err);\r\n }\r\n };\r\n\r\n // Get supported wallets for current network\r\n const getSupportedWallets = () => {\r\n if (!selectedPaymentMethod) return [];\r\n return getSupportedWalletsForNetwork(selectedPaymentMethod.network);\r\n };\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <CoinleyModal\r\n isOpen={isOpen}\r\n onClose={handleClose}\r\n payment={payment}\r\n paymentStatus={paymentStatus}\r\n selectedPaymentMethod={selectedPaymentMethod}\r\n onPaymentMethodSelect={handlePaymentMethodSelect}\r\n onPayment={handlePayment}\r\n onBack={handleBack}\r\n error={error}\r\n theme={effectiveTheme}\r\n merchantName={merchantName}\r\n transactionHash={transactionHash}\r\n walletConnection={walletConnection}\r\n onConnectWallet={handleConnectWallet}\r\n testMode={testMode}\r\n supportedNetworks={effectiveSupportedNetworks}\r\n availableWallets={availableWallets}\r\n supportedWallets={getSupportedWallets()}\r\n step={step}\r\n merchantWalletAddresses={actualMerchantWallets}\r\n debug={effectiveDebug}\r\n />\r\n )}\r\n </>\r\n );\r\n});\r\n\r\n// Add display name for better debugging\r\nCoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\nexport default CoinleyCheckout;","// src/index.js - FIXED EXPORTS\r\n// Import styles first\r\nimport './styles.css';\r\n\r\n// Export wallet service utilities and constants\r\nexport {\r\n connectWallet,\r\n sendTransaction,\r\n detectWallets,\r\n getSupportedWalletsForNetwork,\r\n getWalletInstallUrl,\r\n NETWORK_TYPES,\r\n WALLET_TYPES,\r\n TOKEN_CONFIG,\r\n NETWORK_CONFIG\r\n} from './services/walletService';\r\n\r\n// Export API functions (FIXED - removed getMerchantProfile)\r\nexport {\r\n createPayment,\r\n getPayment,\r\n processPayment,\r\n getSupportedNetworks,\r\n getMerchantWallets, // This is the correct export name\r\n validateWalletAddress,\r\n generateMockTransactionHash\r\n} from './services/api';\r\n\r\n// Export context providers\r\nexport { ThemeProvider } from './context/ThemeContext';\r\nexport { CoinleyProvider, useCoinley } from './context/CoinleyContext';\r\n\r\n// Export components\r\nexport { default as QRCode } from './components/QRCode';\r\nexport { default as PaymentStatus } from './components/PaymentStatus';\r\nexport { default as PaymentMethods } from './components/PaymentMethods';\r\nexport { default as CoinleyModal } from './components/CoinleyModal';\r\nexport { default as CoinleyCheckout } from './components/CoinleyCheckout';\r\n\r\n// Export constants\r\nexport const DEFAULT_CONFIG = {\r\n apiUrl: 'https://coinleyserver-production.up.railway.app',\r\n debug: false,\r\n testMode: false,\r\n theme: 'light',\r\n supportedNetworks: ['ethereum', 'bsc', 'tron', 'algorand']\r\n};"],"names":["k","bytes","BN_0","BN_1","mask","output","_guard","b","_format","passProperties","names","args","_names","_data","_a","n","l","_offset","throwError","internal","result","value","type","indexed","name","p","inputs","PanicReasons","f","m","blockNumber","receipt","_iface","fragment","t","listener","addr","target","code","ethers.parseUnits","ethers.Contract","require$$0","jsxRuntimeModule","jsx","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","_QrCode","version","assert","_QrSegment","currency","network","amount","jsxs","error"],"mappings":"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,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GAAG;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAIvC,OAAO,QAAQ,GAAG;AAAE,WAAOA,IAAE,GAAG,GA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E,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GAAG;AAAE,WAAO,EAAE,GAAG,EAAE;AAAA,EAAI;AAAA;AAAA;AAAA;AAAA,EAItC,OAAO,QAAQ,GA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,39,42]}