{"version":3,"file":"solana-operations-CHgW7Pue.mjs","sources":["../.rollup-tmp/client/solana-operations.js"],"sourcesContent":["import { Buffer } from 'buffer';\nimport { getTransactionJson } from './solana-transaction-read';\nexport { getTransactionJson, SOLANA_MAX_SUPPORTED_TRANSACTION_VERSION } from './solana-transaction-read';\nimport { getConfig } from './config';\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n/**\n * Minimal base58 encoder, used ONLY to derive a Solana transaction signature\n * from already-signed bytes. Core deliberately does not take a `bs58`\n * dependency for eighteen lines of arithmetic.\n */\nexport function encodeBase58(bytes) {\n    if (bytes.length === 0)\n        return '';\n    const digits = [0];\n    for (const byte of bytes) {\n        let carry = byte;\n        for (let i = 0; i < digits.length; i++) {\n            carry += digits[i] << 8;\n            digits[i] = carry % 58;\n            carry = (carry / 58) | 0;\n        }\n        while (carry > 0) {\n            digits.push(carry % 58);\n            carry = (carry / 58) | 0;\n        }\n    }\n    let out = '';\n    for (let i = 0; i < bytes.length && bytes[i] === 0; i++)\n        out += BASE58_ALPHABET[0];\n    for (let i = digits.length - 1; i >= 0; i--)\n        out += BASE58_ALPHABET[digits[i]];\n    return out;\n}\n/**\n * Derive the transaction signature from the SIGNED bytes, before broadcasting.\n *\n * Without this the signature is only learned when `sendRawTransaction` resolves,\n * so an RPC that accepted the bytes but whose response was lost throws with\n * nothing recorded — and a retry builds a DIFFERENT transaction that can land\n * beside the first.\n */\n/** true when the base64 wire is a SIMD-0385 v1 transaction (first byte 0x81). */\nexport function isTransactionV1Base64(serializedTransaction) {\n    try {\n        const head = Buffer.from(serializedTransaction.slice(0, 4), 'base64');\n        return head.length > 0 && head[0] === 0x81;\n    }\n    catch (_a) {\n        return false;\n    }\n}\nexport function deriveTransactionSignature(signedTransaction) {\n    var _a;\n    const signature = (_a = signedTransaction.signatures) === null || _a === void 0 ? void 0 : _a[0];\n    if (!signature || signature.length === 0) {\n        throw new Error('Signed Solana transaction carries no signature to broadcast');\n    }\n    if (signature.every(byte => byte === 0)) {\n        throw new Error('Signed Solana transaction carries an empty fee-payer signature');\n    }\n    return encodeBase58(Uint8Array.from(signature));\n}\n/**\n * Whether a send failure PROVES the transaction was never accepted. A preflight\n * rejection, a signature-verification failure, or an oversized/invalid\n * transaction is definitive and keeps throwing. A transport failure (timeout,\n * socket reset, aborted fetch) is ambiguous — the node may hold the bytes — and\n * must resolve as `submitted` carrying the pre-derived signature.\n *\n * \"already processed\" is deliberately NOT definitive: it means the signature\n * landed, which is the opposite of a failure.\n */\nconst DEFINITIVE_SEND_FAILURE_MARKERS = [\n    'simulation failed',\n    'preflight',\n    'blockhash not found',\n    'signature verification failure',\n    'transaction too large',\n    'invalid transaction',\n    'insufficient funds for rent',\n    'attempt to debit an account but found no record of a prior credit',\n];\nexport function isDefinitiveSolanaSendFailure(error) {\n    var _a, _b, _c;\n    const err = error;\n    if (err && Array.isArray(err.logs))\n        return true;\n    if (err && String((_a = err.name) !== null && _a !== void 0 ? _a : '') === 'SendTransactionError')\n        return true;\n    const message = String((_c = (_b = err === null || err === void 0 ? void 0 : err.message) !== null && _b !== void 0 ? _b : err) !== null && _c !== void 0 ? _c : '').toLowerCase();\n    if (!message)\n        return false;\n    if (message.includes('already been processed') || message.includes('already processed'))\n        return false;\n    return DEFINITIVE_SEND_FAILURE_MARKERS.some(marker => message.includes(marker));\n}\n// The Bounded program's own rule/invariant rejection, recognized from its\n// on-chain logs. On a rule-false the program logs \"<Create|Update|Delete> rule\n// failed for path ...\" then returns Unauthorized<Create|Update|Delete>; a cap /\n// declared-invariant breach returns OnchainInvariantViolation. Anchor prints the\n// error name + message into the logs even though the client IDL omits these\n// codes, so the log text is the reliable signal.\nconst BOUNDED_RULE_REJECTION_MARKERS = [\n    /(?:Create|Update|Delete) rule failed for path/i,\n    /Unauthorized(?:Create|Update|Delete)\\b/,\n    /OnchainInvariantViolation/,\n    /invariant postcondition failed/i,\n];\nfunction boundedRejectionHaystack(error, extraLogs) {\n    const err = error;\n    const parts = [];\n    for (const source of [err === null || err === void 0 ? void 0 : err.logs, err === null || err === void 0 ? void 0 : err.transactionLogs, extraLogs]) {\n        if (Array.isArray(source))\n            parts.push(...source.map((line) => String(line)));\n        else if (typeof source === 'string')\n            parts.push(source);\n    }\n    if (err === null || err === void 0 ? void 0 : err.message)\n        parts.push(String(err.message));\n    return parts.join('\\n');\n}\n/**\n * Whether a definitive Solana send/confirm failure is the BOUNDED PROGRAM\n * rejecting the write in simulation - a policy rule or a cap/invariant check -\n * as opposed to an infra failure (blockhash, fees, account not found). Only the\n * former is a stale-mirror race and safe to advertise as retryable.\n */\nexport function isBoundedOnchainRuleRejection(error, extraLogs) {\n    const hay = boundedRejectionHaystack(error, extraLogs);\n    return !!hay && BOUNDED_RULE_REJECTION_MARKERS.some((re) => re.test(hay));\n}\n/**\n * A Bounded on-chain rule/invariant rejection surfaced with a message the caller\n * can act on. This write already PASSED the off-chain preflight (otherwise it\n * would have been declined before a transaction was ever built), so the program\n * disagreeing here means the authoritative on-chain state is ahead of a\n * not-yet-converged read mirror - re-read and retry. If it keeps failing, the\n * rule is genuinely unsatisfied (the cap is truly exceeded, or the write is not\n * authorized). Carries the original error as `cause` and the raw program logs.\n */\nexport class BoundedOnchainRuleRejection extends Error {\n    constructor(cause, extraLogs) {\n        super('The Bounded program rejected this write on-chain (a policy rule or cap/invariant check). ' +\n            'The off-chain preflight had already passed, so the authoritative on-chain state is ahead of a ' +\n            'not-yet-converged read mirror: re-read and retry. If it persists, the rule is genuinely failing ' +\n            '(the cap is truly exceeded, or the write is not authorized).');\n        this.boundedRuleRejection = true;\n        this.retryable = true;\n        this.name = 'BoundedOnchainRuleRejection';\n        this.cause = cause;\n        const err = cause;\n        const logs = [];\n        for (const source of [err === null || err === void 0 ? void 0 : err.logs, err === null || err === void 0 ? void 0 : err.transactionLogs, extraLogs]) {\n            if (Array.isArray(source))\n                logs.push(...source.map((line) => String(line)));\n        }\n        this.logs = logs;\n    }\n}\nexport function errorText(error) {\n    const message = error === null || error === void 0 ? void 0 : error.message;\n    return typeof message === 'string' && message.length > 0 ? message : String(error);\n}\nconst BOUNDED_PROGRAM_MAINNET = ['open', 'Tv7fbpYSseNHYmCZFZ1CZgj4r8D9fKNgEz1qo6F'].join('');\nconst BOUNDED_PROGRAM_DEVNET = ['open', 'Tv7fbpYSseNHYmCZFZ1CZgj4r8D9fKNgEz1qo6F'].join('');\nconst COMPUTE_BUDGET_PROGRAM = 'ComputeBudget111111111111111111111111111111';\nconst SYSTEM_PROGRAM_ID = '11111111111111111111111111111111';\n// SPL Associated Token program and the two SPL Token programs it may create an\n// account under. The server builder compiles idempotent ATA-create setup\n// instructions ahead of the Bounded write for every ATA-creating plugin.\nconst ASSOCIATED_TOKEN_PROGRAM_ID = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';\nconst TOKEN_PROGRAM_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';\nconst TOKEN_2022_PROGRAM_ID = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';\nconst SPL_TOKEN_PROGRAM_IDS = new Set([TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID]);\n// Idempotent ATA create carries a single instruction byte 0x01 (CreateIdempotent)\n// and exactly six accounts: funding, ATA, owner, mint, system program, token\n// program.\nconst ATA_CREATE_IDEMPOTENT_DISCRIMINATOR = 1;\nconst ATA_CREATE_ACCOUNT_COUNT = 6;\n// System Program `transfer` is instruction index 2 (u32 LE) followed by a u64\n// lamports amount: a 12-byte data payload over exactly two accounts.\nconst SYSTEM_TRANSFER_INSTRUCTION_INDEX = 2;\nconst SYSTEM_TRANSFER_DATA_LENGTH = 12;\nconst SYSTEM_TRANSFER_ACCOUNT_COUNT = 2;\n// Gas-sponsorship top-up cap. Mirrors the server builder's ATA-inclusive\n// absolute maximum (0.05 SOL); the fee payer (the gas sponsor) can only move its\n// OWN lamports up to this bound, and only to a co-signing account.\nconst SPONSOR_TOPUP_MAX_LAMPORTS = BigInt(50000000);\n// The four setup/write programs a server-built transaction may reference. System\n// and Associated-Token are typed-validated per instruction below; a bare\n// presence in this set is NOT sufficient authorization.\nconst ALLOWED_SERVER_TX_PROGRAMS = new Set([\n    BOUNDED_PROGRAM_MAINNET,\n    BOUNDED_PROGRAM_DEVNET,\n    COMPUTE_BUDGET_PROGRAM,\n    SYSTEM_PROGRAM_ID,\n    ASSOCIATED_TOKEN_PROGRAM_ID,\n]);\n// Canonical set_documents discriminator (single wire format: ra_indices Vec<u8>).\nconst SET_DOCUMENTS_DISCRIMINATOR = '79,46,72,73,24,79,66,245';\nconst ALLOWED_BOUNDED_SET_DISCRIMINATORS = new Set([\n    SET_DOCUMENTS_DISCRIMINATOR,\n]);\nclass BorshCursor {\n    constructor(data, offset, label) {\n        this.data = data;\n        this.offset = offset;\n        this.label = label;\n    }\n    requireBytes(length, field) {\n        if (this.offset + length > this.data.length) {\n            throw new Error(`${this.label} has malformed Bounded instruction data while reading ${field}`);\n        }\n    }\n    readU8(field) { this.requireBytes(1, field); return this.data[this.offset++]; }\n    readU32(field) {\n        this.requireBytes(4, field);\n        const value = this.data[this.offset] | (this.data[this.offset + 1] << 8) |\n            (this.data[this.offset + 2] << 16) | (this.data[this.offset + 3] << 24);\n        this.offset += 4;\n        return value >>> 0;\n    }\n    skip(length, field) { this.requireBytes(length, field); this.offset += length; }\n    readBytes(length, field) {\n        this.requireBytes(length, field);\n        const raw = this.data.slice(this.offset, this.offset + length);\n        this.offset += length;\n        return raw;\n    }\n    readString(field) {\n        const length = this.readU32(`${field} length`);\n        return Buffer.from(this.readBytes(length, field)).toString('utf8');\n    }\n    readLengthPrefixedBytes(field) {\n        return this.readBytes(this.readU32(`${field} length`), field);\n    }\n    isAtEnd() { return this.offset === this.data.length; }\n}\nfunction readBoundedFieldValue(cursor) {\n    const option = cursor.readU8('operation value option');\n    if (option === 0)\n        return null;\n    if (option !== 1)\n        throw new Error('Server transaction has malformed Bounded field value option');\n    const variant = cursor.readU8('operation value variant');\n    if (variant === 0)\n        return { variant: 'u64', value: readU64LE(cursor.readBytes(8, 'operation numeric value'), 0) };\n    if (variant === 1)\n        return { variant: 'i64', value: readI64LE(cursor.readBytes(8, 'operation numeric value'), 0) };\n    if (variant === 2)\n        return { variant: 'bool', value: cursor.readU8('operation bool value') !== 0 };\n    if (variant === 3)\n        return { variant: 'string', value: cursor.readString('operation string value') };\n    if (variant === 4)\n        return { variant: 'address', value: cursor.readBytes(32, 'operation address value') };\n    throw new Error(`Server transaction has unsupported Bounded field value variant: ${variant}`);\n}\nfunction normalizeOnchainPath(path) {\n    let normalized = path.startsWith('/') ? path.slice(1) : path;\n    if (normalized.endsWith('*') && normalized.length > 1)\n        normalized = normalized.slice(0, -1);\n    if (normalized.endsWith('/'))\n        normalized = normalized.slice(0, -1);\n    return normalized;\n}\nfunction parseBoundedSetDocumentsInstruction(data, label) {\n    if (data.length < 8)\n        throw new Error(`${label} has malformed Bounded instruction data`);\n    const discriminator = Array.from(data.slice(0, 8)).join(',');\n    if (!ALLOWED_BOUNDED_SET_DISCRIMINATORS.has(discriminator)) {\n        throw new Error(`${label} contains unsupported Bounded instruction`);\n    }\n    const cursor = new BorshCursor(data, 8, label);\n    const appId = cursor.readString('appId');\n    const documents = [];\n    const documentCount = cursor.readU32('documents length');\n    for (let i = 0; i < documentCount; i++) {\n        const path = normalizeOnchainPath(cursor.readString('document path'));\n        const operations = [];\n        const operationCount = cursor.readU32('operations length');\n        for (let j = 0; j < operationCount; j++) {\n            const key = cursor.readString('operation key');\n            const value = readBoundedFieldValue(cursor);\n            const kind = cursor.readU8('operation kind');\n            operations.push({ key, value, kind });\n        }\n        documents.push({ path, operations });\n    }\n    const deletePaths = [];\n    const deleteCount = cursor.readU32('delete paths length');\n    for (let i = 0; i < deleteCount; i++)\n        deletePaths.push(normalizeOnchainPath(cursor.readString('delete path')));\n    const txData = [];\n    const txDataCount = cursor.readU32('txData length');\n    for (let i = 0; i < txDataCount; i++) {\n        txData.push({\n            pluginFunctionKey: cursor.readString('txData plugin function key'),\n            payload: cursor.readLengthPrefixedBytes('txData bytes'),\n            raIndices: cursor.readLengthPrefixedBytes('txData raIndices'),\n        });\n    }\n    const simulateByte = cursor.readU8('simulate');\n    if (simulateByte !== 0 && simulateByte !== 1)\n        throw new Error(`${label} has malformed Bounded simulate flag`);\n    if (!cursor.isAtEnd())\n        throw new Error(`${label} has trailing Bounded instruction data`);\n    return { appId, documents, deletePaths, txData, simulate: simulateByte === 1 };\n}\n// ---------------------------------------------------------------------------\n// OA-0001: signing-intent binding\n//\n// The wallet must sign ONLY the state transition the caller actually requested.\n// The expected intent below is derived from the CLIENT'S OWN write request - the\n// one ground truth a tampered builder response cannot change - and the parsed\n// instruction must match it field for field before any signer is invoked.\n// ---------------------------------------------------------------------------\n/** The program's field-operation kinds (programs/bounded; mirrored by the worker's solana-tx-builder). */\nconst FIELD_OPERATION_WRITE = 0;\nconst FIELD_OPERATION_DELETE = 1;\nconst FIELD_OPERATION_TIMESTAMP = 2;\nconst FIELD_OPERATION_INCREMENT = 3;\n// Keys the worker drops from a client write by NAME before encoding\n// (realtime-worker types.ts: SYSTEM_FIELDS without the `_`-prefixed entries the\n// client already strips, plus the prototype-pollution DANGEROUS_KEYS). The\n// expected model must skip exactly the keys the honest builder skips, or a\n// legitimate write would be rejected.\nconst SERVER_DROPPED_FIELD_KEYS = new Set([\n    'pathId',\n    'relativePath',\n    'absolutePath',\n    '__proto__',\n    'constructor',\n    'prototype',\n]);\n// The worker resolves {operation:'time',value:'now'} into this sentinel and the\n// onchain encoder maps the sentinel to a TIMESTAMP op - including when a caller\n// writes the literal string, so the expected model must mirror that quirk.\nconst TIME_NOW_SENTINEL = '__TIME_NOW__';\n/**\n * Build the expected write intent from the exact request the client POSTed\n * (`[{ destinationPath, document }]`, a `null` document being a delete).\n *\n * Each document is JSON-round-tripped first: the server parsed the SERIALIZED\n * body, so the intent must be derived from the same bytes - this drops\n * `undefined` values, turns `NaN`/`Infinity` into `null`, and normalizes key\n * order exactly as the server's JSON.parse did.\n *\n * Operation order mirrors the worker's transform (normalizeWriteBody ->\n * resolveOperationFields -> documentToOperations): plain fields in request key\n * order, then increment fields appended in the order they appeared. The\n * comparison is therefore ORDERED, not a multiset - the honest builder is\n * deterministic given the request, and ordering additionally catches\n * duplicate-path and reordering tampering that the retired set comparison hid.\n */\nexport function buildExpectedWriteIntent(documents) {\n    const intentDocuments = [];\n    const deletePaths = [];\n    for (const entry of documents) {\n        if (entry.document == null) {\n            deletePaths.push(entry.destinationPath);\n            continue;\n        }\n        if (typeof entry.document !== 'object') {\n            // The worker 400s a scalar document, so no honest 202 can exist for this\n            // request. Throw here rather than let a dishonest 202 be compared against\n            // an intent this entry never had.\n            throw new Error(`Cannot derive the expected write intent for ${entry.destinationPath}: the request document is not an object`);\n        }\n        const wireDocument = JSON.parse(JSON.stringify(entry.document));\n        const operations = [];\n        const increments = [];\n        for (const [key, value] of Object.entries(wireDocument)) {\n            if (key.startsWith('_') || SERVER_DROPPED_FIELD_KEYS.has(key))\n                continue;\n            if (value === null) {\n                operations.push({ key, kind: 'delete' });\n                continue;\n            }\n            if (typeof value === 'object' && !Array.isArray(value) &&\n                typeof value.operation === 'string' && value.operation.length > 0) {\n                const operation = value.operation;\n                if (operation === 'increment' && typeof value.value === 'number') {\n                    increments.push({ key, delta: value.value });\n                    continue;\n                }\n                if (operation === 'time' && value.value === 'now') {\n                    operations.push({ key, kind: 'timestamp' });\n                    continue;\n                }\n                // Any other {operation,...} shape is rejected by the worker with a 400,\n                // so it has no honest onchain encoding. Falling through to a plain write\n                // of the raw object keeps the comparison fail-closed: a 202 can only\n                // arrive from a dishonest builder, and no instruction can match this.\n            }\n            if (value === TIME_NOW_SENTINEL) {\n                operations.push({ key, kind: 'timestamp' });\n                continue;\n            }\n            operations.push({ key, kind: 'write', value });\n        }\n        for (const { key, delta } of increments) {\n            operations.push({ key, kind: 'increment', delta });\n        }\n        intentDocuments.push({ path: entry.destinationPath, operations });\n    }\n    return { documents: intentDocuments, deletePaths };\n}\n/**\n * Minimal base58 decoder, used ONLY to recognize a declared-Address field: a\n * request string that decodes to exactly the 32 bytes the instruction carries\n * is a faithful AddressVal encoding of that string. Returns null on any\n * non-base58 character.\n */\nexport function decodeBase58(text) {\n    if (text.length === 0)\n        return null;\n    let value = BigInt(0);\n    for (const ch of text) {\n        const digit = BASE58_ALPHABET.indexOf(ch);\n        if (digit < 0)\n            return null;\n        value = value * BigInt(58) + BigInt(digit);\n    }\n    // Leading '1' characters are leading zero bytes, not part of the number.\n    let leadingZeros = 0;\n    while (leadingZeros < text.length && text[leadingZeros] === BASE58_ALPHABET[0])\n        leadingZeros++;\n    const body = [];\n    if (value > BigInt(0)) {\n        let hex = value.toString(16);\n        if (hex.length % 2 === 1)\n            hex = `0${hex}`;\n        for (let i = 0; i < hex.length; i += 2)\n            body.push(parseInt(hex.slice(i, i + 2), 16));\n    }\n    const out = new Uint8Array(leadingZeros + body.length);\n    out.set(body, leadingZeros);\n    return out;\n}\n/**\n * Whether `parsed` is an encoding the HONEST builder could have produced for\n * the request field value. The onchain FieldValue variant is chosen by the\n * collection's DECLARED schema (worker-side `jsValueToFieldValue`), which the\n * client does not hold, so every variant any declared type could yield for this\n * JSON value is accepted - and nothing else:\n * - boolean: BoolVal only.\n * - integer number/bigint: U64Val (inference/UInt; UInt takes abs for\n *   negatives) or I64Val (Int), of the exact integer.\n * - fractional number: StringVal of its decimal text (inference/Float), or a\n *   truncated U64/I64 (declared UInt/Int truncates toward zero).\n * - string: StringVal verbatim, AddressVal when it is the base58 of the exact\n *   32 bytes (declared Address), or U64/I64 of its integer text (declared\n *   UInt/Int accept numeric strings, truncating any fraction).\n * - array/object: StringVal of its JSON serialization (identical on both sides\n *   of the wire for the round-tripped value).\n */\nfunction isFaithfulFieldValueEncoding(requestValue, parsed) {\n    if (parsed === null)\n        return false;\n    if (typeof requestValue === 'boolean') {\n        return parsed.variant === 'bool' && parsed.value === requestValue;\n    }\n    if (typeof requestValue === 'number') {\n        if (!Number.isFinite(requestValue))\n            return false;\n        if (Number.isInteger(requestValue)) {\n            const exact = BigInt(requestValue);\n            if (parsed.variant === 'i64' && parsed.value === exact)\n                return true;\n            // The declared-UInt encoder stores abs(value), so a negative request\n            // integer can honestly arrive as its positive magnitude.\n            return parsed.variant === 'u64' && parsed.value === (exact < BigInt(0) ? -exact : exact);\n        }\n        if (parsed.variant === 'string' && parsed.value === String(requestValue))\n            return true;\n        const truncated = BigInt(Math.trunc(requestValue));\n        if (parsed.variant === 'i64' && parsed.value === truncated)\n            return true;\n        return parsed.variant === 'u64' && parsed.value === (truncated < BigInt(0) ? -truncated : truncated);\n    }\n    if (typeof requestValue === 'string') {\n        if (parsed.variant === 'string' && parsed.value === requestValue)\n            return true;\n        if (parsed.variant === 'address') {\n            const decoded = decodeBase58(requestValue);\n            const expectedBytes = parsed.value;\n            if (decoded !== null && decoded.length === 32 && decoded.every((byte, i) => byte === expectedBytes[i]))\n                return true;\n        }\n        if (parsed.variant === 'u64' || parsed.variant === 'i64') {\n            const trimmed = requestValue.trim();\n            const intPart = trimmed.includes('.') ? trimmed.split('.')[0] : trimmed;\n            if (/^-?\\d+$/.test(intPart)) {\n                const numeric = BigInt(intPart);\n                if (parsed.variant === 'i64' && parsed.value === numeric)\n                    return true;\n                if (parsed.variant === 'u64' && parsed.value === (numeric < BigInt(0) ? -numeric : numeric))\n                    return true;\n            }\n        }\n        return false;\n    }\n    if (requestValue !== null && typeof requestValue === 'object') {\n        return parsed.variant === 'string' && parsed.value === JSON.stringify(requestValue);\n    }\n    return false;\n}\nconst EXPECTED_KIND_TO_WIRE = {\n    write: FIELD_OPERATION_WRITE,\n    delete: FIELD_OPERATION_DELETE,\n    timestamp: FIELD_OPERATION_TIMESTAMP,\n    increment: FIELD_OPERATION_INCREMENT,\n};\nfunction describeParsedValue(value) {\n    if (value === null)\n        return 'no value';\n    if (value.variant === 'address')\n        return `address 0x${Buffer.from(value.value).toString('hex')}`;\n    if (value.variant === 'u64' || value.variant === 'i64')\n        return `${value.variant} ${value.value.toString()}`;\n    return `${value.variant} ${JSON.stringify(value.value)}`;\n}\n/**\n * OA-0001: the one Bounded set-documents instruction in a server-built\n * transaction must encode EXACTLY the requested write - app id, ordered\n * documents, per-field operation key/kind/value, ordered deletes, and a clear\n * simulate flag - or the transaction is rejected BEFORE the wallet sees it.\n *\n * The comparison is ordered because the honest builder (realtime-worker's\n * solana-tx-builder) preserves the request's document/delete/operation order\n * deterministically; nothing legitimate reorders, and an ordered check catches\n * duplicate-path and reorder tampering the retired path-SET comparison hid.\n *\n * Deliberately NOT bound here: the plugin `txData` entries and the remaining\n * accounts their ra_indices reference. Those are derived by server-side policy\n * hooks (a Jupiter quote, an ATA layout), not by the caller's request, so the\n * client holds no request-derived expectation to compare against; that surface\n * stays bound by the onchain policy, the typed setup-instruction guards, and\n * the attestation co-signer the program demands for any non-empty txData.\n */\nfunction assertMatchesExpectedIntent(label, expectedAppId, expected, parsed) {\n    var _a;\n    if (parsed.appId !== expectedAppId)\n        throw new Error(`${label} Bounded instruction appId does not match configured appId`);\n    if (parsed.simulate) {\n        throw new Error(`${label} Bounded instruction has the simulate flag set; a client-signed write must be a real execution`);\n    }\n    if (parsed.deletePaths.length !== expected.deletePaths.length ||\n        parsed.deletePaths.some((path, i) => path !== normalizeOnchainPath(expected.deletePaths[i]))) {\n        throw new Error(`${label} Bounded instruction delete paths do not match the requested deletes`);\n    }\n    if (parsed.documents.length !== expected.documents.length) {\n        throw new Error(`${label} Bounded instruction document count does not match the requested write ` +\n            `(expected ${expected.documents.length}, got ${parsed.documents.length})`);\n    }\n    for (let i = 0; i < expected.documents.length; i++) {\n        const expectedDoc = expected.documents[i];\n        const actualDoc = parsed.documents[i];\n        const expectedPath = normalizeOnchainPath(expectedDoc.path);\n        if (actualDoc.path !== expectedPath) {\n            throw new Error(`${label} Bounded instruction document path \"${actualDoc.path}\" does not match requested path \"${expectedPath}\"`);\n        }\n        if (actualDoc.operations.length !== expectedDoc.operations.length) {\n            throw new Error(`${label} Bounded instruction operations for path \"${expectedPath}\" do not match the requested write ` +\n                `(expected ${expectedDoc.operations.length} operations, got ${actualDoc.operations.length})`);\n        }\n        for (let j = 0; j < expectedDoc.operations.length; j++) {\n            const expectedOp = expectedDoc.operations[j];\n            const actualOp = actualDoc.operations[j];\n            if (actualOp.key !== expectedOp.key || actualOp.kind !== EXPECTED_KIND_TO_WIRE[expectedOp.kind]) {\n                throw new Error(`${label} Bounded instruction operation ${j} on path \"${expectedPath}\" does not match the requested write ` +\n                    `(expected key \"${expectedOp.key}\" kind ${expectedOp.kind}, got key \"${actualOp.key}\" kind ${actualOp.kind})`);\n            }\n            if (expectedOp.kind === 'delete' || expectedOp.kind === 'timestamp') {\n                if (actualOp.value !== null) {\n                    throw new Error(`${label} Bounded instruction operation \"${expectedOp.key}\" on path \"${expectedPath}\" carries an unexpected value`);\n                }\n                continue;\n            }\n            if (expectedOp.kind === 'increment') {\n                const expectedDelta = BigInt(Math.trunc(expectedOp.delta));\n                if (((_a = actualOp.value) === null || _a === void 0 ? void 0 : _a.variant) !== 'i64' || actualOp.value.value !== expectedDelta) {\n                    throw new Error(`${label} Bounded instruction increment \"${expectedOp.key}\" on path \"${expectedPath}\" does not match the requested delta`);\n                }\n                continue;\n            }\n            if (!isFaithfulFieldValueEncoding(expectedOp.value, actualOp.value)) {\n                throw new Error(`${label} Bounded instruction operation \"${expectedOp.key}\" on path \"${expectedPath}\" encodes a value that does not match the requested field ` +\n                    `(got ${describeParsedValue(actualOp.value)})`);\n            }\n        }\n    }\n}\n/** Read a little-endian u64 as a BigInt (lamport amounts can exceed 2^53). */\nfunction readU64LE(bytes, offset) {\n    let value = BigInt(0);\n    for (let i = 0; i < 8; i++)\n        value |= BigInt(bytes[offset + i]) << BigInt(8 * i);\n    return value;\n}\n/** Read a little-endian i64 as a BigInt (two's complement). */\nfunction readI64LE(bytes, offset) {\n    const unsigned = readU64LE(bytes, offset);\n    return unsigned >= (BigInt(1) << BigInt(63)) ? unsigned - (BigInt(1) << BigInt(64)) : unsigned;\n}\n/**\n * Resolve an instruction's referenced account keys against the transaction's\n * STATIC key list. A setup instruction that reaches into an address-lookup\n * table for any account it needs cannot be validated offline, so it fails\n * closed: every index must resolve to a static key.\n */\nfunction resolveInstructionAccounts(ix, accountKeys, label) {\n    return ix.accountKeyIndexes.map(index => {\n        if (index >= accountKeys.length) {\n            throw new Error(`${label} setup instruction references an address-lookup-table account (not allowed)`);\n        }\n        return accountKeys[index];\n    });\n}\n/**\n * A server-built idempotent ATA create is authorized ONLY when it is exactly the\n * canonical shape: instruction byte 0x01, six accounts, funded by the\n * transaction fee payer, over the System and an SPL Token program, and where the\n * account being created recomputes to the associated-token-account PDA of its\n * stated owner and mint. Nothing else - no arbitrary account create - passes.\n */\nfunction validateIdempotentAtaCreate(ix, data, accountKeys, feePayer, PublicKeyCtor, label) {\n    if (data.length !== 1 || data[0] !== ATA_CREATE_IDEMPOTENT_DISCRIMINATOR) {\n        throw new Error(`${label} contains a non-idempotent or malformed associated-token-account instruction`);\n    }\n    if (ix.accountKeyIndexes.length !== ATA_CREATE_ACCOUNT_COUNT) {\n        throw new Error(`${label} associated-token-account create has an unexpected account layout`);\n    }\n    const [funding, ata, owner, mint, systemProgram, tokenProgram] = resolveInstructionAccounts(ix, accountKeys, label);\n    if (!funding.equals(feePayer)) {\n        throw new Error(`${label} associated-token-account create is not funded by the transaction fee payer`);\n    }\n    if (systemProgram.toBase58() !== SYSTEM_PROGRAM_ID) {\n        throw new Error(`${label} associated-token-account create references an unexpected system program`);\n    }\n    if (!SPL_TOKEN_PROGRAM_IDS.has(tokenProgram.toBase58())) {\n        throw new Error(`${label} associated-token-account create references an unexpected token program`);\n    }\n    const [expectedAta] = PublicKeyCtor.findProgramAddressSync([owner.toBuffer(), tokenProgram.toBuffer(), mint.toBuffer()], new PublicKeyCtor(ASSOCIATED_TOKEN_PROGRAM_ID));\n    if (!ata.equals(expectedAta)) {\n        throw new Error(`${label} associated-token-account create does not derive the canonical account for its owner and mint`);\n    }\n}\n/**\n * A server-built System Program instruction is authorized ONLY as the gas\n * sponsor's top-up: a `transfer` FROM the transaction fee payer (the sponsor),\n * capped at the sponsorship maximum, TO a co-signing account (the sponsored\n * user). The fee payer can therefore only move its OWN lamports, bounded, and\n * only to an account that itself signed the transaction - never a drain to an\n * arbitrary address. Every other System instruction (createAccount, an\n * uncapped or misdirected transfer, ...) is rejected.\n */\nfunction validateSponsorTransfer(ix, data, accountKeys, feePayer, isAccountSigner, label) {\n    const isTransfer = data.length === SYSTEM_TRANSFER_DATA_LENGTH &&\n        (data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24)) === SYSTEM_TRANSFER_INSTRUCTION_INDEX;\n    if (!isTransfer) {\n        throw new Error(`${label} contains an unauthorized System Program instruction`);\n    }\n    if (ix.accountKeyIndexes.length !== SYSTEM_TRANSFER_ACCOUNT_COUNT) {\n        throw new Error(`${label} contains an unauthorized System Program instruction`);\n    }\n    const [from, to] = resolveInstructionAccounts(ix, accountKeys, label);\n    if (!from.equals(feePayer)) {\n        throw new Error(`${label} System Program transfer must originate from the transaction fee payer (gas sponsor)`);\n    }\n    const lamports = readU64LE(data, 4);\n    if (lamports > SPONSOR_TOPUP_MAX_LAMPORTS) {\n        throw new Error(`${label} System Program transfer exceeds the gas-sponsorship cap`);\n    }\n    const recipientIndex = ix.accountKeyIndexes[1];\n    if (!isAccountSigner(recipientIndex) || to.equals(feePayer)) {\n        throw new Error(`${label} System Program transfer recipient must be a co-signing sponsored account`);\n    }\n}\n/**\n * The format-blind half of pre-sign validation: every instruction must be a\n * program the server builder is allowed to emit, the two setup shapes must\n * recompute to this write's values, and exactly one Bounded set-documents\n * instruction must bind the caller's own intent (OA-0001). The v0 path feeds it\n * web3.js's compiled message; the SIMD-0385 v1 lane feeds it kit's decoded\n * instruction headers and payloads.\n */\nexport function validateServerTransactionSemantics(input) {\n    const { label, expectedAppId, expectedIntent, accountKeys, isAccountSigner, instructions, PublicKeyCtor } = input;\n    if (accountKeys.length === 0)\n        throw new Error(`${label} has no static account keys`);\n    const feePayer = accountKeys[0];\n    let boundedInstructionCount = 0;\n    let parsedBoundedInstruction = null;\n    for (const ix of instructions) {\n        if (!ALLOWED_SERVER_TX_PROGRAMS.has(ix.programId))\n            throw new Error(`${label} contains unauthorized program: ${ix.programId}`);\n        // Typed setup checks replace the old blanket System-Program ban: each of the\n        // two setup shapes the server builder emits (idempotent ATA create, gas\n        // sponsor top-up) is bound to recompute to the values this write needs, and\n        // anything else fails closed.\n        if (ix.programId === SYSTEM_PROGRAM_ID) {\n            validateSponsorTransfer(ix, ix.data, accountKeys, feePayer, isAccountSigner, label);\n        }\n        else if (ix.programId === ASSOCIATED_TOKEN_PROGRAM_ID) {\n            validateIdempotentAtaCreate(ix, ix.data, accountKeys, feePayer, PublicKeyCtor, label);\n        }\n        else if (ix.programId === BOUNDED_PROGRAM_MAINNET || ix.programId === BOUNDED_PROGRAM_DEVNET) {\n            boundedInstructionCount++;\n            parsedBoundedInstruction = parseBoundedSetDocumentsInstruction(ix.data, label);\n        }\n    }\n    if (boundedInstructionCount !== 1)\n        throw new Error(`${label} must contain exactly one Bounded set-documents instruction`);\n    // OA-0001: bind the FULL operation semantics of the one Bounded instruction to\n    // the caller's own request before any signer runs - not just the app/path\n    // envelope, which a tampered builder response can keep while changing amounts.\n    assertMatchesExpectedIntent(label, expectedAppId, expectedIntent, parsedBoundedInstruction);\n}\nfunction deserializeAndValidateServerTransaction(serializedTransaction, web3, options) {\n    const { VersionedTransaction: VersionedTransactionClass, PublicKey: PublicKeyCtor } = web3;\n    const transaction = VersionedTransactionClass.deserialize(Buffer.from(serializedTransaction, 'base64'));\n    const { label, expectedAppId, expectedIntent } = options;\n    const accountKeys = transaction.message.staticAccountKeys;\n    const instructions = transaction.message.compiledInstructions.map((ix) => {\n        var _a;\n        if (ix.programIdIndex >= accountKeys.length)\n            throw new Error(`${label} has program ID in lookup table (not allowed)`);\n        return {\n            programId: accountKeys[ix.programIdIndex].toBase58(),\n            accountKeyIndexes: [...ix.accountKeyIndexes],\n            data: ix.data instanceof Uint8Array ? ix.data : Buffer.from((_a = ix.data) !== null && _a !== void 0 ? _a : []),\n        };\n    });\n    validateServerTransactionSemantics({\n        label,\n        expectedAppId,\n        expectedIntent,\n        accountKeys,\n        isAccountSigner: (index) => transaction.message.isAccountSigner(index),\n        instructions,\n        PublicKeyCtor,\n    });\n    return transaction;\n}\n/**\n * DS3-0414: does this server-built transaction already carry a REAL signature?\n *\n * The worker partially signs before it answers: the sponsor keypair fills the\n * fee-payer slot for a sponsored write, and the attestation keypair co-signs any\n * plugin write (realtime-worker solana-tx-builder.ts). A Solana signature covers\n * the compiled message, recentBlockhash INCLUDED, so refreshing the blockhash\n * after either has signed silently voids their signature and the transaction can\n * never land. Versioned signature slots stay all-zero until a signer fills them,\n * and the pre-built lane is always versioned.\n *\n * EVERY slot, not just the fee payer's. The two co-signatures are independent:\n * the sponsor only signs when sponsorship is on, and sponsorship defaults to\n * \"none\", so the ordinary attested plugin write leaves slot 0 empty for the\n * wallet and carries the worker's signature further down. A fee-payer-only check\n * would wave exactly that shape through into a refresh that voids the\n * attestation signature and makes the write unlandable.\n *\n * Read from the BYTES rather than from the 202's `sponsorSigned` flag, for the\n * same reason: an attested plugin write is co-signed with `sponsorSigned: false`,\n * so the flag is not the question this asks.\n */\nfunction serverTransactionIsPartiallySigned(transaction) {\n    return transaction.signatures.some(signature => signature.some(byte => byte !== 0));\n}\n/**\n * LF-003: hand the wallet a blockhash that is still alive, and report the\n * lifetime the transaction was ACTUALLY signed against.\n *\n * A Solana blockhash dies 150 blocks (~60s) after it is minted, and the worker\n * mints this one at the START of its build. The remaining builder RPC round\n * trips, the response hop, and - dominating everything - the unbounded human\n * pause in front of the wallet's approval dialog all come out of that one\n * window. So the pre-built lane routinely asks a wallet to sign a transaction\n * that is already expired or expires before it can be broadcast: the send fails\n * `blockhash not found` (a DEFINITIVE failure), and a wallet that substitutes\n * the dead blockhash instead of signing it is refused by the SDK's own\n * message-equality check. Refreshing here, immediately before the signature,\n * gives the whole window to the approval.\n *\n * Returns the fence the caller must confirm and reconcile against - refreshing\n * the transaction without moving BOTH fence fields with it would declare expiry\n * against a blockhash the transaction no longer carries.\n */\nasync function refreshTransactionLifetime(transaction, rpc, serverFence) {\n    var _a;\n    const fence = { blockhash: serverFence.blockhash, lastValidBlockHeight: serverFence.lastValidBlockHeight };\n    // DS3-0414: someone else already signed these exact bytes. Their signature is\n    // the constraint; the caller keeps the worker's window - but only once that\n    // window is shown to describe the message that was signed. A fence naming a\n    // blockhash the transaction does not carry expires on its own schedule, and\n    // `expired_not_landed` is the ONE status callers treat as safe to retry, so a\n    // disagreement here would turn an in-flight write into a duplicate one.\n    if (serverTransactionIsPartiallySigned(transaction)) {\n        if (transaction.message.recentBlockhash !== fence.blockhash) {\n            throw new Error(`The pre-built Solana transaction was co-signed against blockhash ` +\n                `${transaction.message.recentBlockhash} but its expiry fence names ${fence.blockhash}, so the ` +\n                'write could not be reconciled honestly. Nothing was signed.');\n        }\n        return fence;\n    }\n    // Signing without submitting is allowed to run with no RPC configured at all\n    // (the caller broadcasts elsewhere), so there is nothing to refresh from.\n    if (!rpc)\n        return fence;\n    if (typeof rpc.getLatestBlockhash !== 'function') {\n        // Fail BEFORE the wallet is opened. Silently signing against the worker's\n        // ageing blockhash is the defect this exists to remove, so a Solana RPC that\n        // cannot answer is a configuration error, not a fallback.\n        throw new Error('Pre-built Solana transaction signing needs a current blockhash, but the configured Solana RPC ' +\n            'cannot report one (no getLatestBlockhash). Nothing was signed.');\n    }\n    const latest = await rpc.getLatestBlockhash('confirmed');\n    // Check the SHAPE before writing it onto the message. A value that is not 32\n    // base58 bytes cannot be compiled, and web3.js only discovers that inside the\n    // layout encoder - by which point the wallet has already been asked for a\n    // gesture. It would also become the fence, and a fence nobody can interpret is\n    // worse than a stale one.\n    const decoded = decodeBase58(String((_a = latest === null || latest === void 0 ? void 0 : latest.blockhash) !== null && _a !== void 0 ? _a : ''));\n    if (decoded === null || decoded.length !== 32) {\n        throw new Error(`The configured Solana RPC returned \"${latest === null || latest === void 0 ? void 0 : latest.blockhash}\" as the current blockhash, which is ` +\n            'not a 32-byte base58 value. Nothing was signed.');\n    }\n    transaction.message.recentBlockhash = latest.blockhash;\n    return { blockhash: latest.blockhash, lastValidBlockHeight: latest.lastValidBlockHeight };\n}\nexport async function handlePreBuiltTransaction(tx, authProvider, options, expectedIntent) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    // SIMD-0385 v1 wires start with 0x81 (message first, signatures trailing);\n    // web3.js's legacy/v0 classes cannot represent them, so they take their own lane.\n    if (isTransactionV1Base64(tx.serializedTransaction)) {\n        const { handlePreBuiltV1Transaction } = await import('./solana-v1-operations');\n        return handlePreBuiltV1Transaction(tx, authProvider, options, expectedIntent);\n    }\n    const { Connection, VersionedTransaction, PublicKey } = await import(\"@solana/web3.js\");\n    // Honor a wallet client's immutable config snapshot for the expected app-id\n    // binding and RPC endpoint (CTA-05); otherwise read the global init() config.\n    const config = (_b = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n    const transaction = deserializeAndValidateServerTransaction(tx.serializedTransaction, { VersionedTransaction, PublicKey }, {\n        label: 'Pre-built transaction', expectedAppId: config.appId, expectedIntent,\n    });\n    const shouldSubmit = (options === null || options === void 0 ? void 0 : options.shouldSubmitTx) !== false;\n    const rpcUrl = (_c = config.rpcUrl) === null || _c === void 0 ? void 0 : _c.trim();\n    const injectedRpc = (_d = options === null || options === void 0 ? void 0 : options._overrides) === null || _d === void 0 ? void 0 : _d._solanaRpc;\n    if (shouldSubmit && !rpcUrl && !injectedRpc) {\n        // Checked BEFORE the wallet signs, so a misconfigured app fails its first\n        // launch attempt without spending the user's signature. Deliberately no\n        // bundled default endpoint (2026-06-28 hardening): the app must supply the\n        // RPC it submits through.\n        throw new Error(`Pre-built Solana transaction submission requires init({ rpcUrl }) for ${tx.network}. ` +\n            `Pass a TOP-LEVEL rpcUrl (with chain) to init(), e.g. ` +\n            `init({ appId, chain: '${tx.network}', rpcUrl: '<your ${tx.network} RPC endpoint>' }); ` +\n            `a nested walletLogin.rpcUrl only configures wallet login and does not enable submission.`);\n    }\n    // One RPC handle for the whole lane: the pre-sign lifetime refresh, the\n    // broadcast, and the confirmation must all speak to the same endpoint, or the\n    // fence would be minted against a chain view the send never sees. Null only on\n    // the sign-without-submitting path, which the guard above lets run RPC-less.\n    const connection = injectedRpc !== null && injectedRpc !== void 0 ? injectedRpc : (rpcUrl ? new Connection(rpcUrl, 'confirmed') : null);\n    // LF-003: the transaction must be signed against a blockhash that is still\n    // alive, and the fence must describe the transaction that was actually signed.\n    const fence = await refreshTransactionLifetime(transaction, connection, tx);\n    const signedTx = await authProvider.signTransaction(transaction);\n    const rawTx = signedTx.serialize();\n    const signedTransaction = Buffer.from(rawTx).toString('base64');\n    if (!shouldSubmit) {\n        // Signed and NOT sent. There is no signature and nothing to mirror.\n        return { outcome: 'signed', lane: 'solana', transactionSignature: null, signedTransaction, fence };\n    }\n    // Derive the signature from the signed bytes BEFORE broadcasting, so a send\n    // whose response is lost still yields a reconcilable identifier.\n    const signature = deriveTransactionSignature(signedTx);\n    // Non-null here: the guard above refuses a submitting write with no RPC.\n    const submitRpc = connection;\n    try {\n        await submitRpc.sendRawTransaction(rawTx, { skipPreflight: false, maxRetries: 3 });\n    }\n    catch (error) {\n        // A definitive rejection never entered the network — keep throwing. If it is\n        // the Bounded program rejecting the write (rule / cap / invariant), surface\n        // the actionable stale-mirror-race message instead of a raw \"simulation\n        // failed\"; otherwise re-throw the infra error unchanged.\n        if (isDefinitiveSolanaSendFailure(error)) {\n            if (isBoundedOnchainRuleRejection(error))\n                throw new BoundedOnchainRuleRejection(error);\n            throw error;\n        }\n        // Ambiguous transport outcome: the node may hold these exact bytes. Report\n        // the pre-derived signature so the caller reconciles it instead of building\n        // a second transaction that could land beside the first.\n        return {\n            outcome: 'submitted',\n            lane: 'solana',\n            transactionSignature: signature,\n            signedTransaction,\n            fence,\n            reason: `Broadcast response was lost or inconclusive: ${errorText(error)}`,\n        };\n    }\n    let confirmation;\n    try {\n        confirmation = await submitRpc.confirmTransaction({\n            signature, blockhash: fence.blockhash, lastValidBlockHeight: fence.lastValidBlockHeight,\n        }, 'confirmed');\n    }\n    catch (error) {\n        // The bytes were accepted; only the confirmation outcome is unknown.\n        return {\n            outcome: 'submitted',\n            lane: 'solana',\n            transactionSignature: signature,\n            signedTransaction,\n            fence,\n            reason: `Confirmation outcome unknown: ${errorText(error)}`,\n        };\n    }\n    // #310: \"confirmed\" only means the network recorded the transaction, not that it\n    // succeeded - a landed-but-failed transaction carries an err. Report it as a failure\n    // (with on-chain logs) instead of a fake success, mirroring the server keypair provider.\n    if ((_e = confirmation.value) === null || _e === void 0 ? void 0 : _e.err) {\n        let logMessages;\n        try {\n            const txInfo = await getTransactionJson(submitRpc, signature, 'confirmed');\n            logMessages = (_f = txInfo === null || txInfo === void 0 ? void 0 : txInfo.meta) === null || _f === void 0 ? void 0 : _f.logMessages;\n        }\n        catch (_j) {\n            // Log retrieval is diagnostic only; the on-chain error is the verdict.\n        }\n        if (isBoundedOnchainRuleRejection(confirmation.value.err, logMessages)) {\n            throw new BoundedOnchainRuleRejection(confirmation.value.err, logMessages);\n        }\n        const errorMessage = logMessages ? JSON.stringify(logMessages) : JSON.stringify(confirmation.value.err);\n        throw new Error(`Transaction failed: ${errorMessage}`);\n    }\n    return {\n        outcome: 'confirmed',\n        lane: 'solana',\n        transactionSignature: signature,\n        signedTransaction,\n        fence,\n        confirmationContextSlot: (_h = (_g = confirmation.context) === null || _g === void 0 ? void 0 : _g.slot) !== null && _h !== void 0 ? _h : 0,\n    };\n}\n"],"names":["Buffer"],"mappings":";;;;;;AAIA,MAAM,eAAe,GAAG,4DAA4D;AACpF;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE;AACpC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC1B,QAAQ,OAAO,EAAE;AACjB,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC;AACtB,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,IAAI,KAAK,GAAG,IAAI;AACxB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,YAAY,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;AAClC,YAAY,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC;AACpC,QAAQ;AACR,QAAQ,OAAO,KAAK,GAAG,CAAC,EAAE;AAC1B,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACnC,YAAY,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC;AACpC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,GAAG,GAAG,EAAE;AAChB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC3D,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC;AACjC,IAAI,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAC/C,QAAQ,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzC,IAAI,OAAO,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,CAAC,qBAAqB,EAAE;AAC7D,IAAI,IAAI;AACR,QAAQ,MAAM,IAAI,GAAGA,oBAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC7E,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;AAClD,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACO,SAAS,0BAA0B,CAAC,iBAAiB,EAAE;AAC9D,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,iBAAiB,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AACpG,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,QAAQ,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC;AACtF,IAAI;AACJ,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;AAC7C,QAAQ,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC;AACzF,IAAI;AACJ,IAAI,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,+BAA+B,GAAG;AACxC,IAAI,mBAAmB;AACvB,IAAI,WAAW;AACf,IAAI,qBAAqB;AACzB,IAAI,gCAAgC;AACpC,IAAI,uBAAuB;AAC3B,IAAI,qBAAqB;AACzB,IAAI,6BAA6B;AACjC,IAAI,mEAAmE;AACvE,CAAC;AACM,SAAS,6BAA6B,CAAC,KAAK,EAAE;AACrD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,IAAI,MAAM,GAAG,GAAG,KAAK;AACrB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,sBAAsB;AACrG,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;AACtL,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,KAAK;AACpB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAC3F,QAAQ,OAAO,KAAK;AACpB,IAAI,OAAO,+BAA+B,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8BAA8B,GAAG;AACvC,IAAI,gDAAgD;AACpD,IAAI,wCAAwC;AAC5C,IAAI,2BAA2B;AAC/B,IAAI,iCAAiC;AACrC,CAAC;AACD,SAAS,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE;AACpD,IAAI,MAAM,GAAG,GAAG,KAAK;AACrB,IAAI,MAAM,KAAK,GAAG,EAAE;AACpB,IAAI,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;AACzJ,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AACjC,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,aAAa,IAAI,OAAO,MAAM,KAAK,QAAQ;AAC3C,YAAY,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9B,IAAI;AACJ,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO;AAC7D,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,6BAA6B,CAAC,KAAK,EAAE,SAAS,EAAE;AAChE,IAAI,MAAM,GAAG,GAAG,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC;AAC1D,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,2BAA2B,SAAS,KAAK,CAAC;AACvD,IAAI,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE;AAClC,QAAQ,KAAK,CAAC,2FAA2F;AACzG,YAAY,gGAAgG;AAC5G,YAAY,kGAAkG;AAC9G,YAAY,8DAA8D,CAAC;AAC3E,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;AAC7B,QAAQ,IAAI,CAAC,IAAI,GAAG,6BAA6B;AACjD,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,MAAM,GAAG,GAAG,KAAK;AACzB,QAAQ,MAAM,IAAI,GAAG,EAAE;AACvB,QAAQ,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;AAC7J,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AACrC,gBAAgB,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,IAAI;AACJ;AACO,SAAS,SAAS,CAAC,KAAK,EAAE;AACjC,IAAI,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO;AAC/E,IAAI,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACtF;AACA,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5F,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3F,MAAM,sBAAsB,GAAG,6CAA6C;AAC5E,MAAM,iBAAiB,GAAG,kCAAkC;AAC5D;AACA;AACA;AACA,MAAM,2BAA2B,GAAG,8CAA8C;AAClF,MAAM,gBAAgB,GAAG,6CAA6C;AACtE,MAAM,qBAAqB,GAAG,6CAA6C;AAC3E,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;AAChF;AACA;AACA;AACA,MAAM,mCAAmC,GAAG,CAAC;AAC7C,MAAM,wBAAwB,GAAG,CAAC;AAClC;AACA;AACA,MAAM,iCAAiC,GAAG,CAAC;AAC3C,MAAM,2BAA2B,GAAG,EAAE;AACtC,MAAM,6BAA6B,GAAG,CAAC;AACvC;AACA;AACA;AACA,MAAM,0BAA0B,GAAG,MAAM,CAAC,QAAQ,CAAC;AACnD;AACA;AACA;AACA,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;AAC3C,IAAI,uBAAuB;AAC3B,IAAI,sBAAsB;AAC1B,IAAI,sBAAsB;AAC1B,IAAI,iBAAiB;AACrB,IAAI,2BAA2B;AAC/B,CAAC,CAAC;AACF;AACA,MAAM,2BAA2B,GAAG,0BAA0B;AAC9D,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAC;AACnD,IAAI,2BAA2B;AAC/B,CAAC,CAAC;AACF,MAAM,WAAW,CAAC;AAClB,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AACrC,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,IAAI;AACJ,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE;AAChC,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACrD,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,sDAAsD,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1G,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAClF,IAAI,OAAO,CAAC,KAAK,EAAE;AACnB,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;AACnC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChF,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACnF,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC;AACxB,QAAQ,OAAO,KAAK,KAAK,CAAC;AAC1B,IAAI;AACJ,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;AACnF,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE;AAC7B,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;AACxC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACtE,QAAQ,IAAI,CAAC,MAAM,IAAI,MAAM;AAC7B,QAAQ,OAAO,GAAG;AAClB,IAAI;AACJ,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACtD,QAAQ,OAAOA,oBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1E,IAAI;AACJ,IAAI,uBAAuB,CAAC,KAAK,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC;AACrE,IAAI;AACJ,IAAI,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzD;AACA,SAAS,qBAAqB,CAAC,MAAM,EAAE;AACvC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC;AAC1D,IAAI,IAAI,MAAM,KAAK,CAAC;AACpB,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,MAAM,KAAK,CAAC;AACpB,QAAQ,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC;AACtF,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC;AAC5D,IAAI,IAAI,OAAO,KAAK,CAAC;AACrB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,yBAAyB,CAAC,EAAE,CAAC,CAAC,EAAE;AACtG,IAAI,IAAI,OAAO,KAAK,CAAC;AACrB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,yBAAyB,CAAC,EAAE,CAAC,CAAC,EAAE;AACtG,IAAI,IAAI,OAAO,KAAK,CAAC;AACrB,QAAQ,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;AACtF,IAAI,IAAI,OAAO,KAAK,CAAC;AACrB,QAAQ,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;AACxF,IAAI,IAAI,OAAO,KAAK,CAAC;AACrB,QAAQ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,yBAAyB,CAAC,EAAE;AAC7F,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,gEAAgE,EAAE,OAAO,CAAC,CAAC,CAAC;AACjG;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE;AACpC,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AAChE,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;AACzD,QAAQ,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5C,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;AAChC,QAAQ,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5C,IAAI,OAAO,UAAU;AACrB;AACA,SAAS,mCAAmC,CAAC,IAAI,EAAE,KAAK,EAAE;AAC1D,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC1E,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAChE,IAAI,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;AAChE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC5E,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;AAClD,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;AAC5C,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,IAAI,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAC5D,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;AAC5C,QAAQ,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAC7E,QAAQ,MAAM,UAAU,GAAG,EAAE;AAC7B,QAAQ,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;AAClE,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;AACjD,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC;AAC1D,YAAY,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC;AACvD,YAAY,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACxD,YAAY,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACjD,QAAQ;AACR,QAAQ,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC5C,IAAI;AACJ,IAAI,MAAM,WAAW,GAAG,EAAE;AAC1B,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC7D,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE;AACxC,QAAQ,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;AAChF,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;AACvD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,YAAY,iBAAiB,EAAE,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC;AAC9E,YAAY,OAAO,EAAE,MAAM,CAAC,uBAAuB,CAAC,cAAc,CAAC;AACnE,YAAY,SAAS,EAAE,MAAM,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;AACzE,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AAClD,IAAI,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC;AAChD,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACvE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACzB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACzE,IAAI,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAK,CAAC,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAqB,GAAG,CAAC;AAC/B,MAAM,sBAAsB,GAAG,CAAC;AAChC,MAAM,yBAAyB,GAAG,CAAC;AACnC,MAAM,yBAAyB,GAAG,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;AAC1C,IAAI,QAAQ;AACZ,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,WAAW;AACf,IAAI,aAAa;AACjB,IAAI,WAAW;AACf,CAAC,CAAC;AACF;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,CAAC,SAAS,EAAE;AACpD,IAAI,MAAM,eAAe,GAAG,EAAE;AAC9B,IAAI,MAAM,WAAW,GAAG,EAAE;AAC1B,IAAI,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AACnC,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;AACpC,YAAY,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;AACnD,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAChD;AACA;AACA;AACA,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,4CAA4C,EAAE,KAAK,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAAC;AAC1I,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvE,QAAQ,MAAM,UAAU,GAAG,EAAE;AAC7B,QAAQ,MAAM,UAAU,GAAG,EAAE;AAC7B,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACjE,YAAY,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC;AACzE,gBAAgB;AAChB,YAAY,IAAI,KAAK,KAAK,IAAI,EAAE;AAChC,gBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACxD,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAClE,gBAAgB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACnF,gBAAgB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;AACjD,gBAAgB,IAAI,SAAS,KAAK,WAAW,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;AAClF,oBAAoB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAChE,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;AACnE,oBAAoB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC/D,oBAAoB;AACpB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,YAAY;AACZ,YAAY,IAAI,KAAK,KAAK,iBAAiB,EAAE;AAC7C,gBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC3D,gBAAgB;AAChB,YAAY;AACZ,YAAY,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1D,QAAQ;AACR,QAAQ,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE;AACjD,YAAY,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC9D,QAAQ;AACR,QAAQ,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;AACzE,IAAI;AACJ,IAAI,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,IAAI,EAAE;AACnC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AACzB,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACzB,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;AAC3B,QAAQ,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;AACjD,QAAQ,IAAI,KAAK,GAAG,CAAC;AACrB,YAAY,OAAO,IAAI;AACvB,QAAQ,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAClD,IAAI;AACJ;AACA,IAAI,IAAI,YAAY,GAAG,CAAC;AACxB,IAAI,OAAO,YAAY,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC;AAClF,QAAQ,YAAY,EAAE;AACtB,IAAI,MAAM,IAAI,GAAG,EAAE;AACnB,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE;AAC3B,QAAQ,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpC,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;AAChC,YAAY,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3B,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AAC9C,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxD,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1D,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;AAC/B,IAAI,OAAO,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE;AAC5D,IAAI,IAAI,MAAM,KAAK,IAAI;AACvB,QAAQ,OAAO,KAAK;AACpB,IAAI,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE;AAC3C,QAAQ,OAAO,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY;AACzE,IAAI;AACJ,IAAI,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AAC1C,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC1C,YAAY,OAAO,KAAK;AACxB,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;AAC5C,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC9C,YAAY,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;AAClE,gBAAgB,OAAO,IAAI;AAC3B;AACA;AACA,YAAY,OAAO,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;AACpG,QAAQ;AACR,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,YAAY,CAAC;AAChF,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC1D,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;AAClE,YAAY,OAAO,IAAI;AACvB,QAAQ,OAAO,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAC5G,IAAI;AACJ,IAAI,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AAC1C,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY;AACxE,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;AAC1C,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC;AACtD,YAAY,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK;AAC9C,YAAY,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;AAClH,gBAAgB,OAAO,IAAI;AAC3B,QAAQ;AACR,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE;AAClE,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE;AAC/C,YAAY,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;AACnF,YAAY,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,gBAAgB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC/C,gBAAgB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;AACxE,oBAAoB,OAAO,IAAI;AAC/B,gBAAgB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3G,oBAAoB,OAAO,IAAI;AAC/B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,IAAI,YAAY,KAAK,IAAI,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AACnE,QAAQ,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AAC3F,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AACA,MAAM,qBAAqB,GAAG;AAC9B,IAAI,KAAK,EAAE,qBAAqB;AAChC,IAAI,MAAM,EAAE,sBAAsB;AAClC,IAAI,SAAS,EAAE,yBAAyB;AACxC,IAAI,SAAS,EAAE,yBAAyB;AACxC,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAK,EAAE;AACpC,IAAI,IAAI,KAAK,KAAK,IAAI;AACtB,QAAQ,OAAO,UAAU;AACzB,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;AACnC,QAAQ,OAAO,CAAC,UAAU,EAAEA,oBAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACtE,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;AAC1D,QAAQ,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3D,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,2BAA2B,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC7E,IAAI,IAAI,EAAE;AACV,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa;AACtC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,0DAA0D,CAAC,CAAC;AAC7F,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE;AACzB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,8FAA8F,CAAC,CAAC;AACjI,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,QAAQ,CAAC,WAAW,CAAC,MAAM;AACjE,QAAQ,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,oBAAoB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACtG,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,oEAAoE,CAAC,CAAC;AACvG,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;AAC/D,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,uEAAuE,CAAC;AACzG,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtF,IAAI;AACJ,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxD,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,QAAQ,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC;AACnE,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE;AAC7C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,oCAAoC,EAAE,SAAS,CAAC,IAAI,CAAC,iCAAiC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC7I,QAAQ;AACR,QAAQ,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE;AAC3E,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,0CAA0C,EAAE,YAAY,CAAC,mCAAmC,CAAC;AAClI,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7G,QAAQ;AACR,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChE,YAAY,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;AACxD,YAAY,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AACpD,YAAY,IAAI,QAAQ,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC7G,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,qCAAqC,CAAC;AAC3I,oBAAoB,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClI,YAAY;AACZ,YAAY,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE;AACjF,gBAAgB,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE;AAC7C,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,gCAAgC,EAAE,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,6BAA6B,CAAC,CAAC;AACvJ,gBAAgB;AAChB,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE;AACjD,gBAAgB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1E,gBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,aAAa,EAAE;AACjJ,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,gCAAgC,EAAE,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,oCAAoC,CAAC,CAAC;AAC9J,gBAAgB;AAChB,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjF,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,gCAAgC,EAAE,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,0DAA0D,CAAC;AAC/K,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE;AAClC,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACzB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC9B,QAAQ,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3D,IAAI,OAAO,KAAK;AAChB;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE;AAClC,IAAI,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;AAC7C,IAAI,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0BAA0B,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;AAC5D,IAAI,OAAO,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI;AAC7C,QAAQ,IAAI,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE;AACzC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,2EAA2E,CAAC,CAAC;AAClH,QAAQ;AACR,QAAQ,OAAO,WAAW,CAAC,KAAK,CAAC;AACjC,IAAI,CAAC,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,2BAA2B,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE;AAC5F,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,mCAAmC,EAAE;AAC9E,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,4EAA4E,CAAC,CAAC;AAC/G,IAAI;AACJ,IAAI,IAAI,EAAE,CAAC,iBAAiB,CAAC,MAAM,KAAK,wBAAwB,EAAE;AAClE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACpG,IAAI;AACJ,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,GAAG,0BAA0B,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC;AACvH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACnC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,2EAA2E,CAAC,CAAC;AAC9G,IAAI;AACJ,IAAI,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,iBAAiB,EAAE;AACxD,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,wEAAwE,CAAC,CAAC;AAC3G,IAAI;AACJ,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC7D,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,uEAAuE,CAAC,CAAC;AAC1G,IAAI;AACJ,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,aAAa,CAAC,2BAA2B,CAAC,CAAC;AAC5K,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAClC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,6FAA6F,CAAC,CAAC;AAChI,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE;AAC1F,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,2BAA2B;AAClE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,iCAAiC;AAC5G,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACvF,IAAI;AACJ,IAAI,IAAI,EAAE,CAAC,iBAAiB,CAAC,MAAM,KAAK,6BAA6B,EAAE;AACvE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACvF,IAAI;AACJ,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,0BAA0B,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC;AACzE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AAChC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,oFAAoF,CAAC,CAAC;AACvH,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AACvC,IAAI,IAAI,QAAQ,GAAG,0BAA0B,EAAE;AAC/C,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC3F,IAAI;AACJ,IAAI,MAAM,cAAc,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAClD,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACjE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,yEAAyE,CAAC,CAAC;AAC5G,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,kCAAkC,CAAC,KAAK,EAAE;AAC1D,IAAI,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,KAAK;AACrH,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;AAChC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC9D,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,uBAAuB,GAAG,CAAC;AACnC,IAAI,IAAI,wBAAwB,GAAG,IAAI;AACvC,IAAI,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE;AACnC,QAAQ,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;AACzD,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,gCAAgC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACtF;AACA;AACA;AACA;AACA,QAAQ,IAAI,EAAE,CAAC,SAAS,KAAK,iBAAiB,EAAE;AAChD,YAAY,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;AAC/F,QAAQ;AACR,aAAa,IAAI,EAAE,CAAC,SAAS,KAAK,2BAA2B,EAAE;AAC/D,YAAY,2BAA2B,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC;AACjG,QAAQ;AACR,aAAa,IAAI,EAAE,CAAC,SAAS,KAAK,uBAAuB,IAAI,EAAE,CAAC,SAAS,KAAK,sBAAsB,EAAE;AACtG,YAAY,uBAAuB,EAAE;AACrC,YAAY,wBAAwB,GAAG,mCAAmC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1F,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,uBAAuB,KAAK,CAAC;AACrC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC9F;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,wBAAwB,CAAC;AAC/F;AACA,SAAS,uCAAuC,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE;AACvF,IAAI,MAAM,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;AAC9F,IAAI,MAAM,WAAW,GAAG,yBAAyB,CAAC,WAAW,CAACA,oBAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;AAC3G,IAAI,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,OAAO;AAC5D,IAAI,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,iBAAiB;AAC7D,IAAI,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK;AAC9E,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,EAAE,CAAC,cAAc,IAAI,WAAW,CAAC,MAAM;AACnD,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACpF,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;AAChE,YAAY,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;AACxD,YAAY,IAAI,EAAE,EAAE,CAAC,IAAI,YAAY,UAAU,GAAG,EAAE,CAAC,IAAI,GAAGA,oBAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3H,SAAS;AACT,IAAI,CAAC,CAAC;AACN,IAAI,kCAAkC,CAAC;AACvC,QAAQ,KAAK;AACb,QAAQ,aAAa;AACrB,QAAQ,cAAc;AACtB,QAAQ,WAAW;AACnB,QAAQ,eAAe,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9E,QAAQ,YAAY;AACpB,QAAQ,aAAa;AACrB,KAAK,CAAC;AACN,IAAI,OAAO,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kCAAkC,CAAC,WAAW,EAAE;AACzD,IAAI,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0BAA0B,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;AACzE,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,oBAAoB,EAAE,WAAW,CAAC,oBAAoB,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,kCAAkC,CAAC,WAAW,CAAC,EAAE;AACzD,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,eAAe,KAAK,KAAK,CAAC,SAAS,EAAE;AACrE,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,iEAAiE,CAAC;AAC/F,gBAAgB,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;AAC/G,gBAAgB,6DAA6D,CAAC;AAC9E,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA,IAAI,IAAI,CAAC,GAAG;AACZ,QAAQ,OAAO,KAAK;AACpB,IAAI,IAAI,OAAO,GAAG,CAAC,kBAAkB,KAAK,UAAU,EAAE;AACtD;AACA;AACA;AACA,QAAQ,MAAM,IAAI,KAAK,CAAC,gGAAgG;AACxH,YAAY,gEAAgE,CAAC;AAC7E,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACrJ,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE;AACnD,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oCAAoC,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,qCAAqC,CAAC;AACtK,YAAY,iDAAiD,CAAC;AAC9D,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS;AAC1D,IAAI,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE;AAC7F;AACO,eAAe,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE;AAC3F,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtC;AACA;AACA,IAAI,IAAI,qBAAqB,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE;AACzD,QAAQ,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,OAAO,qCAAwB,CAAC;AACtF,QAAQ,OAAO,2BAA2B,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC;AACrF,IAAI;AACJ,IAAI,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAC3F;AACA;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACxM,IAAI,MAAM,WAAW,GAAG,uCAAuC,CAAC,EAAE,CAAC,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,SAAS,EAAE,EAAE;AAC/H,QAAQ,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc;AACnF,KAAK,CAAC;AACN,IAAI,MAAM,YAAY,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,MAAM,KAAK;AAC7G,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE;AACtF,IAAI,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,UAAU;AACtJ,IAAI,IAAI,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE;AACjD;AACA;AACA;AACA;AACA,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,sEAAsE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/G,YAAY,CAAC,qDAAqD,CAAC;AACnE,YAAY,CAAC,sBAAsB,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACpG,YAAY,CAAC,wFAAwF,CAAC,CAAC;AACvG,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,MAAM,UAAU,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,WAAW,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;AAC3I;AACA;AACA,IAAI,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC;AAC/E,IAAI,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC;AACpE,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE;AACtC,IAAI,MAAM,iBAAiB,GAAGA,oBAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnE,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB;AACA,QAAQ,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE;AAC1G,IAAI;AACJ;AACA;AACA,IAAI,MAAM,SAAS,GAAG,0BAA0B,CAAC,QAAQ,CAAC;AAC1D;AACA,IAAI,MAAM,SAAS,GAAG,UAAU;AAChC,IAAI,IAAI;AACR,QAAQ,MAAM,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAC1F,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB;AACA;AACA;AACA;AACA,QAAQ,IAAI,6BAA6B,CAAC,KAAK,CAAC,EAAE;AAClD,YAAY,IAAI,6BAA6B,CAAC,KAAK,CAAC;AACpD,gBAAgB,MAAM,IAAI,2BAA2B,CAAC,KAAK,CAAC;AAC5D,YAAY,MAAM,KAAK;AACvB,QAAQ;AACR;AACA;AACA;AACA,QAAQ,OAAO;AACf,YAAY,OAAO,EAAE,WAAW;AAChC,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,oBAAoB,EAAE,SAAS;AAC3C,YAAY,iBAAiB;AAC7B,YAAY,KAAK;AACjB,YAAY,MAAM,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACtF,SAAS;AACT,IAAI;AACJ,IAAI,IAAI,YAAY;AACpB,IAAI,IAAI;AACR,QAAQ,YAAY,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC;AAC1D,YAAY,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;AACnG,SAAS,EAAE,WAAW,CAAC;AACvB,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB;AACA,QAAQ,OAAO;AACf,YAAY,OAAO,EAAE,WAAW;AAChC,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,oBAAoB,EAAE,SAAS;AAC3C,YAAY,iBAAiB;AAC7B,YAAY,KAAK;AACjB,YAAY,MAAM,EAAE,CAAC,8BAA8B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AAC/E,QAAQ,IAAI,WAAW;AACvB,QAAQ,IAAI;AACZ,YAAY,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;AACtF,YAAY,WAAW,GAAG,CAAC,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW;AAChJ,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB;AACA,QAAQ;AACR,QAAQ,IAAI,6BAA6B,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;AAChF,YAAY,MAAM,IAAI,2BAA2B,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC;AACtF,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/G,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC;AAC9D,IAAI;AACJ,IAAI,OAAO;AACX,QAAQ,OAAO,EAAE,WAAW;AAC5B,QAAQ,IAAI,EAAE,QAAQ;AACtB,QAAQ,oBAAoB,EAAE,SAAS;AACvC,QAAQ,iBAAiB;AACzB,QAAQ,KAAK;AACb,QAAQ,uBAAuB,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;AACnJ,KAAK;AACL;;;;"}